ちょいと思いついたので

とある企画に必要なのが、HTMLファイルだったんで、どうやってダウンロードしようかなって思ったのですが。ダウンロードのソフトを探すのも、面倒だったんで、PerlのLWPを使用して、自作のHTML取得モジュールを作ってみました。自分用の一回限りのツールなんで、細かい設計は考えずに作ってあります。だから、HTMLタグの処理も簡易的な正規表現だし、localtimeの部分はサブルーチン化してないし、思いっきり環境依存してる部分はあるし。^_^;

#!/usr/bin/perl
#------------------------------------------------------------------------------
#HTML自動取得スクリプト
#------------------------------------------------------------------------------
use strict;
use warnings;
use LWP::Simple;
use Time::Local;

my $url = 'http://www.example.com/';	#対象URL

#2005年1月1日の秒数を求める
my $year = 2005;
my $mon = 1;
my $mday = 1;
my $hours = 0;
my $min = 0;
my $sec = 0;

my $time = timelocal($sec,$min,$hours,$mday,$mon - 1,$year);
my ($ss, $mn, $hh, $dd, $mm, $yy) = localtime($time);
$yy += 1900;
$mm++;

#条件の年月まで、データを取得
while ( $yy < 2005 || $mm < 3) {
	#保存するテキストファイル名
	my $file_txt = sprintf("%04d-%02d-%02d", $yy, $mm, $dd);
	#参照するHTMLファイル
	my $date_html = sprintf("%04d%01d/%01d", $yy, $mm, $dd);

	my $data = LWP::Simple::get($url.$date_html.".html");
	LWP::Simple::getstore($url.$date_html.".jpg",$file_txt.".jpg");

	if ($data) {
		#改行コードの処理
		$data =~ s/\n//g;
		$data =~ s/<BR>/\n/ig;
		#HTMLタグの削除処理
		$data =~ s/<[^>]*>//g;
		
		#テキストファイル書き込み
		open(TXT,">$file_txt".".txt");
		print TXT $data;
		close TXT;
	}
	
	#1日後(60秒 * 60分 * 24時間 = 86,400秒)を加算する。
	$time += 86400;
	($ss, $mn, $hh, $dd, $mm, $yy) = localtime($time);
	$yy += 1900;
	$mm++;
}

一応、下のようなURLのHTMLファイルはテキストファイルにし、それとJPEGファイルを自動取得します。フォルダが年月で、HTMLファイルが日になっているという場合の処理です。

http://www.example.com/20051/1.html ⇒ 2005-01-01.txt
http://www.example.com/20051/2.html ⇒ 2005-01-02.txt
http://www.example.com/20051/2.jpg  ⇒ 2005-01-02.jpg

やっぱちょっと接続する程度だったら、LWP::Simpleは気楽に使えますね。しっかり作ろうと思うと、LWP::UserAgentを使わないといけないでしょうが。