このブログのある箇所では、記事一つ一つに対して、Facebookでの「いいね!」「シェア」「コメント」数を、プレーンテキストで取得しています。それでですが・・・去年の末あたりから(12/27,28あたりかな、厳密にはわかっていません)以降に公開した記事に対しては、「graph api」を使用しても取得できなくなっていました。
具体的には、以下のような現象です。
取得できていた例
以下は、2012/12/17に公開した記事です。
http://graph.facebook.com/https://www.imamura.biz/blog/web/7998
{ "id": "https://www.imamura.biz/blog/web/7998", "shares": 1894 }
記事のURLと、「いいね!」「シェア」「コメント」数がJSON形式で取得できてますね。
取得できない例
変わって以下は、2013/1/3に公開した記事です。
http://graph.facebook.com/https://www.imamura.biz/blog/etc/funny/8379
{ "url": "https://www.imamura.biz/blog/etc/funny/8379", "type": "article", "title": "aaaaa", "image": [ { "url": "https://www.imamura.biz/blog/wp-content/uploads/DSC_1631-730x547.jpg" } ], "description": "bbbbb", "site_name": "ccccc", "admins": [ { "id": "100001155462966", "name": "ddddd", "url": null } ], "updated_time": "2013-01-03T03:41:23+0000", "id": "315460191896746", "application": { "id": "352152184854708", "name": "imamura.biz", "url": "http://www.facebook.com/apps/application.php?id=352152184854708" } }
これは、以前と取得できる値が違いますね。「graph api」で取得できる仕様が変わったのか、単なるバグなのか、いろんなサイトを見て回ったんですけど・・・明確な原因はわからなかったです。
ところで、今までgraph apiで取得していた「いいね!」「シェア」「コメント」数は、FQL(Facebook Query Language)でも取得可能です。なので、この機会にFQLも勉強しよう!
というわけで、やってみました。
FQL(Facebook Query Language)とは
巷では、「RDBの情報を操作するためのSQL言語と似たような扱いができる」などと説明されていることが多いようです。私も、おおよそそういう理解をしています。
なので、例えば今までRDBの操作でSQL文をバシバシ発行しているような方からすれば、FQLの技術的な体得ってめっちゃ簡単だと思います。
参考:以下の記事でFQLについては詳しく説明されています。全て読むと、より理解が深まるんじゃないかと思います。
- Facebook Query Language (FQL) : Facebook開発者向けドキュメントの日本語訳とTips
- Webサービスにおける外部APIの使用(その3) – Facebook Query Language – O’Reilly Japan Community Blog
- Facebookアプリ開発に挑戦(その8・FQLの基本) – The blog of H.Fujimoto
前置きもできましたので、早速FQLを使ってみましょう。
FQLを使う
それでは、FQLを使います。
【FQLを使うには下記URLにアクセスします】
https://api.facebook.com/method/fql.query?
次にパラメーター設定をします。ここでは「どんなクエリ情報を与えるのか」を指定します。
ここで、具体的に何をどこから取得したいのかを書くことになりますね。下の例は、FQLのselect文を使って
「https://www.imamura.biz/blog/web/7998」の「link_stat」から「total_count」を取得します。
【select文にあたる部分】
query=select total_count from link_stat where url="https://www.imamura.biz/blog/web/7998"
さらに詳しいパラメーターについては、FQL(Facebook Query Language)で参考ください。
それでは上記を組み合わせて、具体的に取得してみましょ~。
「いいね!」「シェア」「コメント」数を取得
【下のURLにアクセス(urlはエンコードさせておいたほうがよいです)】
https://api.facebook.com/method/fql.query?query=select%20%20total_count%20from%20link_stat%20where%20url=%22https://www.imamura.biz/blog/web/7998%22
【出力結果】
<fql_query_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" list="true"> <link_stat> <total_count>1894</total_count> </link_stat> </fql_query_response>
XML形式でいいね!数を取得できました。
これをもうちょっと応用します。
「いいね!」「シェア」「コメント」数を別々で取得
次は「いいね!」「シェア」「コメント」数を、個別に取得できるようにFQLを書きます。
【下のURLにアクセス】
https://api.facebook.com/method/fql.query?query=select%20%20like_count%20,comment_count%20,share_count%20from%20link_stat%20where%20url=%22https://www.imamura.biz/blog/web/7998%22
【出力結果】
<fql_query_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" list="true"> <link_stat> <like_count>1322</like_count> <comment_count>224</comment_count> <share_count>348</share_count> </link_stat> </fql_query_response>
ばっちり取得できてますねぇ。というわけで、今まで「graph api」ではこの「いいね!」「コメント」「シェア」数をまとめて取得できていたんですが、FQLを使えば細かく個別に取得できますね。これはいろいろ使えそうだぞ!
ちなみにですが、パラメーターを設定してあげればJSON形式でも取得できます。
JSON形式で取得
パラメータに「format=json」を加えると、JSON形式で取得できます。
【下のURLにアクセス】
https://api.facebook.com/method/fql.query?format=json&query=select%20%20like_count%20,comment_count%20,share_count%20from%20link_stat%20where%20url=%22https://www.imamura.biz/blog/web/7998%22
【出力結果】
[{"like_count":1322,"comment_count":224,"share_count":348}]
・・・という感じです。
例えばこの出力結果をさらに応用して、私のブログのようにWordPressのどこかでプレーンテキストで表示したい、などの要件がある場合でしたら、「wp_remote_get」で取得して「json_decode」で配列にして、あとはお好みのまま出力、ってのが個人的にはお手軽でよいです。
まとめ
Facebookでの反応を取得する手っ取り早い方法として、これまで「graph api」を利用していたんですが、FQLでも同じようなことができる、っていう事を知っておいても損はないな~、と思いました。
また、FQLを使えば、もっと詳細にデータを取得することができる、ってことがわかります。
Facebookの「いいね!」ボタンのカウント方法って、純粋に「いいね!」の数だけを表示しているわけじゃあないんですよね。
このページを共有する