Facebook Graph APIでプロフィール画像のURLを取得する方法

※注意!
本エントリの情報は、執筆当時のFacebook APIの仕様に準じた古い内容が含まれています。以下のエントリに新しい情報が記載されていますので、併せてご確認ください!
「Graph APIでプロフィール画像のURLを取得する方法」が色々変わっていたのでまとめてみる - でぶぬる日記

特定のユーザのFacebook上のユーザ情報を取得したい場合は、以下のようなURLをHTTP GETで叩けば良い。

https://graph.facebook.com/216311481960

{
   "id": "216311481960",
   "name": "Bill Gates",
   "picture": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/187894_216311481960_2373359_s.jpg",
   "link": "http://www.facebook.com/BillGates",
   "likes": 460946,
   "category": "Business person",
   "website": "www.thegatesnotes.com\nwww.gatesfoundation.org",
   "username": "BillGates"
}

ただこの方法の場合、ユーザによっては picture(プロフィール画像のURL)がJSONに含まれないことがある。

確実に特定の情報を含めたい場合は、"fields"パラメータでカンマ区切りで指定すれば良い。

https://graph.facebook.com/216311481960?fields=picture,name

{
   "name": "Bill Gates",
   "id": "216311481960",
   "picture": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/187894_216311481960_2373359_q.jpg"
}

指定していない情報はJSONに一切含まれなくなるので、ちとめんどいのが難点ではある。



ちなみに、FacebookのAPIリファレンスを参考にして考えると、以下のようなURLを試してみたくなるが、

https://graph.facebook.com/216311481960/picture

これだと「画像のURL」ではなくて「画像データ自体」がレスポンスとして返ってきてしまう。

FacebookAPIリファレンスには、

string representing URL of the user's profile picture (use ?type=square | small | normal | large to request a different photo)

のように、「画像のURL文字列を返すよ!」としっかり書いているわけで、どう考えてもトラップ。

HTTPステータスコード302のlocationヘッダの中には確かに画像URLが入ってくる」から、広義では「画像URLを返している」とは言えるのかもしれないけど、なんだかイマイチ。