Facebook.getLoginUrl()を呼び出すことで、認可ページ (OAuth Dialog) のURLを取得できます。
require 'facebook.php'; $config = array( 'appId'=>'YOUR_APP_ID', 'secret'=>'YOUR_APP_SECRET' ); $facebook = new Facebook( $config ); $user = $facebook->getUser(); if( ! $user ) { // Login $loginUrl = $facebook->getLoginUrl(); echo "<a href='{$loginUrl}'>Login</a>"; } else { try { $userProfile = $facebook->api( '/me' ); echo( 'Hello '.$userProfile[ 'name' ] ); } catch( FacebookApiException $e ) { error_log( $e ); } // Logout $logoutUrl = $facebook->getLogoutUrl(); echo "<a href='{$logoutUrl}'>Logout</a>"; }
OAuth Dialogで認可を得たあと、アクセストークンはそれが初めて必要となったときに取得されます。そして取得したアクセストークンは、セッション変数に保存されます。しかし一方でアクセストークンが必要な処理をしない限り、ユーザーの認可を得てもアクセストークンは取得されず、保存もされません。よって認可を得たらアクセストークンを保存するためにも、アクセストークンの取得をすべきです。そのためにはFacebook::getAccessToken()を呼び出します。
権限を取得するには、ログインURLを取得するときに必要な権限を指定します。たとえばread_streamとpublish_streamの権限を取得するには、
$permissions = array( 'scope'=>'read_stream,publish_stream' ); $loginUrl = $facebook->getLoginUrl( $permissions );
とします。
Facebook::api(/* polymorphic */)
api | Facebook Developers
$ret = $facebook->api( $path, $method, $params );
引数 | 説明 |
---|---|
path | リクエストするGraph APIのパス
たとえば認可ユーザーのプロフィールへアクセスするには"/me"とします。 |
method (オプション) |
リクエストのHTTPメソッド 'GET'、'POST'または'DELETE'のいずれか |
params (オプション) |
呼び出すAPIで必要とされるパラメータ
'name' => 'value'のペアとなる連想配列で渡す |
たとえばウォールからメッセージを取得するには、
$ret = $facebook->api( '/me/feed', 'GET' );
とすると、
api()メソッドの戻り値 | Graph APIのレスポンス |
---|---|
Array ( [data] => Array ( [0] => Array ( [id] => 1111_2222 [from] => Array ( [name] => XX YY [id] => 1111 ) [message] => TEST [actions] => Array ( [0] => Array ( [name] => Comment [link] => http://www.facebook.com/1111/posts/2222 ) [1] => Array ( [name] => Like [link] => http://www.facebook.com/1111/posts/2222 ) ) [privacy] => Array ( [description] => Public [value] => EVERYONE ) [type] => status [status_type] => mobile_status_update [created_time] => 2012-01-02T00:00:00+0000 [updated_time] => 2012-01-02T00:00:00+0000 [comments] => Array ( [count] => 0 ) ) [1] => Array ( ... ) ) [paging] => Array ( [previous] => https://graph.facebook.com/1111/feed?limit=25&since=1200000000&__previous=1 [next] => https://graph.facebook.com/1111/feed?limit=25&until=1000000000 ) ) |
{ "data": [ { "id": "1111_2222", "from": { "name": "XX YY", "id": "1111" }, "message": "TEST", "actions": [ { "name": "Comment", "link": "http://www.facebook.com/1111/posts/2222" }, { "name": "Like", "link": "http://www.facebook.com/1111/posts/2222" } ], "privacy": { "description": "Public", "value": "EVERYONE" }, "type": "status", "status_type": "mobile_status_update", "created_time": "2012-01-02T00:00:00+0000", "updated_time": "2012-01-02T00:00:00+0000", "comments": { "count": 0 } }, { ... } ], "paging": { "previous": "https://graph.facebook.com/1111/feed?limit=25&since=1200000000", "next": "https://graph.facebook.com/1111/feed?limit=25&until=1000000000" } } |
のような形式で結果が返されます。api()メソッドは内部でPHPのjson_decode()を使用しているため、結果もそれに従った形式となります。
Field Expansionを利用して複数のAPIを一括して呼び出すには、
$ret = $facebook->api( '/me', 'GET', array( 'fields'=>'home,feed' ) );
のようにします。
$ret = $facebook->api( array( 'method' => 'fql.query', 'query' => 'SELECT . . . ', ));
$ret = $facebook->api( array( 'method' => 'link.getStats', 'urls' => 'facebook.com,developers.facebook.com', ) );