Пакетный запрос Facebook - PullRequest
       12

Пакетный запрос Facebook

4 голосов
/ 01 ноября 2011

я пытаюсь переписать несколько запросов в один пакетный запрос

$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');

}

Into

$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 Некоторые из запрашиваемых псевдонимов не существуют, а затем перечислитьвсех идентификаторов каналов на стене.Когда я позвоню только одному по простому запросу, я получу его успешно.Может кто-нибудь помочь мне и сказать, где у меня ошибка?

1 Ответ

3 голосов
/ 01 ноября 2011

Генри Попробуйте это с циклом до $ Comments & $ Likes
«Это вернет Комментарии и Нравится из данных поста 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 постов. Более того, кажется, что это ухудшает производительность и часто приводит к ошибкам с тайм-аутом, таким как «псевдоним не существует»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...