だ。ログ。

開発とかスノボとかやきうとか。

Facebookのフィードを取得する

よりユーザーライクにて言う意味ではFacebookTwitterと言ったソーシャルの更新をサイトに埋め込んで表示させたい。ってな事が多いかと。
特に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から取得すると言うやり方をしたが、まったくもってリアルタイム性が無くてシステム屋としてはう~む。。と。