SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

「Graph API Explorer」チュートリアル風

Facebookの開発者ページで、「Graph API」の動作確認ツールとして提供されている「Graph API Explorer」ですが、動作を理解するのに、ちょっと戸惑ったところがありましたので、「まだ、あまり触ったことが無い」という方をイメージしてチュートリアル風に書いてみました。

1 Graph APIとは

(1) Graph API

GraphAPIは、「Facebookのソーシャルグラフ」からデータを取得するためのAPIですが、最初に、この構造について簡単に整理しておきます。

GraphAPIは、下記のURLにGETリクエストをかけJSON形式でデータを取得するものです。
https://graph.facebook.com/{オブジェクト}/{コネクション}
上記リクエストには、パラメータとして「フィールド」や「パーミッション」などが追加できます。

(2) オブジェクト

オブジェクトとは、人や物の事で、ID(数字)もしくはusernameで指定します。
http://graph.facebook.com/OBJECT_ID
Facebookにおけるオブジェクトの種類は、https://developers.facebook.com/docs/reference/apiの一番下の「Objects」に列挙されています。

(3) コネクション

コネクションとは、オブジェクトとオブジェクトの繋がりで、こちらは名前で指定します。
http://graph.facebook.com/OBJECT_ID/CONNET_TYPE
それぞれのオブジェクトが持つコネクションの種類は、パラメータ「metadata=1」を付けてリクエストすると、connectionsフィールドに列挙されます。
https://developers.facebook.com/OBJECT_ID?metadata=1

(4) パラメータ

パラメータとして、フィールド指定、アクセストークンや、ロケーションなどが指定可能です。
?access_token=XXXXXX <=アクセストークンの指定
?locale=ja_JP <=ロケーションの指定
?fields=id,name,email <=フィールド指定

2 Graph APIエクスプローラの基本操作

(1) ログイン

Facebookにログインしていない状態で「Graph API Explorer」へアクセスすると図のような画面になります。

e001
Google Chromeでアクセスすると、右の結果表示の部分が下にずれて表示されてしまいます。下の方までスクロールして確認してみてください。

右上の「Log In」を押してFacebookにログインすると、リクエスト欄に「{id}?fields=id,name」がセットされ、自分の情報にアクセスした状態になります。また、取得された情報が右に表示されています。

e002
※ここで表示されている{id}は、ログインアカウントのユーザオブジェクトのIDです。

(2) アクセストークンのクリア

指定するアクセストークンによって、取得結果に差が出ます。ここでは、アクセストークンが全く設定されていない状態にする事にします。既に、アクセストークンの所が空欄になっている場合は、以後の操作は必要ありません。

e007
↑アクセストークンが空の状態

e008
↑アクセストークンが設定されている状態

「Graph API Explorer」のアクセストークンは、ログインアカウントに紐着いて記憶されているため、過去に「Graph API Explorer」を操作したことがある方は、既にアクセストークンが設定されている場合があります。
この場合は、「≒アクセストークンを取得」を押して「Select Permission」ダイアログを表示し、「Clear」ボタンですべてのパーミッションを削除してください。すべてのチェックが消えた状態で「キャンセル」ボタンでダイアログを閉じるとアクセストークン欄は空になります。
e003
※「≒アクセストークンを取得」を押しても「Select Permission」ダイアログがポップアップされない場合は、一度「▶送信」ボタンを押してみてください。

(3) フィールド指定

現在、リクエスト欄に「{id}?fields=id,name」と指定されていると思いますが、これは、オブジェクト({id}で指定したユーザ)に対して、そのフィールドである、idとnameを取得するという意味になります。

「ユーザ」というオブジェクトは、他にもフィールドが存在するので、これを追加してリクエストしてみたいと思います。

フィールド指定の所で「email」を追加して下さい。

e004

リクエスト欄に「email」が追加されます。

e005

この状態で「▶送信」ボタンを押しても、取得情報にも「email」が表示されません。また、今、追加した「email」がグレーに表示されます。

e006

これは、emialフィールドにアクセスする権限が無いことを意味しています。

(4) パーミッションの追加

emailフィールを取得するために必要なパーミッションを指定してアクセストークンを取得してみることにします。

「≒アクセストークンを取得」を押して「Select Permission」ダイアログで「user_email」にチェックを入れ、「Get Access Token」ボタンを押します。

e009
※全くチェックがない状態からアクセストークンを指定すると「user_friends」が自動的にチェックされます。これは、Graph API Explorerの仕様だと思います。

Facebookへのアクセス許可を求めるポップアップでOKするとアクセストークンが取得されます。

e010

※emailしかチェックしていないはずなのに、「友達リスト」へのアクセス権も確認されます。これは「user_friends」が自動的にチェックされる(仕様?)ためです。

アクセストークンの欄に文字列が入った状態で、再び「▶送信」ボタンを押すと、今度は、emailフィールドが取得できていることを確認することができます。

e011

(5) コネクション取得

フィールド指定の所で「friends」を追加して「▶送信」ボタンを押すと、友達一覧が取得できます。

e012
※これが表示できるのは、仕様により、既に「user_friends」のパーミッションが指定されている為です。「≒アクセストークンを取得」を開いて「user_friends」にもチェックが入っていることを確認してみてください。

また、リクエスト欄を
https://graph.facebook.com/{オブジェクト}/{コネクション}
の基本的な形に編集して「▶送信」ボタンを押しても、友達一覧は問題なく取得できることを確認できます。

e013

(6) サポート外の操作

友達一覧の中からidをコピーして、リクエスト欄の自分のidの所を差し替えてリクエストしてみると、今度は、「サポート外」の例外が発生します。
ここから、自分以外のfriends取得は未対応であることが分かります。

e014

「Graph API Explorer」でいろいろ試すことで、アクセス可能なフィールドやコネクション、そして必要なパーミッションを確認することができます。