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',
) );