はじめに
Graph APIだとデータを取得する場合、リクエストを投げる必要があるのでデータ量が増えてくるとAPIリミットが気になってきます。そこで「Facebook側で変更があったら変更を通知してくれる」仕組みが欲しくなります。
Facebookではこれを実現するのに、「Receiving API Updates in Real-Time」という仕組みがあります。
Receiving API Updates in Real-Time https://developers.facebook.com/docs/graph-api/real-time-updates/v2.3
今回はFacebookページのデータをリアルタイムに取得するための手順をまとめました。
1. 開発用のFacebookアプリを作成
事前に開発用のFacebookアプリが必要なので作成しておきます。こちらの記事がわかりやすいです。
facebookのアプリIDの作り方 | アメブロカスタマイズ 初心者にもできるアメブロカスタマイズ! http://simpleworks.jp/blog/facebook/7373
2. Facebookページに1で作成したアプリをリアルタイムアップデート用に追加
次に対象のFacebookページにリアルタイムアップデートを取得するアプリを追加する必要があります。
- 追加するエンドポイントは以前は
{page_id}/tabs
でしたが、version2.2以上では{page_id}/subscribed_apps
です。 -
{page_id}/subscribed_apps
にPOSTすると追加されます。 - 結果を確認する時は
{page_id}/subscribed_apps
にGETリクエストするとリアルタイムアップデートを取得しているアプリの一覧が以下のように表示されます。(リアルタイムアップデートを利用している他アプリも表示される場合があります)
- 登録するには
publish_pages
パーミッションを取得した対象のFacebookページのページアクセストークンが必要なので、別途ユーザーがログインしたらページアクセストークンを取得する実装が必要になります。
3. 受信用のコールバックURLを用意
次にFacebookからの更新を受け取るコールバックURLを用意します
- Facebookからアクセスできる必要があるので、もちろんローカル環境のURLは不可
- 今回は
https://test.developer.jp/realtimeupdate/
という架空のURLを設定するものとする。
4. リアルタイムアップデートで取得するデータ(Subscribe)を設定
次に実際にリアルタイムアップデートで取得するデータ(Subscribe)の内容を設定します
- この設定には1で作成したアプリのIDとアプリのトークンが必要
- アプリのトークンはFacebookが提供している以下のサイトで調べます
Access Token Tool
https://developers.facebook.com/tools/accesstoken/
{アプリID}/subscriptions
- 上記のエンドポイントへ以下のパラメータを指定してPOSTする
object: page
callback_url: https://test.developer.jp/realtimeupdate/
fields: feed
verify_token: 任意の文字列
- 今回はページのfeed(タイムラインの投稿)のみを取得対象にしたが、他にもユーザーのデータを取得することも可能
- 詳しくは公式サイトに記載されているので興味ある方はぜひ
Receiving API Updates in Real-Time https://developers.facebook.com/docs/graph-api/real-time-updates/v2.3
5. Subscribeを認証する
- 4でSubscribeを追加・変更した場合、指定したコールバックにFacebookから以下の認証用の文字列がGETリクエストで届く
hub.mode -> 'subscribe'
hub.challenge -> ランダム文字列
hub.verify_token -> 4の手順時に自分で設定したトークン値
- 認証のため、以下の処理を行う
- hub.verify_tokenが自分が設定したトークンと等しいか
- 等しい場合、hub.challengeの値をそのままレスポンスとして返す
例: PHPの場合
if ($_GET['verify_token'] == 設定したトークン) {
echo $_GET['hub_challenge'];
return
}
これでFacebook側に受信サーバーが認証され以降アップデートを受信できる。ちなみにアップデートはPOSTで送信されてくるのでPOSTリクエストを受信できるようにしておく必要はあり。
逆にSubscribeを解除する場合は、{アプリID}/subscriptions
へDELETEリクエストすればOK