/ / WinChalow

交通量調査[perl]

2005-02-07

www.jartic.or.jp というサイトで、道路の渋滞情報を流している。5分ごとにJPEG画像が更新されるので、一定期間継続してダウンロードしておくと渋滞の傾向と対策に便利だ。

画像ダウンロードには、wgetや、perlのrgetを使うのが定番だが、最近はURI::Fetchが流行だ。Cache::Fileと組み合わせて変更のあったときだけ落としてくることができる。(via NDO::Weblog http://naoya.dyndns.org/~naoya/mt/archives/001524.html)

ファイル名に年月日時刻を使い、曜日ごとのディレクトリに格納しておくと、あとで分析するのに便利である。日付・時刻まわりはDate::Calcモジュールで一発。

WindowsのActivePerl 5.8であれば、URI::Fetch とDate::Calcはppm でインストールできる。

C:\> ppm.bat
ppm> install URI-Fetch
ppm> install Date-Calc
ppm> quit

Cache::FileはCPANからおろして自力インスコ!
と思ったらダメ。Linuxでないと動かない模様である。
http://search.cpan.org/CPAN/authors/id/C/CL/CLEISHMAN/Cache-2.02.tar.gz

WindowsではHTTP::Lite::Fetch を使えばよさそうだ。

#! /usr/bin/perl

use strict;
use Cache::File;
use URI::Fetch;
use Date::Calc qw(Today_and_Now Add_Delta_DHMS Day_of_Week);

# 首都高の空いている曜日と時間帯をさがす
my $uri = 'http://www.jartic.or.jp/traffic/highway/kousoku/rhp0001.jpeg';
# キャッシュの置き場
my $cache_root = '/tmp/cache';

my $cache = Cache::File->new( cache_root => $cache_root );
my $res = URI::Fetch->fetch($uri, Cache => $cache)
or die URI::Fetch->errstr;
my $jpg = $res->content;
my @now = Add_Delta_DHMS(Today_and_Now(),0,0,-10,0); # タイムラグが10分くらいあるようだ...
my $file = sprintf("%04d%02d%02d_%02d%02d", @now) . '.jpg';
my $dow = Day_of_Week($now[0],$now[1],$now[2]);

# ファイルは、var/曜日番号/以下におく 月曜=1, 火曜=2, .. .. .. 日曜=0
# ディレクトリはあらかじめ作っておく。
open F, ">../var/$dow/$file";
binmode F;
print F $jpg;
__END__

Linuxであれば cronに登録して5分ごとに起動する。果報は寝て待て!

(2005-02-07 16:27:36)

permlink