kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

Facebook APIのバージョンアップ対応 phpのgraph-sdkのバージョンアップ

Facebookが提供しているPHPSDKのバージョンアップについてです。
3系から5系にバージョンアップしたので少しだけサンプル残したいと思います。

3系

$params = [
  'message' => '投稿メッセージ',
  'link' => 'http:example.com',
  'access_token' => '{access_token}'
];
$facebook = new Facebook(['appId' => '{app-id}','secret' => '{app-secret}'];
$ret = $facebook->api('/v2.4/me/feed/', 'POST', $params);

5系

$params = [
  'message' => '投稿メッセージ',
  'link' => 'http:example.com',
];
$facebook = new FacebookSDK([
    'app_id' => '{app-id}',
    'app_secret' => '{app-secret}',
    'default_graph_version' => 'v2.9',
]);
//postメソッドの場合、第5引数にバージョンを指定することもできます。
//getメソッドは第4引数にバージョンを指定できます。
$facebook->post('/me/feed', $params, '{access_token}');

5系の戻り値について

5系の場合、post、getメソッドの戻り値は、FacebookResponseのオブジェクトです。
ここからエンドポイントにあった方法で値を取得することができます。
どのエンドポイントでどのオブジェクトを使用できるかは、
分かってないんですが、合わないメソッドを呼ぶとエラーが出るので
開発時には気づくと思います。 下記の他にもいくつかるのですが、よく使いそうなものを紹介します。

getGraphNode

getGraphObjectに替わる新しいメソッドです。 多分、単一のオブジェクトを取得する用なんだと思います。

$res = $facebook->post('/me/feed', $params, '{access_token}');
$node = $res->getGraphNode();
$id = $node->getField('id'); //これでポストしたメッセージのidがとれます。

ちなみにgetGraphObject は、sdk のv6で削除予定です。

* @deprecated 5.0.0 getGraphObject() has been renamed to getGraphNode()
* @todo v6: Remove this method

getGraphEdge

多分、リスト形式のオブジェクトを取り扱う用です。 配列として扱えます。

$res = $facebook->get('/me/permissions', '{access_token}');
$edge = $res->getGraphEdge();
if(count($edge) > 0){
  foreach($edge as $item){
    //somthing
  }
}

getGraphUser

ユーザー情報に特価したオブジェクト用です。

$res = $facebook->get('/me?fields=id,name', '{access-token}');
$user = $res->getGraphUser();
$name = $user['name'];