2013-01-07 23 views
3

這就是我在PHP中所做的,以便訪問Facebook上的一組羣發帖子。然後我執行搜索功能來搜索這些帖子。Facebook Graph API緩慢進行大數據調用

 $url2 = 'https://graph.facebook.com/'. $group_id . '/feed' . '?limit=30&access_token=' . $_SESSION['access_token'] ; 

     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "$url2"); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     $json = curl_exec($ch); 
     $data = json_decode($json, TRUE); 

因此,我將其分解並發現將圖形url放到瀏覽器中會產生緩慢的響應。限制設置爲30即可,但最高可達300,並且速度較慢,最高可達到1000,並且會爬行。

我已經看過分頁,但我想抓取大量的數據,所以我可以搜索它。緩存實際上不起作用,因爲加載該初始數據仍需要很長時間。

無論如何加快這一點,還是我堅持在Facebook圖形API的限制?

回答

7

你可以批量您的要求,讓你只對成批請求設置的捲曲一次,而不是通過大量的捲髮http://developers.facebook.com/blog/post/2011/03/17/batch-requests-in-graph-api/

$app_id = "YOUR_APP_ID"; 
    $app_secret = "YOUR_APP_SECRET"; 
    $my_url = "YOUR_URL"; 

    $code = $_REQUEST["code"]; 

    if(empty($code)) { 
     $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url); 

     echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
    } 

    $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code; 

    $access_token = file_get_contents($token_url); 
    $batched_request = '[{"method":"GET","relative_url":"me"},' . '{"method":"GET","relative_url":"me/friends?limit=50"}]'; 

    $post_url = "https://graph.facebook.com/" . "?batch=" . $batched_request . "&access_token=" . $access_token . "&method=post"; 
    echo $post_url; 

    $post = file_get_contents($post_url); 
    echo '<p>Response: <pre>' . $post . '</pre></p>'; 
1

您可以使用CURLOPT_ENCODING每個文檔:

中的內容 「的Accept-Encoding:」 標頭。這使得解碼 的響應。支持的編碼是「身份」,「放氣」和 「gzip」。如果設置了空字符串「」,則會發送包含所有支持的編碼類型的標題。

這樣捲曲會告訴Facebook的,「嘿,我明白的壓縮數據,請向我發送的壓縮數據」

$url2 = 'https://graph.facebook.com/'. $group_id . '/feed' . '?limit=30&access_token=' . $_SESSION['access_token'] ; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url2); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_ENCODING, ''); // enable compression, keep empty to send all supported types 
$json = curl_exec($ch); 
$data = json_decode($json, TRUE); 
+0

這似乎並沒有幫助尋找。 FB使用什麼壓縮? –

+0

@ 350_Design它可以根據瀏覽器發送的HTTP Accept-Encoding頭來改變,或者在這種情況下是cURL。如果你只運行** **上面的代碼本身被限制爲300是慢的嗎?如果不是,那麼它很可能就是您用來處理響應瓶頸的PHP代碼。 –

+0

無論如何,我運行它,它很慢。如果我輸出url變量並粘貼到瀏覽器中,它很慢。通常5到10秒。 –