コマネタ帳(旧) by iyoupapa

PCや土いじりやゲームやオモチャ、思いつくまま細切れネタを書き散らかす日記

Creative Commons Licenseiyoupapaが書いたコマネタ帳の文章は「Creative Commons 表示-継承 2.1 日本」ライセンスです。写真については私のFlickrで配布しています。新しい「コマネタ帳」に移転しました。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[プログラミング]JR北海道の札幌近郊の運行状況をTwitterにポストする

関東の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);

ゴミソースを公開してもどうよ、って話ですが、元ネタサイトへの感謝と敬意を込めて。

では、自己責任でどうぞご利用ください。

2008/1/8 追記

以下の点を改善しました。余りにも格好悪いソースもそのまま晒しておきます。

  • 年末に700文字以上の情報がWebに乗せられており、その最後の方が頻繁に更新されたため、10分毎にステータスを更新するという迷惑な状況を引き起こしていました。現在は140文字で切断し、その部分に変化がなければステータスを更新しません。
  • 空白を削除したり、時刻表示を簡略化する、半角に変換するなど、狭い表示領域向けに表示内容を加工するようにしました。
#!/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);

コメント

@JRHokkaidoSap 便利そうで感激です
ありがとうございます.

便利って言っていただけると嬉しいですね。
こちらこそありがとうございました。

Twitterでフォローさせてもらってます。とても便利で、大活躍してます。

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://iyouneta.blog49.fc2.com/tb.php/302-81c3f8cc

「JR北海道運行状況」についての最新ブログのリンク集

JR北海道運行状況 に関連するブログ記事の検索結果や関連ワードをまとめてみると…
  • [2008/01/25 17:45]
  • URL |
  • 話題のキーワードでブログサーチ! |
  • TOP ▲

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

skin presented by myhurt : BLOG | SKIN

FC2Ad

  
copyright © 2005 コマネタ帳(旧) some rights reserved. Powered by FC2ブログ