2011-11-01 79 views
4

我試圖幾個請求改寫成一個批次的請求Facebook的批量要求

$posts = $facebook->api('/me/feed?limit=9999999'); 

for($i = 0; $i < count($posts['data']); $i++) 
{ 

    $comments = $facebook->api($posts['data'][$i]['id'].'/comments'); 
    $likes = $facebook->api($posts['data'][$i]['id'].'/likes'); 

} 

進入

$batch = array(); 

$req = array(
    'method'  => 'GET', 
    "name" => "prispevky", 
    'relative_url' => '/me/feed', 
); 

$batch[] = json_encode($req); 


$req = array(
    'method'  => 'GET', 
    'relative_url' => '{result=prispevky:$.data.*.from.id}/comments' 
); 

$batch[] = json_encode($req); 

$req = array(
    'method'  => 'GET', 
    'relative_url' => '{result=prispevky:$.data.*.id}/likes' 
); 

$batch[] = json_encode($req);   

$params = array(
    'batch' => '[' . implode(',',$batch) . ']' 
); 

try 
{ 
    $info = $facebook->api('/','POST',$params); 
    print_r($info); 
} 
catch(FacebookApiException $e) { 
    error_log($e); 
    $info = null; 
} 

但我收到錯誤404的一些你的要求不存在的別名,然後名單牆上的所有飼料ID。當我通過簡單的請求打電話給我時,我會成功接收它。 有人可以幫助我,告訴我哪裏有錯誤?

回答

3

亨利循環嘗試使用此方法$評論& $喜歡
「這將返回的評論和發佈數據0。除此之外,每個崗位喜歡你必須添加一個新的數組。我看到你是如何想循環數組請求,我從來沒有能夠得到該方法的工作,因爲評論和喜歡存在於一個單獨的表可以這麼說。「

注意:批量只接受最多20個請求,所以請求999999帖子循環仍然只會返回第一組19評論/喜歡,因爲第一個請求是帖子。


$queryProfileFeed = array(
     array('method' => 'GET', 'relative_url' => '/me/feed?fields=id%26'.$app_access_token.'' 'name' => 'getLnC', 'omit_response_on_success' => false),  
     array('method' => 'GET', 'relative_url' => '/{result=getLnC:$.data.0.id}/comments?fields=id%26offset=0'), 
     array('method' => 'GET', 'relative_url' => '/{result=getLnC:$.data.0.id}/likes?fields=id%26offset=0'), 
); 
$batchResponse = $facebook->api('?batch='.json_encode($queryProfileFeed), 'POST'); 
     /* json decode response for comments */ 
    $Comments = json_decode($batchResponse[1]['body'], true); 
     /* json decode response for likes */ 
    $Likes = json_decode($batchResponse[2]['body'], true); 

我用上面的方法,但有很多更多的批量要求,以顯示我的牆在我的插件

但我只請求第2組的意見,並從最初的10個員額喜歡。更重要的是,似乎降低性能,並經常超時引發錯誤,如「別名不exsist」

+1

謝謝您的回覆! 您的代碼有效,與我的代碼非常相似。你有一些改進,我忘了像特定的領域id等等。 因此,我更新我的代碼,只爲場0,而不是所有的人。 'relative_url'=> '/{result=prispevky:$.data.0.id}/comments' 和它的作品。但是,如果我得到所有的ID,然後要求每個ID,我將保存沒有請求時間。 – Jindra

+0

請求不是問題嗎?我的印象是數據丟失,涉及試圖批量超過20個請求?你可以爲其創建一個新的20個20的限制,你正在請求。 編輯:我要與所有的語句來試試這個*,看看它是如何工作的,我從來沒有真正試圖擺脫批次所有評論與* –

+0

我只是基準你的方法了,哇差異顯着「謝謝你,你也解決了我的一個問題:-)「 你是如此正確omg - ** 80個最新的帖子和每個20個評論,從Facebook頁面在3秒以內。** https:// shawnsspace。 COM /插件/ TimeLineFeedBenchMark.php?主題=黑&的pageid = Facebook的 –