2

Önceden bir listeyle karşılaştırmak için TÜM kullanıcı Sayfası beğenilerini alması gereken basit bir Facebook uygulaması üzerinde çalışıyorum. Sayfa kimliğinin eşleşen bir tanımlayıcı olarak oluşturulmuş listesi.Facebook SDK (5.0) - Grafik API Talebi - Sayfalandırma (TÜM sonuçları nasıl alırsınız)

Beğendiklerimin bir listesini alabilirim; Ancak, yanıtta yalnızca sayfa başına "100" beğeni alabiliyorum. Bu kişilerin bazıları binlerce beğeni var, bu yüzden tüm sayfalardan tüm verileri toplayabildiğimden emin olmalıyım.

Basit bir $ fb-> sonraki ($ response); bana bir sonraki sayfa olacak (100 yerine 100 tane alabilirim, 200 alabilirim) .. ama, bir döngüye attığım zaman, scriptim sonsuz bir döngüde sıkışıp kalıyormuş gibi görünüyor. her zaman "sonraki" sayfa olacak Hiçbir sonuç mevcut olmasa bile.

Bu sonuçlardan kolayca geçiş yapmanın yerleşik bir yolu var mı, yoksa öğeler yinelenip vermediği için her yinelemede istek düzeyinde veri yapısını kontrol etmek zorunda mıyım?

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

TEPKİ YORUM VIA AŞAĞIDA GÜNCELLEME:

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

    } 

cevap

3

Bu hep kullandım budur. Döngüyü her zaman kullanabilirsiniz, $ likes değişkenini $ data parametresine dönüştürerek ve işlev boyunca diğer GraphEdge çağrılarını ileterek bir işlevdir.

$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

mı? Bunu hayata geçirdim, ama görünüşe göre benim uygulamadan farklı değil. Birden fazla sayfa varsa, sonsuz bir döngü içinde sıkışır. Görünüşe göre, fb-> sonraki ($ data), birden fazla sayfa olduğu sürece her zaman "bir sonraki" var. –

+0

Yaptığınız işi yapın ve bu 2 satırı kullanmak için beğenme kodunuzu değiştirin. – Juakali92

+0

düzenlemeleri için cevabınıza bakın, – Juakali92

0

Veya kolay yolu: En $ veri nesnesinin ne tür

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

pp->next($response)); 
İlgili konular