ええやんブログ

ええやないかのええやんブログ

Codeigniterを使ったFacebookアプリのつくりかた

どうもー、eeyanaikaでーす。

というわけで前回から引き続き、PHPフレームワークの一つである「CodeIgniter」を使ったFacebookアプリの作り方を書いていきます。 基本的な思想としてはconfig等への別ファイル化はせず、超シンプルにしています。

controller

FacebookのキャンバスURLに登録しているパスに従い、コントローラーを作成します。
今回登録したキャンバスURLはhttps://example.com/shindan/index.phpなので、Shindanコントローラーのindexメソッドを作ってみます。
コンストラクタで認証処理を行い、User IDが無い場合はFacebookのログイン画面に遷移させます。

<?php

/**
 * ええやん診断ページコントローラ
 *
 * @author eeyan
 */
class Shindan extends CI_controller {

    /**
     * @var FacebookアプリID
     */
    const FB_APP_ID = "345689273462046";

    /**
     * @var Facebookアプリシークレットコード
     */
    const FB_APP_SECRET = "3tesvgr537vecu563457ui456liu5457";

    /**
     * @var Facebookアプリ名
     */
    const FB_APP_NAME = "eeyan_app";

    /**
     * @var Facebook会員ID
     */
    var $user_id = NULL;

    /**
     * @var Facebookユーザー情報
     */
    var $me = NULL;

    /**
     * @var Facebook SDK インスタンス
     */
    var $facebook = NULL;

    /**
     * コンストラクタ
     */
    function __construct() {

        parent::__construct();

        //----------------------------------------
        // 処理前に準備する
        //----------------------------------------
        // third_party直下にFacebookのPHP SDKを配置
        require_once APPPATH."third_party/Facebook/facebook.php";

        // Facebookクラスのインスタンス生成
        $this->facebook = new Facebook(array(
                "appId"  => Shindan::FB_APP_ID,
                "secret" => Shindan::FB_APP_SECRET,
                "cookie" => true
        ));

        try {

            // 現在ログイン中のユーザー情報を取得する
            $this->user_id = $this->facebook->getUser();

        } catch (FacebookApiException $e) {
            //
            // エラー処理
            //
        }

        if (!$this->user_id) {

            // ログインURLを生成
            $url = $this->facebook->getLoginUrl(array(
                        "redirect_uri" => "http://apps.facebook.com/".Shindan::FB_APP_NAME,
                        "scope"        => "publish_stream"
            ));

            // アプリ未登録ユーザーなら facebook の認証ページへ遷移
            echo "<script type='text/javascript'>top.location.href = '{$url}';</script>";
            exit;

        }

    }

    /**
     * 初期画面アクション
     */
    function index() {

        //----------------------------------------
        // データを取得する
        //----------------------------------------
        try {

            // 自分の情報を取得
            $this->me = $this->facebook->api('/me');

        } catch (FacebookApiException $e) {
            //
            // エラー処理
            //
        }

        //-----------------------------------------
        // データを設定する
        //-----------------------------------------
        $view = array();
        $view["user_id"] = $this->user_id;   // 会員ID
        $view["me"] = $this->me;             // ユーザー情報

        // ビューを指定
        $this->load->view("eeyan/index", $view);

    }

}
view

作成したメソッドに対応したビューを作成します。
ビューではコントローラーで渡されたユーザー情報を表示しています。

<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>eeyan index</title>
</head>
<body>
    <h1>あなたの情報</h1>
    <?php var_dump($me); ?>
</body>
</html>

ただ、これいろいろと問題あるんです。
IEとかSafariで動きません。おいおい。

というわけで、次回はこのソースを修正していきたいと思います。