2012-03-06 13 views
7

Quindi stavo lavorando con questo script per scorrere gli eventi da una determinata pagina. Improvvisamente trovo che non funziona più :(Facebook graph API loop through paging

Ho la sensazione che potrebbe essere un bug, perché se si seleziona una pagina, visualizzare gli eventi con un access_token, non è possibile ottenere tutti i dati per il "prossimo" "URL impaginato. ad esempio provare https://graph.facebook.com/evenightclub/events in apigee.com

Tutte le idee?

($ fid è l'oggetto pagina id)

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"]); 
    }} 

risposta

6

il codice funziona per me, l'unica cosa che ho fatto è quello di assicurarsi che contano ($ dati ["dati"])> 0 prima di fonderlo con l'ex informazioni istanti Quindi sembra:

//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

Heh, stavo solo cercando lo stesso problema. Ci siamo imbattuti in questo e ho pensato "wow, questo è esattamente quello che sto cercando". Scorri un po 'e guarda l'OP, "hmm, penso di aver visto questo codice prima", guarda il nome utente, "huh". La tua risposta funziona perfettamente, scuse per non averlo segnato un anno fa :) –

+1

non devi impostare offset come questo: $ offset + = conteggio ($ dati ["dati"]), nel caso in cui il numero di gli articoli effettivamente restituiti sono inferiori al limite $? in questo caso, non credo che FB restituisca 5.000 articoli per ogni chiamata. – rbp