[facebook]Graph API v2.2 を使っていいね数とコメント数を取得してみる
10/30に Graph API v2.2が公開されました。
Graph API v2.2を使って、いいね数とコメント数を取得したかったので調べてみました。
ついでにコメント情報も取得できるか試してみました。
早速、 Graph API Explorerにアクセス。
今回、検証用にgraphapi2.2_testというFacebookAPIを作成して試してみました。
1. いいね数、コメント数の取得
「API Version」の項目を見てみると「Unversioned」があったのでまずはこちらから試してみます。
試しに「http://facebook.com」のいいね数やコメント数を取得してみます。
入力欄に「http://facebook.com」もしくは「?id=http://facebook.com」と入力すると
{
"id": "http://facebook.com",
"shares": 15007362,
"comments": 1333
}
というようにfacebookのシェア数とコメント数が返って来ます。
次に「API Version」の項目を「v2.2」に切り替えて試してみます。
すると
{
"error": {
"message": "An access token is required to request this resource.",
"type": "OAuthException",
"code": 104
}
}
とアクセストークンが必要とのエラーになってしまいます。
URLに紐づくいいね数やコメント数はユーザの情報と直接紐付いていないので「Get App Token」をクリックしてアプリ用のアクセストークンを取得して再度試してみます。
すると以下のような結果が返って来ました。
{
"og_object": {
"id": "10151063484068358",
"type": "website",
"updated_time": "2014-11-12T15:06:14+0000"
},
"share": {
"comment_count": 5008,
"share_count": 20697492
},
"id": "http://facebook.com"
}
データ構造が新しくなっているようです。
そして、comment_countとshare_countの数が「Unversioned」の時に比べて増えていますね。
これだとどちらの数が正しいのか分からないので、 いいねボタン作成ページ で「http://facebook.com」のいいねボタンを作成してみたところ、
15,011,162人が「いいね!」と言っています。
と表示されたので、「Unversioned」のほうが正しい数を表しているようでした。
(Unversionedといいねボタンの結果のいいね数に差があるのは、この短時間に変化があったから?)
2. コメントの取得
ついでなのでコメントの情報も取得できるか試してみます。
「Unversioned」の場合、「comments/?id=http://facebook.com」と入力すると、アクセストークンなしでもコメント情報が取得できます。
「v2.2」の場合、いいね数と同じくアクセストークンがないとエラーになります。
こちらもアプリ用のアクセストークンを取得して再度試してみると、
{
"data": [
]
}
となり、うまくコメント情報が取得できません。
GraphAPIのcommentsの仕様を見てみると、「/{object-id}/comments」にすればコメント情報が取得できそうです。
まとめ
「Unversioned」のGraphAPIを使用する場合
アクセストークンは不要
「https://graph.facebook.com/comments?id={url}」でコメント情報を取得することが可能
2015/4/30以降も「Unversioned」が問題なく使用できるかは不明(Facebookはセキュリティ強化に力を入れているので使えなくなる可能性は高い) => 2015/5/17現在も有効なようです(追記参照)
「v2.2」のGraphAPIを使用する場合
アクセストークンが必要(Facebookアプリトークンでも可)
「https://graph.facebook.com/v2.2/{url}?access\_token={token}」でいいね数、コメント数を取得することが可能
いいね数、コメント数は、likeボタンに表示される値と差があった => 修正済み(2014/11/19追記参照)
コメント情報を取得する場合は、該当URLのobject-idを取得してから「https://graph.facebook.com/v2.2/{object-id}/comments/?access\_token={token}」の2段階でアクセスする必要がある
「v2.2」を使うのが正しいと思うのですが、likeボタンに表示されるいいね数の数に一致しないのが謎です。
=> API修正していただきました!(2014/11/19追記参照)facebookは最近色々仕様変更が多いのでアップデートが大変ですね。。。
2014/11/14 追記
上記のいいね数、コメント数の不一致に関して、facebookにバグレポートを送ってみたところFacebookTeamの方にチェックしていただけることになりました。
https://developers.facebook.com/bugs/640941529356484
慣れない英文を書くのに戸惑いましたが、とりあえず伝わったみたいでよかったです。
英語力鍛えないとなと改めて感じました。
その後、進展あり次第追記します。
2014/11/19 追記
その後、FacebookTeamの方から連絡があり、API修正してもらえました。
フォーラムにサンプルを載せてもらっていますが、 「?id=http://www.facebook.com&fields=og\_object{engagement}」で実行すれば、正しいいいね数が取得できるようになりました。
コメント数も併せて取得したい場合は「?id=http://www.facebook.com&fields=og\_object{engagement},share」として実行すれば以下のような結果が得られます。
{
"og_object": {
"engagement": {
"count": 15274662,
"social_sentence": "15,274,662 people like this."
},
"id": "10151063484068358"
},
"share": {
"comment_count": 5009,
"share_count": 21068092
},
"id": "http://www.facebook.com"
}
バグレポートから数日で対応していただけて助かりました。
公式ドキュメントの方にも近日中に反映していただけるそうです。
Thanks Mr.Ibrahim !
2015/5/17 追記
5/15に バグレポートのほうで返信いただき、 ドキュメント(Graph API URL Object)にも反映されました。
v2.3で
?id=http://facebook.com&fields=og_object{engagement},share
を確認してみると、
{
"og_object": {
"engagement": {
"count": 31911662,
"social_sentence": "31,911,662 people like this."
},
"id": "10151063484068358"
},
"share": {
"comment_count": 5056,
"share_count": 31911662
},
"id": "http://facebook.com"
}
となっており、share{share_count}とengagement{count}が一致するように修正されていました。
今後はshareを使うので問題なさそうです。
また、「Unversioned」のGraphAPIも確認してみたところ、2015/5/17現在もAPIは有効なようでした。
https://graph.facebook.com/http://facebook.com
{
id: "http://facebook.com",
shares: 31912262,
comments: 1377
}
Facebook Platform Versioningによると
バージョン指定のない呼び出しは、デフォルトで、一番古い利用可能なバージョンのAPIが呼び出されます。
とあるので、現在はバージョン2.0が一番古い利用可能なAPIのはずなのですが現在も使えているのは不思議です。
ためしにv2.0のAPIにアクセスしてみるとアクセストークンを求められたので、こちらのAPIは内部的にまだv1.0を使っているような気がします。
https://graph.facebook.com/v2.0/http://facebook.com
{
error: {
message: "An access token is required to request this resource.",
type: "OAuthException",
code: 104
}
}
こちらに関してはいつまで使えるかは不明なので、アクセストークンを付与する形で対応しておくほうがよいかと思われます。