[facebook]tackphpで作るfacebookアプリ

こんちは。独自フレームワークtackphpでfacebookアプリをリリースしました。今回はfacebookアプリの作り方をご紹介いたします。
tackphpを使ってでのfacebookアプリの作り方ですが、普通に作る場合でも対応できる内容です。

なお作ったアプリは2chまとめブログのまとめアプリです。

tackphpはこちらからダウンロード&インストールをお願いします。


1:PHP SDK
まずはPHP SDKをダウンロードしてください。

必要なファイルは、src/の中身、facebook.php,base_facebook.php,fb_ca_chain_bundle.crtの3ファイルです。
この3ファイルを、tackphp/sdk/に設置します。

2:Facebookのapp_id, secretの取得
facebookのアプリを作成しましょう。下記ページの「アプリ」タブからアプリを作成してください。

APP_IDとSECRETが払い出されますので、

tackphp/config.php内に、

define('FACEBOOK_APPID', 'xxxxxxxxxx');
define('FACEBOOK_SECRET', 'xxxxxxxxxx');

定数を定義しておきましょう。


3:FacebookControllerの作成
tackphp/controller/FacebookController.phpを作成します。

<?php
class FacebookController extends Controller{
        public function __construct(){
                parent::__construct();

                require_once '../sdk/facebook.php';
                $this->facebook = new Facebook(array(
                        'appId' => FACEBOOK_APPID,
                        'secret' => FACEBOOK_SECRET,
                        ));

                //インストールされた場合のコールバック
                if(isset($_GET['code'])){
                        $this->callback();
                }

                /*まだインストールしていない場合*/
                if(!$this->facebook->getUser()){
                        $par = array(
                                'canvas' => 1,
                                'fbconnect' => 0,
                                'scope' => 'user_relationships,publish_stream,user_birthday',
                                );
                        $loginUrl = $this->facebook->getLoginUrl($par);
                        echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
                        exit();
                }
        }

        public function callback(){
                try{
                        $userData = $this->facebook->api('/me');
                        if(!$this->user->getUser($userData['id'])){
                                $this->user->setUser($userData['id'],$userData['name'],$userData['gender'],$userData['birthday']);
                                $params = array(
                                        'message' => $userData['name'] . 'さんが' . SITE_TITLE . 'の利用を開始しました。',
                                        'name' => SITE_TITLE,
                                        'link' => 'http://apps.facebook.com/' . FACEBOOK_APPID,
                                        'picture' => 'xxxxxxxxx.png',
                                        'description' => 'texttexttexttesxttexttext',
                                        );
                                $this->facebook->api('/me/feed', 'POST', $params);
                                header('Location: http://apps.facebook.com/'. FACEBOOK_APPID);
                                exit();
                        }
                }catch(FacebookApiException $e){
                        error_log($e->getResult());
                }
        }
}


簡単に説明します。

facebook SDKのインスタンス化を行う際に、APPIDとSECRETを渡しています。

既にインストール済みの場合、facebook::getUser()メソッドをコールすることでuser_idが取得できます。インストールされていない場合は取得できないため、それをトリガーにしてインストール画面へリダイレクトさせます。リダイレクト先のURLは、facebook::getLoginUrl()をコールすることで取得できます。

重要なのがgetLoginUrlに渡す配列引数です。scopeというパラメータには、カンマ区切りで、ユーザーのパーミッションを設定します。ユーザーの友達の情報を取得したい場合は、user_relationships。ウォールへの書き込みはpublish_streamを指定します。ここが漏れていると、facebookSDKのAPIをコールしても思うように情報が引き出せません。気をつけてください。

パーミッションのパラメータ一覧はこちらにあります。http://developers.facebook.com/docs/reference/api/permissions/


ユーザーがインストールを実行したら、FacebookController::callback()をコールし、Facebook::apiでユーザープロフィールの取得、ウォールへの書き込みを実行しています。

以上。

このブログ記事について

このページは、tatsuyaが2011年9月24日 19:56に書いたブログ記事です。

ひとつ前のブログ記事は「[余談]なぜ開発するのか」です。

次のブログ記事は「[Chrome]WebStoreにアプリを公開する方法」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。