wgetでサイトを一括確認する
管理しているサイトを一斉にページ出力の仕組みを変更した際に、各サイトの出力が正しいかをwgetで機械的に確認するということをしてみた。
まずはwindows版のwgetをGNUからダウンロードする。
下記のライブラリもインストールする。
ここではc:\wgetにインストールしたとする。
wgetの起動バッチ
cd C:\wget set APL="C:\wget\wget-1.11.4-1-bin\bin\wget.exe" #wgetのexeのパス set URL="C:\wget\list\url.txt" #調べるURLのリスト set LOG="C:\wget\dat\log.txt" #ログファイル set MEM="C:\wget\dat\mem.txt" #結果ログ del -f %MEM% CALL %APL% %OPT% -i%URL% -o%LOG% -a%MEM% --spider調べるサイトのURL(url.txt)の中身
http://www.hoge.com http://www.hage.com/aaa.htm http://www.hogehoge.com/bbb.htm ...ってな、感じで調べるURLのリストを1行ずつ書いておく。 先ほどのバッチを起動するとmem.txtにこんな感じの出力が出てくる。
スパイダーモードが有効です。リモートファイルが存在してるか確認します。 --2011-06-09 18:31:10-- http://www.hoge.com/ www.hoge.com をDNSに問いあわせています... 125.53.25.4 www.hoge.com|99.99.99.99|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 特定できません [text/html] リモートファイルが存在し、さらなるリンクもあり得ますが、再帰が禁止されています -- 取得しません。 スパイダーモードが有効です。リモートファイルが存在してるか確認します。 --2011-06-09 18:31:11-- http://www.hage.com/aaa.htm www.hage.com をDNSに問いあわせています... 125.53.25.4 www.hage.com|99.99.99.99|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 特定できません [text/html] リモートファイルが存在し、さらなるリンクもあり得ますが、再帰が禁止されています -- 取得しません。 ・・・httpリクエストの結果コードが200であればOKなのだが、これを大量に人間の目でチェックするのも大変なので、perlで整形することにした。 それ(res_list.pl)がこんな感じ。(あんまし、きれいに書けてないなぁ)
open(DAT, $ARGV[0]) || die "$ARGV[0] : $!"; open(OUTPUT, "+>$ARGV[1]") || die "$ARGV[1] : $!"; $cnt=0; while ($line = <DAT>) { if($line =~ /http:\/\//i){ $line =~ /http:\/\/(.*)/; $url = $1; } else{ if($line =~ /をDNSに問いあわせています... 失敗しました:\s(.*)/){ $code = "DNSエラー:" . $1; print OUTPUT "$cnt\t$url\t$code\n"; } else{ if($line =~ /HTTP による接続要求を送信しました、応答を待っています...\s/){ $line =~ /^HTTP による接続要求を送信しました、応答を待っています...\s(\d\d\d)/; $code = $1; $cnt = $cnt + 1; print OUTPUT "$cnt\t$url\t$code\n"; } } } } close(DAT); close(OUTPUT);そんでもって、先ほどのログを食わせる。
perl res_list.pl C:\wget\dat\mem.txt C:\wget\dat\res.txtそうすると結果(C:\wget\dat\res.txt)がちょっと見やすくなる。
1 www.hoge.com 200 2 www.hage.com/aaa.htm 200 ...あんまりうまく書けていないと思うが、ちょいとしたチェックに使うだけなので、これぐらいにしておこう。 以上