当用户要求时,我们将Wikit_a CPAN模块与我们网站上的Facebook Connect结合使用,以向用户发布新闻提要。

到目前为止,我们已经能够使用以下代码成功更新用户的状态:

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

但是,当我们尝试更新上面的代码时,我们可以按照Facebook API文档中WWW::Facebook::API的规定发布包含附件和操作链接的新闻提要故事,我们尝试了大约100种不同的方法,但均未成功。

根据Stream.Publish,我们所需要做的就是将我们的代码更新为以下内容,并适本地传递似乎不起作用的附件和操作链接:
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开发人员能够进行这项工作,并且可以解释如何在Perl中适本地创建附件和action_links变量,以通过WWW::Facebook::API将其发布到Facebook新闻提要。

在此先感谢您的帮助!

最佳答案

我认为问题在于您的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

关于perl - 如何使用Perl的WWW::Facebook::API发布到用户的新闻源?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2654965/

10-12 17:27
查看更多