2011-11-01 82 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的 –