Facebook Platform の API についてのメモ。間違っているところがあるかも。。。
ソーシャルグラフとは
ソーシャルグラフとは、簡単に言うと「人と人とのつながりを表したもの」です。Facebook はこのソーシャルグラフにアクセスするための API を提供してくれています。
Facebook が提供してくれている API のうち、ソーシャルグラフにアクセスするための API として Graph API と FQL(Facebook Query Language)、Legacy APIs を提供しています。
Legacy APIs は古い API 群で、Graph API に移行しろと Document で書かれているので今後は使わないほうがいいと思います。
Graph API
Graph API は、Facebook のソーシャルグラフにアクセスするための API です。Facebook ではソーシャルグラフ上のオブジェクトを次の二つのカテゴリに分けています。
- Objects
- Connections
Graph API は、Objects の Connections をたどって別の Objects を取得するような使い方をします。
Objects
ソーシャルグラフ上のノードにあたるモノを表します。それぞれ属性(プロパティ)をもちます。
- Users
- Pages
- Events
- Groups
- Applications
- Status messages
- Photos
- Photo albums
- Profile pictures
- Videos
- Notes
- Checkins
Connections
Objects を結ぶ関連を表します。いいね!や自分で付けたタグなどがこれに当たります。
- Friends
- News feed
- Profile feed (Wall)
- Likes
- Movies
- Music
- Books
- Notes
- Photo Tags
- Photo Albums
- Video Tags
- Video Uploads
- Events
- Groups
- Checkins
FQL(Facebook Query Language)
FQL はソーシャルグラフを SQL を使って取得できるような API です。FQL でアクセスできるテーブルは Facebook Query Language (FQL) - Facebook.com を参考にしてみてください。
FQL を使うと、Graph API で取得することが難しかった「この人がいいね!している写真を30件取得する」のようなことができます。
あと、Graph API と FQL は全く別のものとして考えたほうが良いと思います。同じ like を取得するにしても、Graph API で取得する like と FQL の like テーブルを検索するのでは、思っていたのと違う情報が取れてきます。
Graph API の方の like は API で like を POST したデータが入っていて、例えば facebook 内で大学に対していいね!した情報等が入っています。逆に、FQL の like テーブルに入っているデータは、どうやら facebook の外のサイトでいいね!した情報のみが入っていて、facebook 内で大学等にいいね!すると、page_fan というテーブルに情報が入るようです。
FQL は複数クエリを同時に発行してバッチのように使うこともできます。
FQL を試す環境
FQL の制約
- ひとつのテーブルにしかアクセスできない
- インデックスが付いたカラムしか検索条件に指定できない(ただし、user_id カラムなど、ログインユーザのID:me() で指定できる場合もある)
- 検索条件でテーブルのプライマリーキーを使う場合、存在しない値を検索するとエラーになる
特に3.はハマりやすいので注意です。次のクエリはエラーになります。
SELECT url FROM link WHERE link_id IN (SELECT object_id FROM like WHERE user_id = me())
link テーブルの link_id は identifier なので、IN で戻ってくる object_id がすべて存在していないといけないのです。結構ハマりやすいので注意!
参考
[Facebook]Facebook アプリ作ろうぜ (その7 Like の取得が面倒な件について、あと FQL について) - コーヒーサーバは香炉である