Facebook SDK for PHP (PHP SDK)

ダウンロード

facebook/php-sdk · GitHub

認可 (Authorization )

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()を呼び出します。

権限 (Permissions)

権限を取得するには、ログインURLを取得するときに必要な権限を指定します。たとえばread_streamとpublish_streamの権限を取得するには、

$permissions = array( 'scope'=>'read_stream,publish_stream' );
$loginUrl = $facebook->getLoginUrl( $permissions );

とします。

api

Facebook::api(/* polymorphic */)
api | Facebook Developers

Graph API Methods

$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

Field Expansionを利用して複数のAPIを一括して呼び出すには、

$ret = $facebook->api( '/me', 'GET', array( 'fields'=>'home,feed' ) );

のようにします。

FQL Queries

$ret = $facebook->api( array(
    'method' => 'fql.query',
    'query'  => 'SELECT . . . ',
    ));

REST APIs (非推奨)

$ret = $facebook->api( array(
    'method' => 'link.getStats',
    'urls'   => 'facebook.com,developers.facebook.com',
    ) );