Amon2でFacebookAPIを使う その2

前回Facebook::Graphを使ってFacebookにアクセスできました。
しかし実はAmon2にはFacebookAPIにコネクトするプラグインも存在します。
プラグインを使うとFacebook::Graphなしでも簡単にトークンを取得することができます。
試してみましょう。


とりあえず再度新しくアプリケーションを作っておきましょう。

amon2-setup.pl FacebookAPIPlugin
cd FacebookAPIPlugin

プラグインの設定

FacebookAPIPlugin::Web.pmにプラグインの設定とコールバックを書いておきます。

__PACKAGE__->load_plugin(
    'Web::Auth',
    {
        module => 'Facebook',
        on_finished => sub {
            my ($c, $token, $user) = @_;
            my $name = $user->{name} || die;
            $c->session->set('name' => $name);
            $c->session->set('site' => 'facebook');
            $c->session->set('token' => $token);
            return $c->redirect('/');
        },
        on_error => sub {
            my ( $c, $error ) = @_;
            warn ("auth_error!![$error]");
            return $c->redirect('/');
        },
    }
);

プラグインの設定内容はconf/development.pl に追記しておきます。

    Auth => {
        Facebook => {
            client_id       => 'cccccccccccccc',            # アプリケーションID
            client_secret => 'dddddddddddddddd',   # アプリケーション秘密鍵
            scope           => 'read_stream',                # 権限
        }
    }


これだけでOK。
あとは /auth/facebook/authenticate にアクセスさせれば
そのまま認証プロセスに入り、上記で設定したコールバックで
アクセストークンを取得できます。

コントローラ

生でアクセスするのであれば以下のように書けばよいでしょう。
FacebookAPIPlugin::Web::Dispatcher

any '/' => sub {
    my ($c) = @_;
    my $data;
    my $token = $c->session->get('token');
    if ( $token ) { # loggedin
        my $ua = LWP::UserAgent->new();
        my $res = $ua->get("https://graph.facebook.com/me/home?access_token=${token}");
        $res->is_success or die $res->status_line;
        $data = decode_json($res->decoded_content);
    }
    $c->render(
        'index.tt',
        {
            name => $c->session->get('name'),
            data => $data->{data},
        }
    );
};


簡単ですね!
APIへのアクセスはFacebook::Graphを使うのが楽だと思うので、
プラグインFacebook::Graphのハイブリッドで使うのが良いのではないでしょうか。
yattane!