2010-04-16 24 views
6

Chúng tôi sử dụng Facebook Connect trên trang web của chúng tôi cùng với mô-đun CP WWW::Facebook::API để xuất bản tới nguồn cấp tin tức của người dùng của chúng tôi khi người dùng yêu cầu.Tôi làm cách nào để sử dụng WWW :: Facebook :: API của Perl để xuất bản lên nguồn cấp tin tức của người dùng?

Cho đến nay chúng tôi đã có thể cập nhật thành công trạng của người dùng bằng cách sử dụng đoạn mã sau:

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

Tuy nhiên, khi chúng tôi cố gắng cập nhật các mã trên nên chúng tôi có thể xuất bản câu chuyện newsfeed bao gồm file đính kèm và hành động các liên kết như được chỉ định trong tài liệu API của Facebook cho Stream.Publish, chúng tôi đã thử khoảng 100 cách khác nhau mà không thành công.

Theo CPAN documentation tất cả chúng ta cần phải làm là cập nhật mã của chúng tôi một cái gì đó như sau và vượt qua các file đính kèm & liên kết hành động một cách thích hợp mà dường như không làm việc:

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

Ví dụ, chúng tôi đang chuyển các đối số trên như sau:

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

Ở trên, cũng như bất kỳ đại diện nào khác mà chúng tôi đã thử có vẻ hoạt động. Tôi hy vọng một số nhà phát triển perl khác đã làm việc này và có thể giải thích cách tạo tệp đính kèm và action_links một cách thích hợp trong Perl để đăng lên nguồn cấp tin tức Facebook thông qua WWW :: Facebook :: API.

Cảm ơn trước sự giúp đỡ của bạn!

+0

Bạn đã thử liên hệ với nhà phát triển/người duy trì mô-đun này chưa? – Ether

+0

Tôi đã làm và anh ta thực sự cung cấp mã gần giống với những gì @friedo cung cấp dưới đây. Sau nhiều giờ bực mình, có vẻ như giờ nó đang hoạt động. –

Trả lời

5

Tôi nghĩ rằng vấn đề là chuỗi JSON của bạn có thể không hợp lệ. Tôi đã có thể làm cho nó hoạt động bằng cách chỉ sử dụng JSON::Any để tuần tự hóa cấu trúc dữ liệu Perl thay vì xây dựng chuỗi JSON theo cách thủ công. (WWW::Facebook::API sử dụng JSON :: Bất kỳ dưới mui xe, nó sẽ được tốt đẹp nếu nó có thể mất một cấu trúc dữ liệu Perl thay vì một chuỗi JSON tôi sẽ cố gắng để gửi một bản vá vào cuối tuần này..)

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

Kết quả:

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

+0

@friedo - Làm việc như một sự quyến rũ. Tôi đồng ý sẽ tốt hơn nếu mô-đun linh hoạt hơn một chút và/hoặc tài liệu hướng dẫn rõ ràng hơn một cách chính xác về cách thức mọi thứ cần được thông qua. Cảm ơn một lần nữa! –

Các vấn đề liên quan