2010-04-16 10 views
6

Usamos Facebook Connect en nuestro sitio junto con el módulo CPAN WWW::Facebook::API para publicar en el suministro de noticias de nuestros usuarios cuando lo solicite el usuario.¿Cómo uso Perl's WWW :: Facebook :: API para publicar en el suministro de noticias de un usuario?

Hasta ahora hemos sido capaces de actualizar correctamente el estado del usuario utilizando el siguiente código:

use WWW::Facebook::API; 
my $facebook = WWW::Facebook::API->new(
    desktop => 0, 
    api_key => $fb_api_key, 
    secret => $fb_secret, 
session_key => $query->cookie($fb_api_key.'_session_key'), 
session_expires => $query->cookie($fb_api_key.'_expires'), 
session_uid => $query->cookie($fb_api_key.'_user') 
); 

my $response = $facebook->stream->publish(
message => qq|Test status message|, 
); 

Sin embargo, cuando tratamos de actualizar el código anterior para que podamos publicar historias de suministro de noticias que incluyen archivos adjuntos y la acción enlaces como se especifica en la documentación de la API de Facebook para Stream.Publish, hemos intentado alrededor de 100 formas diferentes sin ningún éxito.

De acuerdo con la CPAN documentation todos tendríamos que hacer es actualizar nuestro código a algo así como las siguientes y pasar los archivos adjuntos & enlaces de acción apropiadamente que no parece funcionar:

my $response = $facebook->stream->publish(
message => qq|Test status message|, 
    attachment => $json, 
    action_links => [@links], 
); 

Por ejemplo, están pasando los argumentos anteriores de la siguiente manera:

$json = qq|{ 'name': 'i\'m bursting with joy', 'href': ' http://bit.ly/187gO1', 'caption': '{*actor*} rated the lolcat 5 stars', 'description': 'a funny looking cat', 'properties': { 'category': { 'text': 'humor', 'href': 'http://bit.ly/KYbaN'}, 'ratings': '5 stars' }, 'media': [{ 'type': 'image', 'src': 'http://icanhascheezburger.files.wordpress.com/2009/03/funny-pictures-your-cat-is-bursting-with-joy1.jpg', 'href': 'http://bit.ly/187gO1'}] }|; 
@links = ["{'text':'Link 1', 'href':'http://www.link1.com'}","{'text':'Link 2', 'href':'http://www.link2.com'}"]; 

lo anterior, ni ninguna de las otras representaciones que probamos parecen funcionar. Espero que algún otro desarrollador de Perl tenga esto funcionando y pueda explicar cómo crear las variables de archivos adjuntos y action_links de manera apropiada en Perl para publicar en el feed de noticias de Facebook a través de WWW :: Facebook :: API.

Gracias de antemano por su ayuda!

+0

Ha intentado ponerse en contacto con el desarrollador/mantenedor (s) de este módulo? – Ether

+0

Lo hice y él realmente proporcionó un código casi idéntico al que proporcionó @friedo a continuación. Después de muchas horas frustrantes, parece estar funcionando ahora. –

Respuesta

5

Creo que el problema es que su cadena JSON podría no ser válida. Pude hacerlo funcionar simplemente usando JSON::Any para serializar una estructura de datos Perl en lugar de construir la cadena JSON manualmente. (WWW::Facebook::API utiliza JSON :: Cualquier debajo del capó, que sería bueno si pudiera tener una estructura de datos de Perl en lugar de una cadena JSON voy a tratar de enviar un parche este fin de semana..)

use WWW::Facebook::API; 
use JSON::Any; 

my $j = JSON::Any->new; 

my $fb = WWW::Facebook::API->new( 
    desktop => 0, 
    api_key => $api_key, 
    secret => $secret, 
    session_key => $session, 
    session_expires => $expires, 
    session_uid => $fb_uid 
); 

my $res = $fb->stream->publish( 
    message => 'Test message', 
    attachment => $j->objToJson( 
     { name => 'Foo bar baz', 
      href => 'http://www.google.com/', 
      description => "this is a thing" 
     }), 
    action_links => $j->objToJson( 
     [ { text => 'action link text', 
      href => 'http://www.foobar.com/' 
     } ]) 
); 

El resultado:

http://www.friedo.com/fb_attach.jpg

+0

@friedo - Funcionó como un encanto. Estoy de acuerdo en que sería bueno si el módulo fuera un poco más flexible y/o la documentación fuera un poco más explícita sobre cómo exactamente se deben pasar las cosas. ¡Gracias de nuevo! –

Cuestiones relacionadas