#!/usr/local/bin/perl #!D:/Perl/bin/perl.exe #--------------------------------------------------------------------------------- # AWstats専用アクセス解析HTMLファイル名変更Perlスクリプト # URL:http://sakaguch.com 電子メール:http://sakaguch.com/cgi/postmail/ より送信して下さい。 # ファイル名:linkreplace.pl 2003.06.01 作成:鷹の巣 http://sakaguch.com/ #--------------------------------------------------------------------------------- # 改版記録: # 2003.03.08 Rev.1.000 初版で公開。 # 2003.06.01 Rev.1.001 AWStats Ver.5.5に対応してosdetailファイルの追加。 $ver = 'linkreplace.pl Rev.1.001(作成:鷹の巣)'; #--------------------------------------------------------------------------------- # 1.用途 # #  このPerlスクリプトは、フリーソフトです。詳細は、項4をご一読願います。 # #  このPerlスクリプトは、AWStatsのアクセスログ解析専用です。 #  awstats_buildstaticpages.plが生成するHTMLファイルのファイル名を変更し、 #  HTMLファイル内のアンカー(ハイパーリンク)先のHTMLファイル名も変更します。 #   #--------------------------------------------------------------------------------- # 2.作成されるファイルの表示例と特徴 # #  ファイル名の変更だけでしたら、Windowsのバッチファイル内のshellスクリプトを #  書くだけで実現できますが、HTMLファイル内のアンカー先のHTMLファイル名の変更が #  できないので、perlスクリプトで書いたものです。 # #  実際にこのスクリプトを使用して変更されたhtmlファイル名は、以下のURLです。 #  http://sakaguch.com/log/2003/200302.html # #--------------------------------------------------------------------------------- # 3.ご注意事項 # #  このスクリプトは、Windows 2000 Professional #  Active Perl 5.8.4.810 built for MSWin32-x86-multi-thread と #  ActivePerl-5.8.4.810-MSWin32-x86.msi #  の環境にて、動作確認を行っております。 # #  このスクリプトに対するご質問や不具合がございましたら、電子メールで、 #  webmaster@sakaguch.com まで、お寄せ下さい。 #  また、「鷹の巣」の自宅サーバー掲示板 #  http://sakaguch.com/cgi/bbs/ #  にご投稿して頂いても結構です。 # #--------------------------------------------------------------------------------- # 4.著作権 # #  このスクリプトは、鷹の巣が作成しましたが、著作権は放棄しています。 #  スクリプトの再配布や改造は自由ですが、無償として下さい。 #  いかなる目的であっても、このスクリプトに付加価値をつけて、 #  有償配布してはなりません。 # #--------------------------------------------------------------------------------- # 5.起動方法 # #  例.awstats.www.example.com.htmlのHTMLファイル名をAWS200301.htmlに変更する場合、 #   perl linkreplace.pl -host=www.example.com -newfilename=AWS200301.html #   perl linkreplace.pl -host=www.example.com -newfilename=AWS200301.html -htmldir=D:/www/edit/awstats/wwwroot/log/2003 #   perl linkreplace.pl -host=www.example.com -newfilename=AWS200301.html -htmldir=D:\www\edit\awstats\wwwroot\log\2003 #   として下さい。\n\n"; #  その他-htmldir=X HTMLファイルのフォルダ(ディレクトリ)を指定(X=./でカレントディレクトリ)\n"; # #  ※引数は、1つ以上指定する必要があります。 #   省略した引数は、スクリプト内の基本設定で設定した値が使用されます。 #   -newfilename=X.htmlで指定するファイル形式は、htmlだけです。htmには出来ません。 # #--------------------------------------------------------------------------------- #--------------------------- #■□■ 基本設定 ■□■ #--------------------------- # ホスト名の設定 # コマンドラインから-host=XXで、与えられた場合は、引数の値が有効になります。 $HOST = "www.example.com"; # HTMLファイルのディレクトリ(フォルダ)の設定 # コマンドラインから-htmldir=XXで、与えられた場合は、引数の値が有効になります。 #$HTMLDIR ="D:/www/edit/awstats/wwwroot/log"; $HTMLDIR ="."; # カレントディレクトリの場合 # 変更後のHTMLファイル名の設定 # コマンドラインから-newfilename=XXで、与えられた場合は、引数の値が有効になります。 $NEWFILENAME = "AWS200301.html"; #------------------------------- #■□■ 基本設定の終わり ■□■ #------------------------------- # AWstats ver.5.5のHTMLファイル識別文字 @definefilename = ( "alldomains","allhosts","alllogins","allrobots","browserdetail","errors404","", "keyphrases","keywords","lasthosts","lastlogins","lastrobots","monthdayvalues", "osdetail","refererpages","refererse","unknownbrowser","unknownip","unknownos", "urldetail","urlentry","urlexit" ); #--------------------------- # 設定の終わり #--------------------------- # 主回路 &main; exit; sub main { #--------------------------- # 主回路 #--------------------------- # 処理:awstats_buildstaticpages.plが生成するHTMLファイルのファイル名を変更します。 # また、HTMLファイル内のアンカー(ハイパーリンク)先のHTMLファイル名も変更します。 # # 入力:$HTMLDIRのディレクトリ内の$HOSTを含むHTMLファイル名と変更後のHTMLファイル名$NEWFILENAME # 出力:$HTMLDIRのディレクトリ内のHTMLファイル名$NEWFILENAME # 改版番号の表示 print "$ver\n\n"; # コマンドライン引数の処理 if ( !$ARGV[0] ) { &help; } &hikisuu; # コマンドライン引数の処理 例.www.example.com if ( $HIKISUU{'host'} ) { $HOST = $HIKISUU{'host'}; } if ( $HIKISUU{'newfilename'} ) { $NEWFILENAME = $HIKISUU{'newfilename'}; } # HTMLファイルのファイル名の検査 $NEWFILENAMEの例.AWSyyyymm.html if ( $NEWFILENAME =~ /^(.*)\.html$/ ) { $newfilehedder = $1; $exp = "html"; } else { &error ("$NEWFILENAMEのファイル名の形式は、htmlでなければなりません。"); } # 月単位のログファイルのホスト名変換処理を行なう。 foreach ( @definefilename ) { if ( $_ ) { $oldfilename = "awstats.$HOST.$_.html"; } else { $oldfilename = "awstats.$HOST.html"; $oldword = "awstats.$HOST."; $newword = $newfilehedder; &Replace ( "$HTMLDIR/$oldfilename" , $oldword , $newword ); } $renewfilename = "$newfilehedder$_.$exp"; print "$HTMLDIR/$oldfilename" , "---> $HTMLDIR/$renewfilename\n"; &file_rename ( "$HTMLDIR/$oldfilename" , "$HTMLDIR/$renewfilename" ); } print "\n処理が終了しました。\n\n"; # 改版番号の表示 print "$ver\n"; } exit; sub file_rename { #---------------------------------------- # ファイル名の変更処理 #---------------------------------------- # 処理:ファイル名の変更を行なう。 # # 入力:変更前のファイル名と変更後のファイル名 # 出力:(ファイル名の変更) my ( $oldfilename , $newfilename ) = @_; # 変更前ファイルの存在を検査。 if ( -e $oldfilename ) { # 変更先ファイルがあれば、削除する。 if ( -e $newfilename ) { unlink ( $newfilename ); } # ファイル名を変更する。 rename ( $oldfilename , $newfilename ); } } sub Replace { #---------------------------------------- # 指定ファイル内の文字列置換処理 #---------------------------------------- # 処理:指定されたファイル内の文字列の置換を行なう。 # # 入力:指定ファイル名と置換前の文字と置換後の文字 # 出力:(指定ファイル) my ( $pathfilename , $oldword , $newword ) = @_; my ( @buffer ); # 指定ファイルの読み込み open ( IN , "< $pathfilename" ) || &error ( "Open Error : $pathfilename" ); @buffer = ; close ( IN ); # 指定ファイル内の文字列の置換を行なう。 foreach ( @buffer ) { s/$oldword/$newword/g; } # 指定ファイルの書き出し open ( OUT , "> $pathfilename" ) || &error ( "Open Error : $pathfilename" ); print OUT @buffer; close ( OUT ); } sub hikisuu { #--------------------------- # 引数処理 #--------------------------- # 処理:コマンドラインの引数をURLデコードし、漢字コードを拡張UNIXコードに変換する。 # # 入力:コマンドライン引数 例.$ARGV[0] = '-year=2003' , $ARGV[1] = '-month=1',・・・$ARGV[n] # 出力:引数の値      例.$HIKISUU{'year'} = 2003 , $HIKISUU{'month'} = 1 ,・・・ my ( @pairs , $pairs); my $buffer = ""; # コマンドライン引数の連結 for ( 0..$#ARGV ) { $buffer .= $ARGV[$_]; } # 引数の分解 @pairs = split( /-/ , $buffer ); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # 引数の変数を小文字に変換 $name =~ tr/[A-Z]/[a-z]/; # 引数に含まれる\を/に置換する(Windowsのディレクトリ用) $value =~ s|\\|/|g; # 引数の値の末尾の/を除去(ディレクトリ用) $value =~ s|/$||; # 連想配列に格納 $HIKISUU{$name} = $value; } # 西暦年データの矯正 #if ( $HIKISUU{'year'} ) { $YEAR = $HIKISUU{'year'}; } #if ( $YEAR < 1000 ) { $YEAR = $YEAR + 2000; } # 月データの矯正 #if ( $HIKISUU{'month'} ) { $MONTH = $HIKISUU{'month'}; } #if ( $MONTH >= 1 && $MONTH <= 12 ) { $MONTH = sprintf ("%02d" , $MONTH ); } else { error("$MONTH月の数値が不正です。"); } # HTMLファイルのフォルダ(ディレクトリ)の検査 if ( $HIKISUU{'htmldir'} ) { $HTMLDIR = $HIKISUU{'htmldir'}; } if ( !( -d $HTMLDIR ) ) { error("出力ファイルのフォルダ(ディレクトリ)$HTMLDIRがありません。"); } return $#ARGV; } sub help { print "このスクリプトは、AWstatsで生成されたHTMLファイルのファイル名を変更します。リンク先のファイル名も変更します。\n\n"; print "例.awstats.www.example.com.htmlのHTMLファイル名をAWS200301.htmlに変更する場合、\n"; print " perl linkreplace.pl -host=www.example.com -newfilename=AWS200301.html\n"; print " perl linkreplace.pl -host=www.example.com -newfilename=AWS200301.html -htmldir=D:/www/edit/awstats/wwwroot/log/2003\n"; print " perl linkreplace.pl -host=www.example.com -newfilename=AWS200301.html -htmldir=D:\\www\\edit\\awstats\\wwwroot\\log\\2003\n"; print " として下さい。\n\n"; print "その他-htmldir=X HTMLファイルのフォルダ(ディレクトリ)を指定(X=./でカレントディレクトリ)\n"; exit; } sub error { # エラーの内容を表示して終了する。 print "$_[0]\n"; exit; }