痔瘻SEのブログ

おっさんSEのIT関連、ランニング、読書、子どもの教育について、たまに痔瘻くん

wgetでサイトを一括確認する

管理しているサイトを一斉にページ出力の仕組みを変更した際に、各サイトの出力が正しいかをwgetで機械的に確認するということをしてみた。 まずはwindows版のwgetGNUからダウンロードする。 下記のライブラリもインストールする。 ここでは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 ...
あんまりうまく書けていないと思うが、ちょいとしたチェックに使うだけなので、これぐらいにしておこう。 以上