Facebookのフィードを取得する
よりユーザーライクにて言う意味ではFacebookやTwitterと言ったソーシャルの更新をサイトに埋め込んで表示させたい。ってな事が多いかと。
特にFacebookや本人や団体が明示化されているので信頼度も高く、リピーターとのコミュニケーションにもなりやすい。
ってな訳で、サイトにフェイスブックのフィードを表示させてたいと言うオーダーが来たので忘備録。
Facebook Graph APIを利用する
Facebookから提供されているAPIのGraphAPIにてフィードをcurlを利用して取得する。
記事をアップした2017年7月10日時点でのバージョンは2.9、今後も倍ばりとバージョンアップされ仕様が変わっていくのであくまでも2.9のバージョンで動きました。ってレベルのメモ。
1. Facebookにログインしアプリケーションを登録する
https://developers.facebook.com/apps/ にて新しいアプリを追加 をクリックする。必要情報を入力し、ダッシュボードに移動。
ダッシュボードに表示されている
・アプリID
・app secret
上記2項をメモ帳などに保存しておく。
2. 作成したアプリの動作チェックを行う
ダッシュボード上部のメニューにある[ツール&サポート]をクリックする。
遷移したページメニューの[グラフAPIエクスプローラ]をクリック
グラフAPIエクスプローラのアクセストークフィールドの横のボタンから「ユーザーアクセストークンを取得」をクリックし
作成したアプリケーションで取得したいデータを選択。今回の場合はフィードを取得するので[user_posts]を選択しアクセストークンを取得をクリック。
この時取得したアクセストークンをリクエストの際に使うのでメモ保存しておく。
リクエストクエリの作成
フィードを取得するクエリを作成する。
$url = "https://graph.facebook.com/v2.9/me?fields=feed&access_token={上記で取得したトークン}";
このURLをcurlにて取得する
$ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => $url, CURLOPT_SSL_VERIFYPEER =>false, CURLOPT_RETURNTRANSFER =>true, ) ); $res = curl_exec($ch); curl_close($ch); $arrFeed = json_decode($res, TRUE);
curlにクエリを渡し取得したデータから表示するデータを形成する。
上記のクエリのままだとデフォルト値なので取得するデータは25件あるのでデータとして重い可能性がある。
例として5件のみに絞りたい場合は以下
$url = "https://graph.facebook.com/v2.9/me?fields=feed.limit(5)&access_token={上記で取得したトークン}";
feedに.limit(件数)を記述する事で取得件数を明示的に指定する事が可能。
問題点
開発途上のAPIのため高い頻度で取得するクエリの記述形式が変わる。
いままで取得出来たフィードが突然取得できなくなる事があるので「安定運用」と言う言葉が使えない。
また、レスポンス速度もお世辞にも良いとは言えずデータを取得するまでにややラグを感じる。
サイト速度を重視している場合、かなりの確率で論外と言われてしまう。
「どうにかならないの?」と言うオーダーを貰って、リアルタイムではなく1日数回フィードを取得して
データベースに書き込んでDBから取得すると言うやり方をしたが、まったくもってリアルタイム性が無くてシステム屋としてはう~む。。と。