Как использовать Perl WWW :: Facebook :: API для публикации в ленте новостей пользователя? - PullRequest
6 голосов
/ 16 апреля 2010

Мы используем Facebook Connect на нашем сайте вместе с модулем WWW :: Facebook :: API CPAN, чтобы публиковать для наших пользователей новостную ленту по запросу пользователя.

Пока мы смогли успешно обновить статус пользователя, используя следующий код:

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|,
);

Однако, когда мы пытаемся обновить приведенный выше код, чтобы мы могли публиковать новостные ленты, которые содержат вложения и ссылки действий, как указано в документации API Facebook для Stream.Publish , мы попробовали около 100 различных способов. без успеха.

В соответствии с документацией CPAN все, что нам нужно сделать, это обновить наш код до чего-то подобного следующему и передать ссылки вложений и действий соответствующим образом, что, похоже, не работает:

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

Например, мы передаем приведенные выше аргументы следующим образом:

$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'}"];

Вышеупомянутое, ни какое-либо из других представлений, которые мы пробовали, похоже, работают. Я надеюсь, что у некоторых других разработчиков Perl есть такая работа, и она может объяснить, как правильно создать переменные attachment и action_links в Perl для публикации в ленте новостей Facebook через WWW :: Facebook :: API.

Заранее спасибо за помощь!

1 Ответ

5 голосов
/ 16 апреля 2010

Я думаю, что проблема в том, что ваша строка JSON может быть неверной. Я смог заставить его работать, просто используя JSON :: Any для сериализации структуры данных Perl, вместо того, чтобы создавать строку JSON вручную. ( WWW :: Facebook :: API использует JSON :: Any под капотом; было бы неплохо, если бы он мог взять структуру данных Perl вместо строки JSON. Я постараюсь представить патч в эти выходные .)

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/' 
      } ] ) 
);

Результат:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...