2013-07-01 79 views
0

這個問題對於Perl FaceBook :: Graph API有些特定,並且可能與通常的Facebook Graph無關。我試圖做的是嘗試使用Perl和FaceBook :: Graph模塊發佈照片。模塊文檔(http://metacpan.org/pod/Facebook::Graph)表示在發佈照片後需要「publish_stream」權限,但會生成一個「必須使用活動訪問令牌查詢有關當前用戶的信息」。錯誤,而常規的消息發佈沒有錯誤。在檢查我的訪問令牌調試器,我得到以下信息令牌:使用Perl FaceBook將圖像內容從防火牆後面發佈到FaceBook ::圖

App ID: [removed]: [removed] 
Metadata: [] 
User ID: [removed] : [removed] 
Issued: Unknown 
Expires: 1372705200 (in about an hour) 
Valid: True 
Origin: Web 
Scopes: create_note photo_upload publish_actions publish_stream share_item status_update user_photos video_upload 

不幸的是,CPAN文檔「臉譜::圖::發佈::照片」模塊是有點欠缺,我可以」找到一個完整的Perl示例來發布不引用相同代碼的照片。更完整的示例代碼由我下面:

#note: this is not the complete code I'm using, quite a few non-FB related lines left out for simplicity 

#create the 
my $FBHandle=Facebook::Graph->new(
    app_id => $TargetFBAppID, #passed in as an arg 
    secret => $TargetFBAppSecret, #passed in as an arg 
    postback => $TargetFBAppPostBack #passed in as an arg 
); 

#make sure this is valid when passing it in 
my $AccessTokenResult=$FBHandle->access_token($FBAccessToken); #passed in as an arg, generated by FB's Access Token Debugger 

if(!$AccessTokenResult) { 
    $FaultString="No FB access token returned"; 
} else { 
    #do the image post 
    my $PostHash=$FBHandle->add_photo() 
     ->set_source($TempFileResultHash->{"fullpath"}) #works out to "C:/Tools/apache-tomcat-7.0.22/webapps/service_api/temp/FacebookBroadcast-F38365F5-6D00-1014-9DBD-87D476B3CC17" 
     ->set_message($OptionsHash->{"message"}||"") #passed in from args 
    ; 

    #add_post works, but not add_photo 
    #my $PostHash=$FBHandle->add_post() 
    # ->set_message($OptionsHash->{"message"}||"") #passed in from args 
    #; 

    #send it 
    my $PostResultHash=$PostHash->publish(); #need "publish_stream" priv for this to work 

    die Data::Dumper::Dumper($PostResultHash); #dump the result 
} #end if 

任何人都有一個想法,我可能會出錯?

進一步編輯:如果正確的priv被添加到訪問標記中,FaceBook :: Graph add_note()和add_link()方法也可以正常工作,但add_photo()仍會引發錯誤。

+0

我解決了這個問題。問題是Facebook :: Graph :: Request模塊中的一個錯誤。 –

回答

0

這似乎是Facebook :: Graph :: Response代碼(版本1.0500)中的一個錯誤,其中$ params參數未將所有必需的元素傳遞給子代,從而導致「必須使用活動訪問令牌用於查詢有關當前用戶的信息。「錯誤(因爲令牌從未由子發送)。因爲add_photo是使用post子函數的唯一函數,所有其他函數(add_link,add_note,add_post等)都可以正常工作。

要解決此問題,請編輯Facebook :: Graph :: Request模塊,並在第24行附近找到帖子,並將兩個引用(僅在此子文件中)從「$ params」更改爲「@params」。

從這個...

sub post { 
    my ($self, $uri, $params) = @_; 
    my $cv = AnyEvent->condvar; 
    $self->ua->post_async($uri, $params)->cb(sub { 
     $cv->send(Facebook::Graph::Response->new(response => shift->recv)); 
    }); 
    return $cv; 
} 

要這個......

sub post { 
    my ($self, $uri, @params) = @_; 
    my $cv = AnyEvent->condvar; 
    $self->ua->post_async($uri, @params)->cb(sub { 
     $cv->send(Facebook::Graph::Response->new(response => shift->recv)); 
    }); 
    return $cv; 
} 

完成這些修改後的代碼,你現在應該按預期工作假設你的訪問令牌是有效的功能和類似電話如add_post已經工作。

進一步編輯:此問題似乎在CPAN和ActiveState版本的代碼(v1.0600)中得到糾正。在進行上述代碼編輯之前,請檢查此修復是否適用。