potpro (ぽとぷろ)
Full-stuck engineer(Not Full-stack)
JS/PHP/Go/Docker/Nginxなど。技術または趣味寄りの発信ブログです。
全 85 記事Facebook PHP SDK v3.2.3でGraph API のバージョンを変更する
Facebook PHP SDK v3.2.3でGraph API のバージョンを変更する
今回はいつもと趣向を変えた、バッドノウハウです。
Facebook PHP SDK v3.2.3は、名前の通りFacebookのGraph APIを叩くためのSDKですが、 2015年1月の時点でdeprecated(非推奨)となっております。2年前です。
非推奨というだけで今までは使用できたのですが、このSDKはGraph APIv2.2を使用しているため、利用期限が過ぎ、完全にこのままでは使えなくなりました。
使用期限:2017年3月25日
https://developers.facebook.com/docs/apps/changelog?locale=ja_JP
なので、現在推奨されているFacebook SDK for PHP (v5)を使用しましょう。
で、本来はそこで終了なのですが、実際はそうもいかない人たちもいるようで・・・ Facebook SDK for PHP (v5)はPHP5.3非対応のため、PHP5.3の場合は、このSDKを使用しているところもあります。 PHPバージョンのシェア率を見ると、PHP5.3以下はまだ 25% も存在するようです。 自分もその被害者のため、完全にバッドノウハウなわけですが、対応方法を書いておきます。
この方法で、最新バージョンのv2.8まで動作しました。しかし、完全に動作するとは思わないほうがいいです。 何時使えなくなるかもわからない綱渡り的な状態であり、応急処置みたいなものなので、早いところPHPのバージョンを上げましょう。
参考:facebook graph api not work from 2.2 to 2.3 http://stackoverflow.com/questions/42994019/facebook-graph-api-not-work-from-2-2-to-2-3
まず、バージョンを変更します。デフォルトではv2.2を使用するようになっていますが、そこを明示的に指定することで、バージョンを指定することが出来ます。
v2.8であれば/v2.8/
という風にURLを変更します。v2.3にしたほうが無難だと思います。
facebook-php-sdk/src/base_facebook.php 164行目付近
public static $DOMAIN_MAP = array(
'api' => 'https://api.facebook.com/v2.8/',
'api_video' => 'https://api-video.facebook.com/v2.8/',
'api_read' => 'https://api-read.facebook.com/v2.8/',
'graph' => 'https://graph.facebook.com/v2.8/',
'graph_video' => 'https://graph-video.facebook.com/v2.8/',
'www' => 'https://www.facebook.com/v2.8/',
);
これだけでは動きません。Graph API v2.3から、アクセストークンを取得した時の振る舞いが変更され、配列からjsonを返すように変更されたためです。 そのため、返ってきたjsonをArrayに変換することで動くようにします。 2箇所同じような部分があるので、そこも同じように変更します。両方変更しないとユーザアクセストークンなどが取得できなかったりします。
facebook-php-sdk/src/base_facebook.php 413行目 facebook-php-sdk/src/base_facebook.php 808行目
$response_params = array();
parse_str($access_token_response, $response_params);
この部分を以下のように変更します。
//$response_params = array();
$response_params = json_decode($access_token_response, true);
これでとりあえずは指定したGraph APIで動作するようになります(v2.3,v2.8以外未確認です)。 OAuthログイン、/me/、/me/account/、/feed/などは動作確認済みです。
もう一度言いますが、PHP5.4以上の方はFacebook SDK for PHP (v5)を使用しましょう。