Catalystでmixi OpenIDからニックネームを取得
ボヤボヤしてるうちにmixiがOpenIDのProviderになって、そろそろOpenIDのRPに対応する準備しとかんとあかんやろ、と思い、認証してニックネームを取得してくるだけのRPのテストプログラムを作ってみた。
ここで紹介されているサンプルのCatalyst版(の更にマイミク認証を除いたやつ)です。
Catalystは当然インストールしてあるとして、事前にNet::OpenID::ConsumerとCatalyst::Authentication::Credential::OpenIDの2つのモジュールをCPANに上がっているやつじゃなくてSubversionのリポジトリから取得してそれぞれインストールします。
Net::OpenID::Consumerの方は依存モジュールに注意した方が良いみたいなので、以下のページを参考に先に他のモジュールや外部ライブラリをインストールしておく。
$ svn co http://code.sixapart.com/svn/openid/trunk/perl/Net-OpenID-Consumer/ $ perl Makefile.PL $ make $ make install
$ svn co http://svn.coderepos.org/share/lang/perl/Catalyst-Authentication-Credential-OpenID/trunk/ Catalyst-Authentic ation-Credential-OpenID $ perl Makefile.PL $ make $ make install
自分の環境ではもう一つハマリどころがあって、Net::OpenID::Consumer(正確に言うと同梱されているNet::OpenID::Yadis)がXML::Simpleを使用しているんだけどMakefileのPREREQ_PMに書いてないのでインストール要求されなかったこと。呼び出し側のCatalyst::Authentication::Credential::OpenIDの方でコンパイルエラーが起きていたので原因を特定するのに時間がかかってしまった。なので、手元の環境にXML::Simpleを入れてない人は別途インストールする必要があります。
この2つのモジュールを入れてしまえば、あとはcatalyst.pl MyAppしてMyApp.ymlとMyApp.pmとRoot.pmを以下の例の様に書き換えればOK。
MyApp.yml
--- name: MyApp Log::Dispatch: - class: File name: file filename: __path_to(test.log)__ mode: append min_level: debug format: '%P [%p] %m %n' - class: Screen name: screen min_level: debug stderr: 1 format: '[%p] %m%n' Plugin::Authentication: default_realm: openid realms: openid: credential: class: OpenID extension_args: 'http://openid.net/extensions/sreg/1.1': required: nickname
MyApp.pm
package MyApp; use strict; use warnings; use Catalyst::Runtime '5.70'; use Catalyst qw( ConfigLoader Static::Simple Log::Dispatch Authentication Session Session::Store::FastMmap Session::State::Cookie ); our $VERSION = '0.01'; __PACKAGE__->config( name => 'MyApp' ); # Start the application __PACKAGE__->setup; 1;
Root.pm
package MyApp::Controller::Root; use strict; use warnings; use base 'Catalyst::Controller'; __PACKAGE__->config->{namespace} = ''; sub default : Private { my ($self, $c) = @_; $c->log->debug('### default start'); my $template = << "TEMPLATE" <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>mixi OpenID Login Test</title> </head> <body> <h1>mixi OpenID Login Test</h1> ボタンをクリック!<a href="/login?openid_identifier=https://mixi.jp"><img src="/static/images/b_150.gif" alt="mixiでログイン" border="0"></a> TEMPLATE ; $c->res->body($template); $c->log->debug('### default end'); } sub login : Local { my ($self, $c) = @_; $c->log->debug('### login start'); if ($c->authenticate) { $c->log->debug('### authenticated!'); # success my $id = $c->user->{url}; my $nickname = $c->user->{display}; my $template = << "TEMPLATE" <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>mixi OpenID Login Test SUCCESS!</title> </head> <body> <h1>mixi OpenID Login Test</h1> ログインに成功しました!<br> こんにちは、$nickname ( $id ) さん TEMPLATE ; $c->res->body($template); } elsif ($c->res->redirect) { $c->log->debug('### redirect'); # redirect to OP/IdP, nothing to do } else { # error $c->log->debug('### error!'); my $template = << "TEMPLATE" <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>mixi OpenID Login Test ERROR!</title> </head> <body> <h1>mixi OpenID Login Test</h1> ログインに失敗しました。 TEMPLATE ; $c->res->status(401); $c->res->body($template); } $c->log->debug('### login end'); } sub end : ActionClass('RenderView') {} 1;
認証成功後は、$c->user->{url}でユーザのIdentifierが、(extention_argsにsregでnicknameを要求していれば)$c->user-{display}にニックネームが取得できます。今回はmixiからニックネームを持ってこれるか試したかったので手抜きでhttps://mixi.jpを直書きしたけど、Claimed Identifier(Root.pmのopenid_identifierの部分)を入力できるようにすれば他のOpenID Providerにも対応できるはず。試してないけど。
伝説はやはり伝説だった
今週はいつになくライブ週間。
- 9/3 カッコイイナイト2@高円寺ShowBoat:キセル, グッドラックヘイワ
- 9/4 DEEP@渋谷7th FLOOR:豊田道倫&久下惠生, ムンズ竹野恭章, AZUMI, 川本真琴
- 9/6 Faust@恵比寿LiquidRoom
- 9/7 14:00〜 原マスミ教室コンサート@芸能花伝舎 18:30〜 RHAPSODYvol.6@東高円寺U.F.O.CLUB:THE MUNZ, 埋火, ニーネ
こんなに連続して観に行くの初めてかも。しかも日曜は2本立て。
しかしフジロックのマイブラといい、メタモのアシュラといい、今日のファウストといい、高校生の頃から生で観るのを夢見てきた人たちを立て続けに体験できて本当に贅沢な夏になった。ライブ観ている間も夢を見ているようだったし、観終わった後も夢を見ていた気分。
みんな笑っちゃうくらいマイブラはマイブラ、アシュラはアシュラ、ファウストはファウストの音を出していて、やってることは全然変わってないんだけど期待を裏切らずにそのままやってくれるのはそれはそれで大したものだよな。
伝説はやはり伝説だった、なんて思ってたら今日拾ったフライヤーの中にTONY CONRAD & 灰野敬二@9/17 SuperDeluxeなんて恐ろしいものが!!!!こんなニアミスするならファウストとトニーコンラッドのコラボの再演やってくれればいいのに。伝説がインフレを起こしてるな。。
mod_perl配下でPHPを実行する
すごいニッチな条件だけど。mod_perlで動かしてるCatalystアプリケーション配下で、レガシーなシステムのPHPファイルを持ってきて共存させることになった。Perlでロジックを書き直すのがベストなんだろうけど、時間無いのとメンドくさいのでできればそのままPHPを流用したい状況と思ってください。
とりあえずrootフォルダ配下に置いてみたけど、PHPのインタプリタは実行されなかった。Apacheのハンドラがmodperlなのが原因かと思って、特定のパスだけdefault-handlerを適用するようにしてみたけど、その配下でもなぜか実行されない。。
仕方なく超アドホックにControllerに
my $body = `/usr/bin/php -f hoge.php`; $c->res->body($body);
と書いて済まそうかと思ったけど、念の為CPANモジュールを検索してみたらちょうどいいのがありました。その名もPHP::Interpreter。
こんな感じにPHPファイルを実行できて、しかもPerlのオブジェクトをPHPテンプレートに渡せるらしい。
my $p = PHP::Interpreter->new(); $p->include("hoge.php");
さらに素晴らしいことにCatalystのViewにもポートされていた(Catalyst::View::PHP)。Controllerにこんな感じで書ける。
$c->stash->{template} = 'hoge.php'; $c->forward($c->view('PHP'));
version0.01だしとりあえず作った感丸出しのモジュールだけど。。要件は満たせたから良しとしよう。
ちなみにうちの環境ではcpanコマンドからPHP::Interpreterをそのままインストールすることができませんでした。
Makefile.PLを見てみると
my $phpdir = shift @ARGV || ($^O eq 'MSWin32' ? 'C:\\php' : '/usr/local'); print "using phpdir $phpdir\n"; my $phpconfig = catfile $phpdir, 'bin', 'php-config';
とか書いてあって、/usr/local/bin配下にPHPがインストールされてることが前提になってる。。
うちの環境は/usr/bin/にあるのでこれまたアドホックにこの箇所を変更して
$ perl Makefile.PL $ make $ make install
でインストールできた。あとREADMEによるとPHPのバージョンは5.0.xか5.1.xで、configure時に--enable-embedオプションをつけておく必要があるようです。
MobileCatがすごい
一月くらいタイミングずれてますが。。とみたくんが公開してる、WebアプリケーションフレームワークのCatalystを基盤にCPANモジュールを駆使して携帯サイトを構築するノウハウをまとめたサイトMobileCatは本当にすごいと思う。
携帯向け固有のややこしい問題に対応すべくモバイル系のCPANモジュールもたくさんあるんだけど、イマイチどう使い分けたり組み合わせればいいのかよくワカラン状態だった。
けど、サイト自体をサンプルアプリケーションとしてまるごとソースを公開してくれたことですべてが明快になってると思う。
あと携帯関係無くCatalystのアプリ構築例としてもすごい意味があると思うしね。ちょうど久々にCatalystでスクラッチから作る機会があったのでエラー処理周りやTemplate Toolkitの使い方など参考にさせてもらいました。
いやーしかしほんととみたくんの精力的な活動ぶりとまとめ能力はすごいなー。そもそもMobileCatで使ってるCPANモジュール自体とみたくんが関わっているものがいくつもあるし。
なーんもアウトプットの無い自分としてはちょっとでも見習わなくては。。HaskellでWebアプリでも作ってみるかな。。
30代最初の日
ライブ後、ご飯食べて家に帰ったらちょうど日付が変わって誕生日の11日。風邪はどんどん悪化してる。が、なんとなく気分は良かったので、微妙にタイミングを逃していた昔の彼女への結婚お祝いメールを勢いで書いて送る。早々に寝る前に30代一発目の音楽は何にしようかと考えてしばし選曲。結局今年に入ってから心酔しているムンズのLIFE IS BEAUTIFULをかけながら眠ることにする。ムンズもパラダイス・ガラージと同様にそっと心の側に忍び込んで寄り添ってくれる、素敵な歌を聴かせてくれる稀有なロックバンド。
朝起きても風邪はあまり良くなってなかった。普通に仕事したけど薬の飲み過ぎか一日中頭がボンヤリしていた。
職場ではケーキを振舞ってもらい、ケータイメールやmixiでもお祝いメッセージを何件かもらった。本当に有難い。俺はもっと身の回りの人たちに感謝しなくてはいけない。
ふらふらしながらも何とか1日の仕事を終えた帰りに、ふと誕生日プレゼントを自分で買ってやろうと思い立った。新宿タワレコに寄り、いろいろ選んだ結果に菊地成孔のマイルス・デイヴィス研究本を買った。750Pぐらいあるけど、、、枕元に置いてチビチビ読んでいこう。
家に帰り、ふとテレビの横に置いてあったボ・ガンボス解散ライブDVDのジャケに目をやったら「1995年6月11日 日比谷野外音楽堂」だって!!半年ぐらい友達から借りっ放しなのに誕生日の当日にやっと気がついた。妙に嬉しい偶然なので通しで観て眠ることにした。満足ー。
- 作者: 菊地成孔,大谷能生
- 出版社/メーカー: エスクアイア マガジン ジャパン
- 発売日: 2008/03/31
- メディア: ハードカバー
- 購入: 2人 クリック: 297回
- この商品を含むブログ (79件) を見る
- アーティスト: BO GUMBOS
- 出版社/メーカー: エピックレコードジャパン
- 発売日: 2005/01/26
- メディア: DVD
- 購入: 1人 クリック: 3回
- この商品を含むブログ (8件) を見る
THE JACK AND JIM SHOW(ユージン・チャドボーン, ジミー・カール・ブラック)@東高円寺U.F.O.CLUB
昨日は20代最後の日。ということで何だか久しぶりにギターもののライブを観たくなったので、ほとんど予備知識無かったけどこのページの告知が気になってユージン・チャドボーンを観に行った。つちのこ旅行の疲れからか風邪をひいてノドが熱くなってきていたが気づかない振りして東高円寺へ移動。
対バンは中原昌也とジム・オルークの即席?ユニットSUICIDAL 10CCと、関西のオシリペンペンズ。SUICIDAL 10CCはそのダジャレのユニット名(Suicidal TendenciesってハードコアのバンドとI'm Not In Loveの10ccを掛けていると思われる念の為)だけで十分役目を果たしてるね。中原氏は相変わらず意味不明に鋭い眼光を放ちつつ電子音を鳴らしていたのが面白かった。オシリペンペンズは初めて観たけど、ベースがいない分ゆらゆら帝国よりも音がスカッスカでタイトなのが格好よかった。ギターが地味にネジれてて気になるのでもう一回ちゃんと見てみたい。そういえば帰りの丸の内線のホームでゆらゆらのベースの人がうろうろしてた。何してたんだろう。
で、チャドボーン。下の動画のようにバンジョーとボ・ディドリーのような四角いエレクトリックギターを持ち替えて演奏。告知のプロフィール通りギターの腕前も変態的にうまかったけど、それよりもダニエル・ジョンストンを彷彿させる高い声のスウィートな歌声に魅かれた。多分いろいろカバー曲を歌ってたと思うんだけど、スモーク・オン・ザ・ウォーター以外は曲名分からなかった;;ドラムのジミーはパッと見ザッパのファーストに参加してた頃の面影は無いくらいのおじいちゃんなんだけど、押し引きを踏まえた味わい深いプレイ。ドラム叩くだけに飽き足らずに猥雑なカントリー・ブルースを塩辛い歌声で熱唱してくれた。
年をとっていくのはやっぱり恐怖を感じるし新しいことを始める勇気も無くなってくる。一方でこうやって禿げたりヨボヨボになっても現役で最高にブルースしてる人たちを見ると勇気づけられる。若さに全ての価値を置く必要は無いんだよな。人生の節目に彼らのステージに出会うことができて良かったと思う。