hello-world
webエンジニアのメモ。とりあえずやってみる。

[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のシェア数とコメント数が返って来ます。

fb1

次に「API Version」の項目を「v2.2」に切り替えて試してみます。

すると

{
  "error": {
    "message": "An access token is required to request this resource.", 
    "type": "OAuthException", 
    "code": 104
  }
}

とアクセストークンが必要とのエラーになってしまいます。

fb2

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"
}

fb3

データ構造が新しくなっているようです。

そして、comment_countとshare_countの数が「Unversioned」の時に比べて増えていますね。

これだとどちらの数が正しいのか分からないので、 いいねボタン作成ページ で「http://facebook.com」のいいねボタンを作成してみたところ、

15,011,162人が「いいね!」と言っています。

と表示されたので、「Unversioned」のほうが正しい数を表しているようでした。

(Unversionedといいねボタンの結果のいいね数に差があるのは、この短時間に変化があったから?)

fb7

2. コメントの取得

ついでなのでコメントの情報も取得できるか試してみます。

「Unversioned」の場合、「comments/?id=http://facebook.com」と入力すると、アクセストークンなしでもコメント情報が取得できます。

fb4

「v2.2」の場合、いいね数と同じくアクセストークンがないとエラーになります。

fb5

こちらもアプリ用のアクセストークンを取得して再度試してみると、

{
  "data": [
  ]
}

となり、うまくコメント情報が取得できません。

fb6

GraphAPIのcommentsの仕様を見てみると、「/{object-id}/comments」にすればコメント情報が取得できそうです。

いいね数取得の際に「http://facebook.com」のobject-idは「10151063484068358」と書かれていたので、「/10151063484068358/comments」でアクセスしたところ、コメント情報を取得することができました。

fb8

まとめ

「Unversioned」のGraphAPIを使用する場合

「v2.2」のGraphAPIを使用する場合

「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
  }
}

こちらに関してはいつまで使えるかは不明なので、アクセストークンを付与する形で対応しておくほうがよいかと思われます。

参考


Related #Facebook

[facebook]自分がこれまでにいいねしたものを取得するFQL

Graph API Explorer で試せます。

Facebook APIで自分の友達を一括で取得する

FacebookAPIで自分の友達を一括で取得したい場合、FQLとGraphAPIの2つの取得方法があります。

Facebook APIで友達の誕生日を一括で取得する

以前、 Facebook APIで自分の友達を一括で取得する方法を書きましたが、今回は友達の誕生日も取得してみます。

[facebook]Graph API v2.2 を使ってユーザのプロフィール画像を取得してみる

昨日に続き、Graph API v2.2を使ってこんどはプロフィール画像取得が問題なくできるか試してみました。