kgsの対局結果をtweetするbot(その3)

Web::Scraperを使うとものすごく簡単にhtmlから情報が拾えることがわかったので、怪しげな正規表現を使うのをやめて、書き直してみた。
Web::Scraperの使い方については下記のページが非常に役に立った。
http://e8y.net/mag/013-web-scraper/
とくに、Web::Scraperについてくる、'scraper'というコマンド*1FireBugの組み合わせは非常に強力。

use strict;
use warnings;
use Web::Scraper;
use LWP::Simple;
use LWP::UserAgent;
use URI;

#kgsの対局記録ページ
my $base_url='http://www.gokgs.com/gameArchives.jsp?user='; 
#ユーザー名
my $user = '(拾いたいユーザー名)'; 

#見に行くページ
my $uri = URI->new($base_url.$user);

#スクレーパの設定。XPathで最新対局を指定する
my $scraper = scraper {
	process '/html/body/table/tr[2]/td[2]','white' => 'TEXT';
	process '/html/body/table/tr[2]/td[3]','black' => 'TEXT';
	process '/html/body/table/tr[2]/td[5]','time' => 'TEXT';
	process '/html/body/table/tr[2]/td[6]','type' => 'TEXT';
	process '/html/body/table/tr[2]/td[7]','status' => 'TEXT';
	process '/html/body/table/tr[2]/td/a','address' => '@href';
};

#スクレーパを動かす
my $result = $scraper->scrape($uri);

#短縮URLを作る(140字対策)
my $url = 'http://tinyurl.com/api-create.php?url='.$result->{address};
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new('GET', $url);
my $res = $ua->request($req);
my $short = $res->content;

#tweetを作る
my $body = "KGS log bot(for test)\nW:$result->{white}-B:$result->{black}($result->{type})\nstart:$result->{time}(GMT)\nstatus:$result->{status}\n$short";

あとは、$bodyをtweetする。

私のような素人にも、こういうことができるのは、Webのおかげである。ありがたいことであるなぁ*2

*1:期待していなかったのだがDOS窓でも動く!!

*2:詠嘆。高校の古文の時間に習った現代語訳