3

これは、Facebookの多数のグループ投稿にアクセスするためにPHPで行っていることです。次に、これらの投稿を検索するための検索機能を実装しています。

        $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 に答える