2

我正在研究一個簡單的Facebook應用程序,它需要獲取用戶的所有頁面以便將它們與預先列出的列表進行比較作爲匹配標識符的頁面標識列表。Facebook SDK(5.0) - 圖形API請求 - 分頁(如何獲得所有結果)

我可以得到喜歡的列表;然而,我只能在響應中獲得100個「每頁」的喜歡。其中一些人擁有數以千計的喜歡,所以我需要確保我可以收集所有頁面的所有數據。

一個簡單的$ fb-> next($ response);會讓我下一頁(所以,而不是100喜歡,我可以得到200)..但是,當我把它扔進一個循環我的腳本卡在一個無限循環,因爲看起來總是是一個「下一頁」頁儘管目前沒有結果。

是否有任何內置的方式來輕鬆地循環這些結果,或者我將不得不檢查每個迭代的請求級數據結構以確定項是否返回了數據?

//this results in an infinite loop 

$request = $fb->request('GET', '/'.$fid['id'].'/likes?limit=9999'); 

do { 
    $graphNode = $fb->getClient()->sendRequest($request); 
    $paging = $graphNode->getGraphEdge(); 
    $graphEdge = $graphNode->getGraphEdge()->asArray();  
    $likes = array_merge($likes, $graphEdge); 
} while ($fb->next($paging)); // ERROR IS HERE!! SET while($paging = $fb->next($paging)); INSTEAD 

低於修訂VIA迴應評論:

 $request = $fb->request('GET', '/'.$fid['id'].'/likes?limit=9999'); 
    $graphNode = $fb->getClient()->sendRequest($request); 
    $graphEdge = $graphNode->getGraphEdge(); 

    if ($fb->next($graphEdge)) { 

     $likesArray = $graphEdge->asArray(); 
     $lc = count($likesArray); 
     $totalLikes = array_merge($totalLikes, $likesArray); 

     while ($graphEdge = $fb->next($graphEdge)) { 

      $likesArray = $graphEdge->asArray(); 
      $lic = count($likesArray); 
      $totalLikes = array_merge($totalLikes, $likesArray); 

     } 

    } else { 

     $likesArray = $graphEdge->asArray(); 
     $totalLikes = array_merge($totalLikes, $likesArray); 

    } 

回答

3

這就是我一直使用。你總是可以使用循環是一個函數,將$ likes變量改爲$ data參數,並通過函數傳遞給其他GraphEdge調用。

$getPages = $this->fb->get('/me/likes?limit=100'); 
$likes = $getPages->getGraphEdge(); 

$totalLikes = array(); 

     if ($this->fb->next($likes)) { 
      $likesArray = $likes->asArray(); 
      $totalLikes = array_merge($totalLikes, $likesArray); 
      while ($likes = $this->fb->next($likes)) { 
       $likesArray = $likes->asArray(); 
       $totalLikes = array_merge($totalLikes, $likesArray); 
      } 
     } else { 
      $likesArray = $likes->asArray(); 
      $totalLikes = array_merge($totalLikes, $likesArray); 
     } 

     return $totalLikes; 
+0

什麼類型的對象是你的$的數據?我實現了這一點,但它看起來和我的實現沒有什麼不同。如果有多個頁面,它會陷入無限循環。看起來$ fb-> next($ data)總是有一個「next」,只要有多個頁面。 –

+0

拿出你的while while循環,並改變你的喜歡代碼使用這兩行。看看編輯 – Juakali92

+0

的答案用你試過的代碼更新你的問題 – Juakali92

0

或者簡單的方法:

do { 
    foreach ($response->asArray() as $item){ 
     //do something with it 
    } 
} while($response = $facebookA 

pp->next($response)); 
相關問題