« Mylingual Slides @ YAPC::Asia 2007 | メイン | Re: PoCo::Client::HTTP が勝手に文字コードを変えてしまう件 »

2007年04月16日

Gungho をインライン化してみた

 ちょっとクローラーが必要になったのですが、POE の勉強は面倒なので Gungho を使って作ることにしました。開発が始まったばかりっぽいけど、使いやすそうだし期待大ということで。で、コードを読んでいて思ったのは、provider (URL をフィードするモジュール) と handler (ダウンロードしたコンテンツを処理するモジュール) は再利用されない (=各アプリケーション専用の処理になる) 場合も多いんじゃないかということ。だったらいちいちパッケージ定義して設定値渡しとか面倒だよねというか、ぶっちゃけ自分がクロージャで書きたいと思ったので、ラッパーを書いてみました。こんな感じで使えます。

# 標準入力から URL を読み込んでクロール

use Gungho::Inline;
use IO::Select;

Gungho::Inline->new({
  provider => sub {
    my ($c, $p) = @_;
    while (IO::Select->new(STDIN)->can_read(0)) {
      return if STDIN->eof;
      my $url = STDIN->getline;
      chomp $url;
      $p->add_request($c->prepare_request(Gungho::Request->new(GET => $url)));
    }
    1;
  },
  handler => sub {
    my ($req, $res) = @_;
    print $res->code, ' ', $req->uri, "\n";
  },
})->run();

 このモジュール (Gungho::Inline) は、こちらからダウンロードできるようにしておきます。こういう要望もありますということでよろしくお願いします。マイナーな需要だったら無視してください m(__)m

投稿者 kazuho : 2007年04月16日 10:35 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/1202

コメント

おお、ありがとうございます。まだ細部までは見てないですが、奥さんのコードを使って方向でよいでしょうか?

よろしければコミット権も差し上げますので、あとでgoogleアカウント教えてくださいー。

投稿者 lestrrat : 2007年04月16日 14:38

こちらこそ、Gungho 便利に使わせていただいています。

コードを (というより、このような機能を) 取り込んでいただければ助かります。Gungho/Inline.pm を別のクラスとして残すのか Gungho.pm に取り込むのかという問題や、実装にバグがないかという点はありますが。

現時点で他の改良ネタは思いつかないので、コミット権はいただいてもいただかなくてもかまいません。

投稿者 kazuho : 2007年04月16日 17:02