2009/03/18


twitterのOAuthベータが開始されたので、さっそく軽量Web Application Framework「MENTA」でOAuthする物を作ってみた。
構成も簡単で │  .htaccess
│  menta.cgi
├─app
│  ├─controller
│  │      callback.pl
│  │      request.pl
│  ├─data
│  └─static
├─bin
├─lib
└─plugins
        session.pl
こんな感じ。トップページからrequest.plに飛び、OAuthのcallbackとしてcallback.plがキックされる。
要のrequest.plは以下の様な感じ use MENTA::Controller;
use URI;
use OAuth::Lite::Consumer;

sub run {
    my $consumer = OAuth::Lite::Consumer->new(
        consumer_key       => config()->{application}->{consumer_key},
        consumer_secret    => config()->{application}->{consumer_secret},
        site               => 'http://twitter.com/',
        request_token_path => 'http://twitter.com/oauth/request_token',
        access_token_path  => 'http://twitter.com/oauth/access_token',
        authorize_path     => 'http://twitter.com/oauth/authorize',
    );

    my $request_token = $consumer->get_request_token();
    my $uri           = URI->new( $consumer->{authorize_path} );
    $uri->query(
        $consumer->gen_auth_query(
            "GET", "http://twitter.com/", $request_token
        )
    );
    redirect( $uri->as_string );
}

そしてcallback.plはこんな感じ
use utf8;
use MENTA::Controller;
use OAuth::Lite::Consumer;
use JSON;

sub run {
    my $consumer = OAuth::Lite::Consumer->new(
        consumer_key       => config()->{application}->{consumer_key},
        consumer_secret    => config()->{application}->{consumer_secret},
        site               => 'http://twitter.com/',
        request_token_path => 'http://twitter.com/oauth/request_token',
        access_token_path  => 'http://twitter.com/oauth/access_token',
        authorize_path     => 'http://twitter.com/oauth/authorize',
    );

    my $access_token = $consumer->get_access_token( token => param('oauth_token') );
    my $res = $consumer->request(
        method => 'POST',
        url    => q{http://twitter.com/statuses/update.json},
        token  => $access_token,
        params =>
          { status => 'おうっふー', token => $access_token },
    );
    if ( $res->is_success ) {
        my $status = from_json( $res->content );
        redirect( "http://twitter.com/"
              . $status->{user}->{screen_name}
              . "/status/"
              . $status->{id} );
    }
    else {
        redirect("http://twitter.com/");
    }
}
ちなみにこのアプリケーションを"Accept"にするとtwitteのステータスラインに「おうっふー」がポストされます。自分で作る方はtwitterのアプリケーション登録画面から得られるconsumer_keyとconsumer_secretをmenta.cgiのapplication項目に設定するのをお忘れなく。
簡単ですね!
Posted at by



2009/03/13


ruby版C版なでしこ版と書いたので最後(きっと)にvim版


Posted at by



2009/03/11


解説は...いらんでしょ。
母艦は「dan the shell」。

!変数宣言が必要
ルートメニューとはメインメニュー

ファイルメニューとはメニュー
実行とは、メニュー。実行のテキストは「実行」
区切り1とは、メニュー。区切り1のテキストは「-」
閉じるとは、メニュー。閉じるのテキストは「閉じる」

「実行
区切り1
閉じる」を反復
 「ファイルメニューの追加({それ}を)」をナデシコする

「ファイルメニュー」を反復
 「ルートメニューの追加({それ}を)」をナデシコする

入力メモとはメモ。
入力メモについて
  X=0
    Y=0
    W=母艦のクライアントW
    H=母艦のクライアントHを2で割る
結果メモとはメモ。
結果メモについて
  X=0
    Y=母艦のクライアントHを2で割る
    W=母艦のクライアントW
    H=母艦のクライアントHを2で割る

母艦のサイズ変更した時は~
 入力メモについて
  X=0
    Y=0
    W=母艦のクライアントW
    H=母艦のクライアントHを2で割る
 結果メモについて
  X=0
    Y=母艦のクライアントHを2で割る
    W=母艦のクライアントW
    H=母艦のクライアントHを2で割る

閉じるのクリックした時は~
 「閉じますか?」と二択
  もし、それがはいならば、終わり

実行のクリックした時は~
  URLは「http://api.dan.co.jp/perleval.cgi?c=callback&s=」
  それは入力メモのテキスト
  それをURLエンコード
  「{改行}」を「%0A」に置換
  URLにそれを追加
  URLをHTTPデータ取得して、結果に代入
  結果を「^callback\((.*)\);$」で正規表現マッチ
  結果は抽出文字列[0]
  結果をJSONデコード
  結果はそれ
  結果メモのテキストは結果@「result」

参考文献: 404 Blog Not Found:Ajax - perlを実行するAPI
Posted at by