cobonas

2013.11.11

Facebookに非推奨にされちゃったREST APIをGraph APIとかFQLに移行しよう

お久しぶりです。伊藤(係長)です。

ちょっと前の話ですが、Facebook(Lei Leiさん)からREST APIに関する非情なる通達が来ました。
コレ→Facebook開発者ブログ

要するに、
・REST APIは非推奨にする
・REST APIはこの先もう長くない
・2013/4/10以降に新しく作成したFacebookアプリではREST APIは使えなくした
・既存のFacebookアプリでは取り敢えず問題なく動作する
・さっさとGraph APIに移行しろ
という事のようです。

MONIPLA for Facebookでは当然のようにFacebookのAPIを利用していて、
中にはREST APIを利用している箇所もあります。
以前からFacebookの(突然の)仕様変更には悩まされて来ましたが、今回も結構なインパクトがあります。
いつ動かなくなるかまだ不明ですが、これから作成するFacebookアプリが既存のコードでは動かないとなると、
新たに開発環境を整える人(新人とか)が困ってしまいますね。
というワケで早めにREST APIをGraph API(もしくはFQL)に移行してしまおうという事になりました。

今回はいくつかのREST APIをピックアップして、それと同等の動きをするGraph API(もしくはFQL)に
置き換える方法について書きます。
※PHPのFacebook SDKを使用する前提で書きます。
※コード中の「$this->facebook」はFacebookインスタンスです。

1. pages.isfan

まずは肩慣らしに、「pages.isfan」です。

これは指定したFacebookページのファン(いいねしている)であるかどうかを返すREST APIです。

使い方は、

ですね。

結果はtrueかfalseで返ってきます。

これはGraph APIの「/me/likes」に置き換える事ができます。

結果は連想配列で返ってきますので、$result[‘data’]でtrueかfalseを取得できます。

2. users.isappuser

これはあるユーザがFacebookアプリをインストールしているかどうかを判定するREST APIです。

使い方は、

ですね。

結果はtrueかfalseで返ってきます。

これはFQLに置き換える事ができます。

結果は連想配列で返ってきますので、$result[‘data’][0][‘is_app_user’]でtrueかfalseを取得できます。メンドイ…

3. pages.isAppAdded

これはあるFacebookページにFacebookアプリをインストールしているかどうかを判定するREST APIです。

使い方は、

ですね。

結果はtrueかfalseで返ってきます。

これはGraph APIで次のように置き換えてみます。

結果はcount($result[‘data’])でデータが存在しているかで取得します。

4. friends.getAppUsers

最後に「friends.getAppUsers」です。

これは友達がFacebookアプリをインストールしているかどうかを判定するREST APIです。

ここだけは、JavascriptのSDKで説明します。使い方は、

ですね。

結果はFacebookユーザIDがカンマ区切りの文字列でわらわらと返ってきます。

これはFQLで次のように置き換えてみます。

結果はobjectで返ってきますので、forなどでぐるぐる回して取得します。

5. ちなみに

FQLは呼び出し方が2通り(もっと?)あるようです。

■1. fql.query形式

戻り値は

アクセス先は

■2. /fql形式

戻り値は

アクセス先は

と、このように呼び出し方が違うと戻り値の配列の階層、アクセス先が異なるようです。

これには若干注意が必要ですね。

アクセス先を見るところ、/fql形式の方が正しい(推奨)のでしょうかね?

※自分はこれにちょっとハマったので。。当然だろ!という方はゴメンナサイ。

ざっと書きましたが、FacebookのAPI周りの仕様とかって、ぐぐったら色々でてきますが

分かり易い説明(日本語で..)があんまりないんですよね。。

同じようなとこで困ってる人の参考になれば幸いです。