[PHP] Batch Requestsを使って一度に複数のFaceBookのAPIをリクエストする方法


こんにちは、fujinyoです。
Webサービスを作る上で、どこのAPIも使いません!というサービスは少なくなって来ました。

FaceBookやTwitterのIDでログインする機能はほとんどのWebサービスに備わっています。
APIはとても便利なものですが、どうしても気になるのが処理時間です。

1回、2回ぐらいのリクエストだと気になりませんが何十回とリクエストするとかなり重くなります。
レンタルサーバーによっては、処理時間が厳しく決まっていたりしますし
そもそも、「表示が重いサイト」というイメージがつくとユーザーは離れてしまいます。

Batch Requestsとは?

そんな時に、BatchRequestsが活躍してくれます。

Batch Requests
複数のGraph API問い合わせを実行する際に、問い合わせを1度にまとめることができるという利点があります。1度にまとめられる問い合わせは50個が限度で、それ以上の場合は、50個ずつ複数に分ける必要があります。

Batch Requestsを使う

では、サンプルコードを紹介します。
今回は複数のユーザーの投稿を一度に取得する処理です。

//取得する対象ユーザーごとに配列にまとめる
$requestArray[] = array('method'=>'GET','relative_url' => urlencode('/1111111111/feed?limit=10&access_token=AAAAAAAAAA'));
$requestArray[] = array('method'=>'GET','relative_url' => urlencode('/2222222222/feed?limit=10&access_token=BBBBBBBBBB'));
$requestArray[] = array('method'=>'GET','relative_url' => urlencode('/3333333333/feed?limit=10&access_token=CCCCCCCCCC'));
$requestArray[] = array('method'=>'GET','relative_url' => urlencode('/4444444444/feed?limit=10&access_token=DDDDDDDDDD'));
$requestArray[] = array('method'=>'GET','relative_url' => urlencode('/5555555555/feed?limit=10&access_token=EEEEEEEEEE'));

//BatchRequests実行
$response = $facebook->api('/?batch=' . json_encode($requestArray), 'POST');

これで、5つのAPIを1回のリクエストで実行する事ができました。
うまく使えば、かなりの処理時間短縮になると思います。

注意すべきは、urlencodeする事です。
しない場合は、& でエラーとなります。

参考にした記事

今回の記事は、@turusukeさんのWebDelog内の記事を参考にしました。

Batch Requests使ってFacebookのGraph APIへ一度に沢山のリクエストを行う方法

また、FaceBookグループでの Sさん とのやりとりも記事の参考にしました。

ありがとうございました。

[PR] 「結さん」があなたに代わって開発案件の依頼主を探します

  • 「既存のクライアントにギャラアップは言いにくい」
  • 「営業活動する時間がないし、苦手」
  • 「仕事が途切れたらどうしよう」

ITエンジニアのこんな悩みを「結さん」が解決してくれます
結さんへの無料会員登録後は提案メールを待つだけです!

関連記事