2012-03-06 6 views
7

Итак, я работал с этим скриптом, чтобы перебирать события с данной страницы. Вдруг я нахожу, что это больше не работает :(График API Facebook через пейджинг

У меня такое чувство, что это может быть ошибка, потому что если вы выберете любую страницу, просмотрите события с помощью access_token, вы не сможете получить какие-либо данные для следующего "постраничную URL. например, попробуйте https://graph.facebook.com/evenightclub/events в apigee.com

Любые идеи?

($ шлагтов страница идентификатор объекта)

try { 
    $facebook = new Facebook(array(
     'appId' => '<removed>', 
     'secret' => '<removed>', 
    )); 
    $access_token = $facebook->getAccessToken(); 

    $events_data = array(); 
    $offset = 0; 
    $limit = 5000; 
    $params = array('access_token' => $access_token); 

    //fetch events from Facebook API 
    $data = $facebook->api("$fid/events/?limit=$limit&offset=$offset", $params); 
    $events_data = array_merge($events_data, $data["data"]); 

    //loop through pages to return all results 
    while(in_array("paging", $data) && array_key_exists("next", $data["paging"])) { 
     $offset += $limit; 
     $data = $facebook->api("$fid/events/?limit=$limit&offset=$offset", $params); 
     $events_data = array_merge($events_data, $data["data"]); 
    }} 

ответ

6

Ваш код работает для меня, единственное, что я сделал состоит в том, чтобы убедиться, что count ($ data ["data"])> 0 перед слиянием с ex информация. Так выглядит примерно так:

//loop through pages to return all results 
while(in_array("paging", $data) && array_key_exists("next", $data["paging"])) { 
    $offset += $limit; 
    $data = $facebook->api("$fid/events/?limit=$limit&offset=$offset", $params); 
    // make sure we do not merge with an empty array 
    if (count($data["data"]) > 0){ 
     $events_data = array_merge($events_data, $data["data"]); 
    } else { 
     // if the data entry is empty, we have reached the end, exit the while loop 
     break; 
    } 
}} 
+3

Хех, я просто искал эту же проблему. Наткнулся на это и подумал: «Вау, это именно то, что мне нужно». Прокрутите немного вверх и посмотрите на OP, «хм, я думаю, что видел этот код раньше», смотрит на имя пользователя «huh». Ваш ответ отлично работает, кстати, извинения за то, что он не отмечал его год назад :) –

+1

вам не нужно устанавливать смещение следующим образом: $ offset + = count ($ data ["data"]), если количество фактические возвращенные предметы меньше $ limit? в этом случае я не думаю, что FB возвращает 5 000 пунктов при каждом вызове. – rbp

Смежные вопросы