ちょいと思いついたので
とある企画に必要なのが、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を使わないといけないでしょうが。