2011-05-13 75 views
3

我正在試圖製作一個應用程序,使用facebook php sdk獲取所有的生日和其他信息,從你的facebook朋友。facebook api很慢

我得到的好友列表,並用foreach循環,得到所有的每一朋友的ID的信息。

這一切工作,只需要4分鐘+獲得所有的信息。 (每一個朋友,我不得不作出一個新的呼叫)

我不能期望我的應用程序的用戶等那麼久。

有沒有辦法讓信息更快。

這是我的代碼:


    //$arrFriends is a list with all id's and names of friends 

foreach ($arrFriends as $f => $value) 
      { 
       echo('
'); 
       $fql = "select uid, email, name, hometown_location, sex, birthday, education, relationship_status, pic_square from user where uid=" . $value[id]; 
       $param = array('method' => 'fql.query','query' => $fql,'callback' => ''); 
       $friend = $facebook->api($param); 
       //dan opslaan in de database: 
       print_r($friend); 
       echo('
'); }

回答

5

您可以使用

SELECT uid, name, pic_square FROM user WHERE uid = me() 
OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 

參考:https://developers.facebook.com/docs/reference/fql/

同樣的結果,快,快,優雅的解決方案。願你的表演與你同在。


另一種解決方案(將你的想法)

如果你有上百個朋友,嗯,這是非常正常的和預期。您正在循環中請求Facebook API。

許多可擴展的Facebook應用程序異步勝任這項工作的背景(在任務隊列),或在不同的機器也許就完全不放慢腳步,消耗CPU陣陣。

嘗試在FQL查詢使用OR conjuctives。

$fql = "select [...] from user where uid=123213312 OR uid=129038823 OR uid=893423890 

但在這種情況下,您的FQL查詢變得越來越大,因此您必須將其分開。因此使用第一個解

+0

urgh,子查詢。 FQL支持是否加入? – Phil 2011-05-13 08:08:51

+0

地獄是啊。 <3 Facebook工程團隊。 – 2011-05-13 08:10:09

+0

在後臺執行它的問題是api標記。如果用戶不再登錄,則無法獲取請求額外權限的信息。 Thx爲您的答案! – samuhe 2011-05-13 09:40:42

1

每個fql查詢都涉及到一個到facebook的http請求,可能會很慢。

如果您可以制定查詢以在單個響應中生成所有結果,然後在一個循環中處理該響應,那麼您可能會獲得更好的性能。

1

如果你不想使用FQL,batch requests設計出於這樣的目的。您構建一系列圖形請求並將它們發送到一起。根據文件,他們是並行處理的。