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
#! /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__