2008/01/31


今日はもう寝ます。
ttyは明日ミマス。

typester++

sub handle {
    my ($self, $url) = @_;
    $url =~ qr!http://ttyshare.com/rec/\w+!;
}

sub find {
    my($self, $args) = @_;
    
    my $uri = $args->{url};
    my $response = LWP::UserAgent->new->post(
        $uri,
        ['download' => 1]);
    if($response->content =~ m/<div id="p-(.+?)" class="player">/) {
        my $enclosure = Plagger::Enclosure->new;
        $uri = sprintf('http://ttyshare.com/static/tty/%s/%s/%s/%s',
            substr($1, 0, 1), substr($1, 0, 2), substr($1, 0, 4), $1);
        $enclosure->url($uri);
        $enclosure->type('application/x-ttyrec');
        $enclosure->filename("$1.tty");
        return $enclosure;
    }

    return;
}
Posted at by




Web::Scraper使うときに、scraperコマンドを使って頑張る人もいれば、FirebugのDOMツリーで「XPathをコピー」とやっている人もいるでしょう。
前者の場合、端末でスクロールアウトするHTMLを見ながらXPathをこさえて間違ったらズラズラズラ…と画面が流れて行ってしまいます。後者の場合は、CLASSやID属性を使わないXPathが出来上がってしまいます。
映画に出てくるHackerの如く一発でXPathを決められればそれは素晴らしい事だと思いますが、いかんせん幾度か失敗しますよね。
で、何回もXPathを確かめられるツールが欲しいなと思い、perl-GTK2で作ってみました。

画面はこんな感じ
WebScraperHelper1
引数に「http://b.hatena.ne.jp/」を付けて起動したらこんな感じ
WebScraperHelper2
URLを変更して「Get」をクリックすれば再読み込みします。
そして、はてなブックマークトップページの「注目の動画」部分にある画像一覧を取得する為に //a[text()="注目の動画"]/../../..//img
というXPathを書いて「Update」をクリックすれば
WebScraperHelper3
こんな感じのHTMLが出来上がります。
あとはこれをWeb::Scraperのprocess部分に貼っつけるだけ。

ちなみにXPathでの属性値参照も出来ますので、はてなブックマークトップページで //meta[@http-equiv="Content-Type"]/@content
というXPathを書けば content="text/html; charset=UTF-8"
という結果が返ります。
起動にはCPANからGtk2モジュールをインストールする必要があります。HTMLのパース方法やノードの取得方法等は大体Web::Scraperと合わせていますので、Web::Scraperが動く環境にGtk2をインストールすれば動くかと思います。
また画面はLinux上で起動した物ですが、UN*Xらしい事は一切やってませんのでWindowsでも動作するかと思います。
ダウンロード:

もう少し機能を足そうかと思いましたが、今日はもうギブアップ。寝ます。
Posted at by




とりあえず書き上げました。
またまた適当クオリティですが...

lang/perl/Net-Kotonoha - CodeRepos

使い方は...
use warnings;
use encoding 'utf-8';
use Net::Kotonoha;
use Data::Dumper;
use Encode;

#binmode(STDERR, ':encoding(shiftjis)');

my $kotonoha = Net::Kotonoha->new(
        mail     => 'xxxx@example.com',
        password => 'xxxxxxx',
    );

# 新着コト一覧
warn Dumper $kotonoha->newer_list;

# 最近のコト一覧
#warn Dumper $kotonoha->recent_list;

# コト番号120235を取得
my $koto = $kotonoha->get_koto(120235);

# タイトル表示
warn $koto->title;

# ○ユーザ一覧
warn Dumper $koto->yesman;

# ×ユーザ一覧
warn Dumper $koto->noman;

# 回答(0:未回答, 1: ○, 2:×, コメントは省略可能)
$koto->answer(1, 'けもたい');

# 自分の回答
warn Dumper $koto->answer;

※一覧系の戻りはハッシュの配列
こんな感じ...
まぁ、UIで遊ぶサービスですから、あまり使い道はないかもしれませんが...

追記
cpanに入れてありますので「cpan Net::Kotonoha」で入ります。
Posted at by