この前のYAPCで当たり前のように話していたDancerという軽量フレームワークをうかつにも知らなかったのとdotCloudを使おうと思ったらサンプルがDancerだったのでちょっと調べてやってみました。
まずDancerとは
- Dancerは、超軽量Perlフレームワーク
- RubyのSinatraプロジェクトの移植として始まったが、独自路線で成長している
- Dancerアプリは、スタンドアロンWebサーバーとして、またはPSGIを使用する任意のWebサーバーから実行することができる
- DancerでのWebアプリケーション構築は、ライブラリのロードやルートハンドラーの定義と同じくらい簡単で、ルートハンドラーを定義し、様々なテンプレートエンジンでビューを描画できるようにし、静的ファイル提供をサポートし、セッションサポート、より多くの機能のためのエレガントな構文を提供
ふむふむこれは良さそうだ。
cpanm Dancer
でDancerをインストールしたら
dancer -a hoge
これでひな形完成。。簡単すぎる。。
後は
perl bin/app.pl
でサーバーが起動してhttp://localhost:3000を表示すると最初の画面が表示されます。
チョー簡単
とりあえず今回はTwitterクライアントを簡単に作ってみました。アプリ名はtwitterclとして作ってみます
まずルートにあるconfig.ymlにtwitterの設定を追記
[sourcecode]
plugins:
Auth::Twitter:
callback_url: http://localhost:3000/auth/twitter/callback
consumer_key: XXXXXXXXXXXXXXXXXXX
consumer_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
callback_success: /
callback_fail: /fail
[/sourcecode]
テンプレートは標準でついてるんですが、やっぱり慣れているTTを使いたいのでconfig.ymlの
template: “simple”をコメントアウトしてtemplate: “template_toolkit”とenginesのコメントを外す
[sourcecode]
#template:
template:
engines:
template_toolkit:
encoding: ‘utf8’
start_tag: ‘[%’
end_tag: ‘%]’
[/sourcecode]
あとはソースはこんな感じでauth_twitter_init();を読み込み時の初期化処理として入れて、
OAuth処理はauth_twitter_authenticate_urlにリダイレクトさせてconfigのcallback_urlで設定した/auth/twitter/callbackに
戻してあげればsessionのtwitter_userにtwitterユーザ情報が入ってます。
あとはtwitterっていう名前をregistしてくれているのでtwitterで呼び出せば裏のNet::Twitterのインスタンスが使えます。
ヤバイ、ちょー簡単
lib/twittercl.pm
[sourcecode language=’perl’]
use Dancer ‘:syntax’;
use Dancer::Plugin::Auth::Twitter;
our $VERSION = ‘0.1’;
auth_twitter_init();
get ‘/’ => sub {
if (not session(‘twitter_user’)) {
return redirect uri_for(‘/login’);
}
my $list = twitter->friends_timeline({count => 10});
template ‘index’, {list => $list};
};
get ‘/forward_twitter’ => sub {
redirect auth_twitter_authenticate_url;
};
get ‘/login’ => sub {
template ‘login’;
};
post ‘/tweet’ => sub {
twitter->access_token(session(‘access_token’));
twitter->access_token_secret(session(‘access_token_secret’));
twitter->update(param(‘tweet’));
redirect uri_for(‘/’);
};
get ‘/fail’ => sub {
redirect uri_for(‘/login’);
};
true;
[/sourcecode]
あっという間ですね。
みなさんもLet’s Dance!!
コメント