【特定のURL(記事)の、Facebookの「いいね!」「シェア」「コメント」数を取得する】graph apiじゃなくてFQLで取得する

このブログのある箇所では、記事一つ一つに対して、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については詳しく説明されています。全て読むと、より理解が深まるんじゃないかと思います。

前置きもできましたので、早速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の「いいね!」ボタンのカウント方法って、純粋に「いいね!」の数だけを表示しているわけじゃあないんですよね。

著者:bouya Imamura