2012-03-06 17 views
7

Tak więc pracowałem z tym skryptem, aby przeglądać zdarzenia z danej strony. Nagle okazało się, że to już nie działa :(Wykres Facebook Pętla API poprzez stronicowanie

Mam przeczucie, że może to być błąd, ponieważ jeśli wybierzesz dowolną stronę, zobaczysz zdarzenia z atrybutem access_token, nie otrzymasz żadnych danych z powrotem do "następnego "paginowane URL. np spróbować https://graph.facebook.com/evenightclub/events w apigee.com

Jakieś pomysły?

($ FID jest id strona obiektu)

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

Odpowiedz

6

Twój kod działa dla mnie, jedyną rzeczą, którą zrobiłem jest upewnienie się, że to się liczy ($ data ["data"])> 0 przed połączeniem z ex istniejące informacje. Wygląda więc tak:

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

Po prostu szukałem tego samego problemu. Natknąłem się na to i pomyślałem "Wow, to jest dokładnie to, o co idę". Przewiń trochę i spójrz na OP, "hmm, myślę, że widziałem ten kod wcześniej", patrzy na nazwę użytkownika, "huh". Twoja odpowiedź działa perfekcyjnie, przepraszam za nie oznaczanie jej rok temu :) –

+1

nie musisz ustawiać przesunięcia w ten sposób: $ offset + = count ($ data ["data"]), na wypadek gdyby liczba Rzeczywiste zwrócone produkty mają mniej niż limit $? w tym przypadku nie sądzę, że FB zwraca 5 000 przedmiotów przy każdym połączeniu. – rbp

Powiązane problemy