PCや土いじりやゲームやオモチャ、思いつくまま細切れネタを書き散らかす日記
関東のJR運行状況botはTwitterにいるのに、札幌圏のbotはなんでいないのかなと思ってTwitterしたら、highness(smokeymonkey)さんが「[-*煙猴*-]: JR北海道の運行情報をお知らせするJRHokkaido」として反応してくれました。しかし、残念ながら現在は@JRHokkaidoは削除されています。
せっかくなので、これを元ネタに、何とかTwitterにポストしてやろうと粘ってみました。最初はYahoo PipesでHTMLからRSS Feedに変換しようとしたのですが、Yahoo Pipesはキャッシュが利くようで、何時間経ってもRSSが更新されません。仕方がないので他力本願は諦めて、Perlでプログラムすることにしました。
札幌圏の運行状況を10分ごとにチェックしています。全道一括なども可能ですが、いきなり手を広げるのは面倒なんでごめんなさい。
ごく普通のWindows XPで動いているので、多分きっと転けます。間違った情報を流すかも知れませんので、自己責任でご利用ください。
プログラムの元ネタは以下の2サイトです。Web::Scraperで取り込んでNet::Twitterでポスト、うは、もう出来上がりという算段です。
大雑把にくっつけて、ちょっと調整したのがこちらのソースです。Twitterに連投しないように、ファイルで更新チェックをしていますが、この辺はもっとスマートなやり方がある筈。
#!/usr/bin/perl
use strict;
use Net::Twitter;
use Jcode;
use utf8;
use LWP::UserAgent;
use Web::Scraper;
my $url =
'http://mobile.jrhokkaido.co.jp/web/area.asp?a=1';
my $fn = 'work.txt';
my $scrape = scraper {
process 'tr[bgcolor="#D0FFD0"]',
'term' => 'text';
result 'term';
};
my $content = LWP::UserAgent->new->get($url)->content;
my $result = $scrape->scrape(\$content, $url);
$result =~ s/[\s\n]+//gs;
open(FH, $fn);
my $fl = ;
if ($result eq $fl) {
close(FH);
exit;
}
close(FH);
open(FH, ">$fn");
print FH $result;
close(FH);
my $twit = Net::Twitter->new(
username=>"JRHokkaidoSap" #ユーザー名
, password=>"***" #パスワード
);
Jcode::convert(\$result, 'utf8');
my $result = $twit->update($result); ゴミソースを公開してもどうよ、って話ですが、元ネタサイトへの感謝と敬意を込めて。
では、自己責任でどうぞご利用ください。
以下の点を改善しました。余りにも格好悪いソースもそのまま晒しておきます。
#!/usr/bin/perl
use strict;
use utf8;
use Encode;
use Net::Twitter;
use URI;
use Web::Scraper;
my $url =
'http://mobile.jrhokkaido.co.jp/web/area.asp?a=1';
my $fn = 'work.txt';
my $scrape = scraper {
process 'tr[bgcolor="#D0FFD0"]',
'term' => 'text';
result 'term';
};
my $content = LWP::UserAgent->new->get($url)->content;
my $result = decode('shiftjis', $scrape->scrape(\$content, $url));
$result =~ s/[\s\n「」]+//gs;
$result =~ s/([0-9][0-9])時([0-9][0-9])分/$1:$2/gs;
$result =~ s/0/0/gs;
$result =~ s/1/1/gs;
$result =~ s/2/2/gs;
$result =~ s/3/3/gs;
$result =~ s/4/4/gs;
$result =~ s/5/5/gs;
$result =~ s/6/6/gs;
$result =~ s/7/7/gs;
$result =~ s/8/8/gs;
$result =~ s/9/9/gs;
$result =~ s/行き/行/gs;
$result =~ s/(/\(/gs;
$result =~ s/)/\)/gs;
$result =~ s///\//gs;
$result =~ s/[▲△・◆◇]+/▲/gs;
my $r2 = $1 if ($result =~ /^(.{1,137})/);
open(FH, $fn);
my $fl = ;
if ($r2 eq $fl) {
close(FH);
exit;
}
close(FH);
open FH, '>:encoding(shiftjis)', $fn;
print FH $r2;
close(FH);
my $twit = Net::Twitter->new(
username=>"JRHokkaidoSap" #ユーザー名
, password=>"***" #パスワード
);
my $result = $twit->update($result); この記事のトラックバックURL
http://iyouneta.blog49.fc2.com/tb.php/302-81c3f8cc
コメントの投稿