facebook アプリの作り方・PHP 編(2010 年 10 月版)
なんだか突発的に盛り上がってる facebook ですが、アプリが気になっていじってみました。mixi アプリは PC 版がクローズドオープンだった頃にお遊びでいくつか公開していたのだけど、それより格段に手軽かつ自由度が高いなぁ、という印象です。
で、日本語で解説しているページがほとんどなさそう&あってもなんだか古そうなので丁寧めに以下書いてみるよ。言語は PHP ですぞー。
facebook アプリを登録
マイアプリケーション一覧:http://www.facebook.com/developers/apps.php に移動し、右上にある「新規アプリケーション登録」をクリック
登録できたら、そのアプリの「設定を編集」をクリックすると、以下のような画面になるはず。ここの「Facebook Integration」タブをクリック
アプリの URL と、アプリ起動時にリンクする URL 先を決めます。キャンバスページは任意の 7 文字以上の英数字文字列で。キャンバスページ URL は、自分のサーバーやテスト環境を指定しましょう。Canvas Type は iFrame にします。
リリース前なら、「詳細設定」タブにある「サンドボックスモード」を有効にしておいたほうがいいかも。こうしておくと、開発者以外はアプリが閲覧できなくなります。開発者はアプリ登録者だけでなく、メールアドレスなどを指定することで追加可能。
facebook PHP SDK をダウンロード
PHP 用の SDK が配布されているので、以下からダウンロード
http://github.com/facebook/php-sdk/
src の中にある facebook.php と fb_ca_chain_bundle.crt があればとりあえずあとはなくても大丈夫です。
facebook アプリでユーザー認証
単純な例とするために、用意するのは上記 SDK 以外は index.php だけにします。以下 3 ファイルを同じフォルダに入れます。
望ましい動作としては、
- アプリ登録済みユーザーであればユーザー情報をゲットしてページ表示
- アプリ未登録ユーザーであれば facebook のアプリ登録画面へ遷移
というものかなぁ、と思います。それでは index.php を作ります。
index.php の中身
<?php require('facebook.php'); $facebook = new Facebook(array( 'appId' => 'メモったアプリケーション ID', 'secret' => 'メモったシークレットキー', 'cookie' => true, )); $session = $facebook->getSession(); if (!$session) { $url = $facebook->getLoginUrl(array( 'canvas' => 1, 'fbconnect' => 0, 'req_perms' => 'status_update,publish_stream' // ステータス更新とフィードへの書き込み許可 )); // アプリ未登録ユーザーなら facebook の認証ページへ遷移 echo "<script type='text/javascript'>top.location.href = '$url';</script>"; } else { try { $me = $facebook->api('/me'); // 自分の情報を取得 $uid = $facebook->getUser(); // 自分のユーザー ID を取得 } catch (FacebookApiException $e) { $error = "Error : something is wrong, please try again later."; exit(); } } ?> <!doctype html> <html xmlns:fb="http://www.facebook.com/2008/fbml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>facebook auth test</title> </head> <body> <div>プロフィール情報</div> <img src="https://graph.facebook.com/<?php echo $uid; ?>/picture"> <?php echo $me['name']; ?> <div>セッション情報</div> <pre><?php print_r($session); ?></pre> </body> </html>
facebook アプリからニュースフィードに投稿
アプリ作ってもソーシャルに広めるにはニュースフィードに通知しなきゃいけない、ってわけで投稿はこんなかんじ。ちなみに事前に上記の認証時の 'req_perms' に 'publish_stream' が含まれていることが前提条件です。
<?php try { $response = $facebook->api(array( 'method' => 'stream.publish', 'message' => '瀬尾さんのベストショット(^ω^)', // 'target_id' => '1253116305', //相手を指定する場合はその ID、なくてもいい 'attachment' => array( //画像とか付けたい場合はそのデータ、なくてもいい 'media' => array(array( 'type' => 'image', 'src' => '画像の URL', 'href' => "http://www.facebook.com/", 'description' => '{*actor*} さんが撮影しました', 'caption' => '{*actor*} さんが撮影しました', )) ), 'action_links' => array( array('text' => '下に出るタイトル', 'href' => 'http://apps.facebook.com/auth_post_test/') ), )); } catch (FacebookApiException $e) { $error = "Error : something is wrong, please try again later."; exit(); } ?>