【问题标题】:Facebook Graph API Slow for Larger Data CallsFacebook Graph API 对较大数据调用的速度较慢
【发布时间】:2013-01-07 03:43:04
【问题描述】:

这就是我在 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 的限制所困?

【问题讨论】:

    标签: php facebook facebook-graph-api


    【解决方案1】:

    您可以批处理您的请求,这样您只需为批处理请求设置一次 curl,而不是查看大量 curl 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>';
    

    【讨论】:

      【解决方案2】:

      您可以根据文档使用CURLOPT_ENCODING

      “Accept-Encoding:”标头的内容。这使解码 的回应。支持的编码是“identity”、“deflate”和 “压缩包”。如果设置了一个空字符串“”,则一个包含所有 发送支持的编码类型。

      这样 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);
      

      【讨论】:

      • 这似乎没有帮助。 FB 使用什么压缩方式?
      • @350_Design 它可能会因浏览器发送的 HTTP Accept-Encoding 标头或在本例中为 cURL 而有所不同。如果您运行 ONLY 上面的代码本身限制为 300 是不是很慢?如果不是,那么很可能是您用于处理响应的 PHP 代码成为瓶颈。
      • 是的,我运行它,它很慢。如果我输出 url 变量并将其粘贴到浏览器中,它会很慢。通常为 5 到 10 秒。
      • @350_Design,您到底想搜索什么?您或许可以简化请求以缩小响应范围。
      • 是的,有:developers.facebook.com/docs/reference/api/selecting-results 你应该在 Graph API Explorer 中尝试一下,在那里一起点击很容易:developers.facebook.com/tools/explorer
      猜你喜欢
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2010-12-08
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多