Мы используем Подключение Facebook на нашем сайте в сочетании с 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 для Потока. Опубликуйте, мы попробовали приблизительно 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'}"];
Вышеупомянутое, ни любое из других представлений, которые мы попробовали, кажется, работают. Я надеюсь, что некоторый другой разработчик жемчуга там имеет эту работу и может объяснить, как создать вложение и action_links переменные соответственно в Perl для регистрации на ленту новостей Facebook через WWW:: Facebook:: API.
Заранее спасибо за Вашу справку!
Я думаю, проблема в том, что ваша строка 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/'
} ] )
);
Результат: