Allied ArchitectsAllied ArchitectsEngineer Blog

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

2013/11/11 PHP

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

ちょっと前の話ですが、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周りの仕様とかって、ぐぐったら色々でてきますが

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

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

  • cobonas
  • プログラマ
  • 元Javaプログラマ。現在はScala/PlayでWeb開発と、SwiftでiOSアプリ開発をしています。 Unitテストとか書いてる時が一番楽しかったりします。

RELATION ENTRY

Play Framework(Play2)(Scala)のTips Part3:Akkaを使った非同期/バッチ処理(Advent Calendar 20日目)

Play Framework(Play2...

2014/12/20 Scala

この記事はアライドアーキテクツAdvent Calendar 20日目の記事です。 どうも。伊藤(係長)です。 今日は他の方に乗っ取られる事もなく無事に書くことができます。 今回はAkkaを使った非同期処理やバッチ処理についてです。 通常、非同期処理をJavaとかで書こうと思ったら、ちょっとメン...

続きを読む

Play Framework(Play2)(Scala)のTips Part2:Specs2とMockitoでテストを書く(Advent Calendar 8日目)

Play Framework(Play2...

2014/12/8 Scala

この記事はアライドアーキテクツAdvent Calendar 8日目の記事です。 どうも。謎の刺客Tarou Yamadaさんにカレンダーを乗っ取られてしまった伊藤(係長)です。 気を取り直して、今回はSpecs2とMockitoを使ったユニットテストのお話を書きます。 ■Specs2とは ...

続きを読む

cobonasの記事一覧へ

ページTOPへ