3

这就是我在 PHP 中所做的,以访问 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);
        $json = curl_exec($ch);
        $data = json_decode($json, TRUE);

所以我把它分解了,只是发现将图形 url 放入我的浏览器会产生缓慢的响应。限制设置为 30 是可以的,但是将其设置为 300 并且速度很慢,将其设置为 1,000 并且它会爬行。

我已经研究过分页,但我想获取大量数据以便进行搜索。缓存真的不起作用,因为加载初始数据仍然需要很长时间。

有没有办法加快速度,还是我被 Facebook Graph API 的限制所困扰?

4

2 回答 2

7

您可以批处理您的请求,以便您只为批处理请求设置一次卷曲,而不是查看大量卷曲http://developers.facebook.com/blog/post/2011/03/17/batch-requests-in-图-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>';
于 2013-01-09T21:15:42.823 回答
1

您可以CURLOPT_ENCODING按照文档使用:

“Accept-Encoding:”标头的内容。这使得能够对响应进行解码。支持的编码是“identity”、“deflate”和“gzip”。如果设置了空字符串“”,则会发送包含所有支持的编码类型的标头。

这样 cURL 将告诉 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);
于 2013-01-07T03:54:22.167 回答