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!