PHPによる Facebook Graph APIからの記事データの取得方法について

2019/11/21


Facebook の情報をPHPで取得したい、というときには、Facebook Graph APIを利用すれば自由にデータを取得できます。
取得したデータで、自社サイトの中にfacebookと連携したコンテンツを作ることもできますし、「いいね」数によるランキング表示なども可能です。

他のAPIでも同じことが言えますが、APIでのデータ取得は実はそれほど難しくなく、「アクセストークンの取得」と「アクセス方法」、そして「ルールの理解」さえ出来れば比較的簡単です。

アクセストークンの取得

「アクセストークンの取得」に関しては以下のページが分かりやすく纏められていましたので、こちらを参考に。
https://hirofukami.com/2017/06/30/facebook-page-access-token/

アクセス方法

色んなやり方でアクセスできますが、基本的な考え方は、「GETパラメータを送ってデータを取得する」ということです。返ってくるデータはjson形式になっています。
PHPで一番簡単に行う方法は、「file_get_contents」関数を使うと良いです。

上記の「$facebook_return」にPHPで扱える配列形式で格納されます。
ちなみに、GETパラメータでの取得ということですので、ブラウザからアクセスしてもデータを見ることが出来ます。

ここまででとりあえずアクセスして何らかのデータを取得できる、というところまで来ました。
ここからが本番です。

ルールの理解

「ルールの理解」に関してはドキュメントを頑張って読む、というのが一番正解で結局のところの近道です。
Facebookともなると公式ドキュメントがしっかりしていますので、そちらを確認します。

例えばこんなページ。Facebookページの情報を取得したいときはこれを見て行います。
https://developers.facebook.com/docs/graph-api/reference/page

『でも、英語だし読む気にならない・・・』となりそうですが、実際に見るポイントは少しだけです。

まずは、「例」を見ましょう!
API用のURLの後ろに「バージョン情報」をつけて、「ページID」をつければ良いのかな、ということが分かります。
そしてその下にある「フィールド」の部分を見て、取得したい項目名を見つけてくる、という感じです。しかし、Facebookはこのような丁寧な公式ドキュメントだけでなく、便利な機能を提供してくれています。

緑で囲った部分をクリックすると、便利な機能「Graph API Explorer」を使うことが出来ます。
これを使うと、グッとデータの取得の理解が簡単になります。
公式ドキュメントをウェブで動かしてくれているようなものだからです。

とりあえず触ってみましょう。(※facebookにログインしている必要があります)
「GET」の右の入力欄にfacebookページのID(ページ名でも可)を入れてみましょう。
ここでは「brisk.inc」を入れます。株式会社BRISKのFacebookページ(https://www.facebook.com/brisk.inc)です。

そうすると、なんとデータが返ってきます!

上の方で、ブラウザからデータを取得したときと同じものが返ってきました。これが基本のデータ取得、ということです。

でも、もっと他のデータも欲しい、と思う場合はどうすればよいでしょうか。
左側に「フィールドを検索」というものがあるので、その左にある「+」を押せば、返してくれるデータの候補がズラッと表示されます。
適当に選んで「送信」すると、確かにデータが返ってきたことが分かります。

投稿データの取得

おそらく、プログラムでデータを取得したい一番の理由は、facebookでの投稿を取得して連携したい、ということではないでしょうか。
少し気を付けるポイントもありますので、「投稿データの取得」について説明したいと思います。

投稿データは「/{page-id}/posts」で取得できます。

「data」キーの中に各投稿が配列で入っている様子が分かると思います。
これを利用して連携などすることになると思いますが、この1度のアクセスで取得できるデータ件数には当然上限があります。デフォルトでは10件です。
では、その次の10件を取得するにはどうしたらよいでしょうか。

次のページが存在するときには「paging」キーのデータが存在しており、そこに「next」や「previous」のデータが入っています。

この「next」データは、興味深いことに、次のページのデータを取得するための「URL」になっています。ですので、これをクリックすると次のページのデータが取得されます。

PHPで取得するときにも、「next」のデータを「file_get_contents」の引数に指定すればそれだけで次のページのデータが取得できます。

ここで重要な点なのですが、facebook graph APIでは5ページ目のデータのみを取得する、ということは出来ません!
あくまでも「next」データを用いて次のページのデータを取得して、さらにその次へ、というイメージです。
実際にfacebookを使っていれば分かると思いますが、スクロールするとドンドン過去のデータが読み込まれて表示されますが、あくまでもそれは順番にですよね。いきなり5ページ目のデータを見ることが出来ないのと同様、APIでも順番を無視してデータを取得することが出来ません。
これはデータベースの基本設計が、多くのエンジニアが慣れ親しんでいる「Relational DataBase」ではなく「Realtime DataBase」だからです。(調べてみると面白かったので、Realtime DataBaseについてはそのうちブログで纏めたいと思います。)

ともあれ、これでfacebookの投稿データを取得することが出来ました。
アイデア次第でポータルサイトとfacebookとの連携を上手に行うことが出来ると思いますので、公式ドキュメントを調べながら挑戦してみてください。

南本貴之