AWStatsをFreeBSDで動かす


2007.9.29 高橋 誠

 AWStats6.6の日本語化がAWStats 6.6完全日本語版のページに公開されていますが、AWStats 6.7の変更とマージして、若干修正して動作させたので報告します。

目次

AWStats 6.6日本語のダウンロードと確認

 AWStats 6.6完全日本語版のページからダウンロードして指示どおりにして動作しました。当サイトのログから参照いただけます。

HTML 4.01にあうように修正

 とりあえず、実際の動作上は問題ないのですが、Another HTML-lintに怒られるソースが気持ち悪いので、下記の修正をしました。
<br />をなくす。
 XHTMLとHTMLの両方の出力形式をサポートしているのですが、タグがXHTMLにのみ対応しているようです。次の変更で変数化し、/ \/>/$endtag/で全文置換しました。
 widthの変数化を拡張しました。
--- C:\awstats-6.7/wwwroot/cgi-bin/awstats.pl   Thu Sep 27 15:05:22 2007
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/awstats.pl        Thu Sep 27 13:50:38 2007
@@ -28,8 +30,9 @@
 use vars qw/
 $DEBUGFORCED $NBOFLINESFORBENCHMARK $FRAMEWIDTH $NBOFLASTUPDATELOOKUPTOSAVE
 $LIMITFLUSH $NEWDAYVISITTIMEOUT $VISITTIMEOUT $NOTSORTEDRECORDTOLERANCE
-$WIDTHCOLICON $TOOLTIPON
+$WIDTHCOLICON $WIDTHHIT $WIDTHPAGE $WIDTHBANDWIDTH $WIDTHFULLDATE $WIDTHPARCENT $WIDTHYESNO $WIDTHBROWSER $WIDTHOS $TOOLTIPON
 $lastyearbeforeupdate $lastmonthbeforeupdate $lastdaybeforeupdate $lasthourbeforeupdate $lastdatebeforeupdate
+$endtag $OptionSelect
 /;
 $DEBUGFORCED=0;                                                # Force debug level to log lesser level into debug.log file (Keep this value to 0)
 $NBOFLINESFORBENCHMARK=8192;           # Benchmark info are printing every NBOFLINESFORBENCHMARK lines (Must be a power of 2)
@@ -40,7 +43,16 @@
 $VISITTIMEOUT=10000;                           # Lapse of time to consider a page load as a new visit. 10000 = 1 hour (Default = 10000)
 $NOTSORTEDRECORDTOLERANCE=20000;       # Lapse of time to accept a record if not in correct order. 20000 = 2 hour (Default = 20000)
 $WIDTHCOLICON=32;
+$WIDTHHIT=70;
+$WIDTHPAGE=70;
+$WIDTHBANDWIDTH=80;
+$WIDTHFULLDATE=160;
+$WIDTHPARCENT=80;
+$WIDTHYESNO=50;
+$WIDTHBROWSER=160;
+$WIDTHOS=90;
 $TOOLTIPON=0;                                                  # Tooltips plugin loaded
+$endtag=">";
 # ----- Running variables -----
 use vars qw/
 $DIR $PROG $Extension
optionタグのselected属性
 HTML 4.01では、<option selected>
XHTML 1.0 Transitionalでは、<option selected="selected"> としなければならないので、上記で同じく変数化しました。
言語コードをjaに
jpでも文句はいわれないようなんですが、対応表もあるようなので逆引きを掛けてみました。
@@ -104,6 +116,7 @@
 $DNSLastUpdateCacheFile
 $MiscTrackerUrl
 $Lang
+$LangHTML
 $MaxRowsInHTMLOutput
 $MaxLengthOfShownURL
 $MaxLengthOfStoredURL
@@ -583,17 +602,17 @@
                if ($BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml') {
                        if ($PageCode) { print "<?xml version=\"1.0\" encoding=\"$PageCode\"?>\n"; }
                        else { print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"; };
-            if ($FrameName ne 'index') { print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";  }
+            if ($FrameName ne 'index') { print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";  }
                      else { print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n"; }
-                     print "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"$Lang\">\n";
+                     print "<html lang=\"$LangHTML\" xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"$LangHTML\">\n";
               } else {
                      if ($FrameName ne 'index') { print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";  }
                      else { print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n\n"; }
-                     print "<html lang='$Lang'".($PageDir?" dir='rtl'":"").">\n";
+                     print "<html lang='$LangHTML'".($PageDir?" dir='rtl'":"").">\n";
               }
               print "<head>\n";

-        my $endtag='>';
+        $endtag='>';
         if ($BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml') { $endtag=' />'; }

                # Affiche tag meta generator
@@ -5815,6 +5815,9 @@
        if ($Debug) { debug(" No language defined or available. Will use Lang=en",1); }
        $Lang='en';
 }
+foreach (keys %LangBrowserToLangAwstats) {
+       if ($Lang eq $LangBrowserToLangAwstats{$_}) { $LangHTML = $_; }   #convert Lang to LangHTML
+}

 # Check and correct bad parameters
 &Check_Config();
bgcolorは薦められない属性です
スタイルシートに変更しました。また、valign属性も薦められない属性なのでスタイルシートにしました。
@@ -9137,33 +9222,32 @@
                                # Average row
                                # TODO
                                # Total row
-                               print "<tr><td bgcolor=\"#$color_TableBGRowTitle\">$Message[102]</td>";
-                               if ($ShowMonthStats =~ /U/i) { print "<td bgcolor=\"#$color_TableBGRowTitle\">$total_u</td>"; }
-                               if ($ShowMonthStats =~ /V/i) { print "<td bgcolor=\"#$color_TableBGRowTitle\">$total_v</td>"; }
-                               if ($ShowMonthStats =~ /P/i) { print "<td bgcolor=\"#$color_TableBGRowTitle\">$total_p</td>"; }
-                               if ($ShowMonthStats =~ /H/i) { print "<td bgcolor=\"#$color_TableBGRowTitle\">$total_h</td>"; }
-                               if ($ShowMonthStats =~ /B/i) { print "<td bgcolor=\"#$color_TableBGRowTitle\">".Format_Bytes($total_k)."</td>"; }
+                               print "<tr><td class=\"colortab\">$Message[102]</td>";
+                               if ($ShowMonthStats =~ /U/i) { print "<td class=\"colortab\">$total_u</td>"; }
+                               if ($ShowMonthStats =~ /V/i) { print "<td class=\"colortab\">$total_v</td>"; }
+                               if ($ShowMonthStats =~ /P/i) { print "<td class=\"colortab\">$total_p</td>"; }
+                               if ($ShowMonthStats =~ /H/i) { print "<td class=\"colortab\">$total_h</td>"; }
+                               if ($ShowMonthStats =~ /B/i) { print "<td class=\"colortab\">".Format_Bytes($total_k)."</td>"; }
                                print "</tr>\n";
-                               print "</table>\n<br />\n";
+                               print "</table>\n";
                        }

-                       print "</center>\n";
                        print "</td></tr>\n";
                        &tab_end();
                }

-               print "\n<a name=\"when\">&nbsp;</a>\n\n";
+#              print "\n<a name=\"WHEN\" id=\"WHEN\">&nbsp;</a>\n\n";

                # BY DAY OF MONTH
                #---------------------------------------------------------------------
                if ($ShowDaysOfMonthStats) {
                        if ($Debug) { debug("ShowDaysOfMonthStats",2); }
-                       print "$Center<a name=\"daysofmonth\"> </a><br />\n";
+#                      print "$Center<a name=\"DAYSOFMONTH\" id=\"DAYSOFMONTH\"> </a><br$endtag\n";
                        my $title="$Message[138]";
-                       &tab_head("$title",0,0,'daysofmonth');
+                       &tab_head("$title",0,0,'DAYSOFMONTH');
                        print "<tr>";
                        print "<td align=\"center\">\n";
-                       print "<center>\n";

                        my $NewLinkParams=${QueryString};
                        $NewLinkParams =~ s/(^|&|&amp;)update(=\w*|$)//i;
--- C:\awstats-6.7/wwwroot/css/awstats_bw.css   Wed Feb 08 23:26:18 2006
+++ C:\AWStats67t_Jpn/wwwroot/css/awstats_bw.css        Sat Dec 30 13:30:02 2006
@@ -10,7 +10,7 @@
        border-right-width: 0px; 
        border-bottom-width: 0px;
 }
-.aws_formfield { font: 13px verdana, arial, helvetica; }
+.aws_formfield { font: 13px verdana, arial, helvetica, sans-serif; }
 .aws_button {
        font-family: arial,verdana,helvetica, sans-serif;
        font-size: 12px;
@@ -27,5 +27,20 @@
 a:link    { color: #001133; text-decoration: none; }
 a:visited { color: #001133; text-decoration: none; }
 a:hover   { color: #444444; text-decoration: underline; }
-div { font: 12px arial,verdana,helvetica; text-align:justify; }
-.ctooltip { position:absolute; top:0px; left:0px; z-index:2; width:380; visibility:hidden; font: 8pt MS Comic Sans,arial,sans-serif; background-color: #EEEEEE; padding: 8px; border: 1px solid black; }
\ No newline at end of file
+div { font: 12px arial,verdana,helvetica,sans-serif; text-align:justify; }
+.ctooltip { position:absolute; top:0px; left:0px; z-index:2; width:380px; visibility:hidden; font: 8pt MS Comic Sans,arial,sans-serif; background-color: #EEEEEE; padding: 8px; border: 1px solid black; }
+img {border-width: 0em}
+.bottom {vertical-align:bottom;}
+table {table-layout:fixed}
+.currentday { font-weight: bold; }
+.colortab  { background-color: #ECECEC}
+.colore  { background-color: #CEC2E8}
+.colorh  { background-color: #66DDEE}
+.colork  { background-color: #2EA495}
+.colorp  { background-color: #4477DD}
+.colors  { background-color: #8888DD}
+.coloru  { background-color: #FFAA66}
+.colorv  { background-color: #F4F090}
+.colorweekend  { background-color: #EAEAEA}
+.colorx  { background-color: #C1B2E2}
+.bottom {vertical-align:bottom;}
二重のテーブルにするよりcaptionにすべきでしょう
@@ -740,19 +714,21 @@
        my $tooltipnb=shift;
        my $width=shift||70;
        my $class=shift;
-       if ($width == 70 && $QueryString =~ /buildpdf/i) { print "<table class=\"aws_border\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"800\">\n"; }
-       else { print "<table class=\"aws_border\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">\n"; }
-
+       my $title1;
+       if ($class eq "month") {
+              if ($MonthUsed == 0) { $MonthUsed ++; }
+              else { $class = $class . "$MonthUsed"; }
+       }
+       $title =~ /([^ ]+)([.]*)/;
+       $title1 = "$1";
+       if ($width == 70 && $QueryString =~ /buildpdf/i) { print "<table class=\"aws_data\" border=\"1\" cellpadding=\"2\" cellspacing=\"0\" width=\"796\" summary=\"$title1\" id=\"$class\">\n"; }
+       else { print "<table class=\"aws_data\" border=\"1\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\" summary=\"$title1\" id=\"$class\">\n"; }
        if ($tooltipnb) {
-              print "<tr><td class=\"aws_title\" width=\"$width%\"".Tooltip($tooltipnb,$tooltipnb).">$title </td>";
+              print "<caption class=\"aws_title\"".Tooltip($tooltipnb,$tooltipnb).">$title</caption>\n";
        }
        else {
-              print "<tr><td class=\"aws_title\" width=\"$width%\">$title </td>";
+              print "<caption class=\"aws_title\">$title</caption>\n";
        }
-       print "<td class=\"aws_blank\">&nbsp;</td></tr>\n";
-       print "<tr><td colspan=\"2\">\n";
-       if ($width == 70 && $QueryString =~ /buildpdf/i) { print "<table class=\"aws_data\" border=\"1\" bordercolor=\"#$color_TableBorder\" cellpadding=\"2\" cellspacing=\"0\" width=\"796\">\n"; }
-       else { print "<table class=\"aws_data\" border=\"1\" bordercolor=\"#$color_TableBorder\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">\n"; }
 }

 #------------------------------------------------------------------------------
&、>、<のエスケープ
 XHTMLの場合のみエスケープしているのですが、HTML 4.01でも必要です。
@@ -4347,7 +4340,7 @@
 sub XMLEncodeForHisto {
        my $string = shift;
     $string =~ s/\s/%20/g;
-       if ($BuildHistoryFormat ne 'xml') { return $string; }
+#       if ($BuildHistoryFormat ne 'xml') { return $string; }
        $string =~ s/&/&amp;/g;
        $string =~ s/</&lt;/g;
        $string =~ s/>/&gt;/g;
target属性は薦められない属性です
 フレームも使えません。
@@ -4514,7 +4507,7 @@
        $NewLinkParams =~ s/(&amp;|&)+/&amp;/i;
        $NewLinkParams =~ s/^&amp;//; $NewLinkParams =~ s/&amp;$//;
                if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&amp;"; }
-               if ($FrameName eq 'mainright') { $NewLinkTarget=" target=\"_parent\""; }
+               if ($FrameName eq 'mainright') { $NewLinkTarget=""; }
        }
        else {
                $NewLinkParams=($SiteConfig?"config=$SiteConfig&amp;":"")."year=$YearRequired&amp;month=$MonthRequired&amp;";
@@ -4987,14 +4986,14 @@
                my $newkey=CleanXSS($url);
                if ($LogType eq 'W' || $LogType eq 'S') { # Web or streaming log file
                        if ($newkey =~ /^http(s|):/i) { # URL seems to be extracted from a proxy log file
-                               print "<a href=\"".XMLEncode("$newkey")."\" target=\"url\">".XMLEncode($nompage)."</a>";
+                               print "<a href=\"".XMLEncode("$newkey")."\">".XMLEncode($nompage)."</a>";
                        }
                        elsif ($newkey =~ /^\//) { # URL seems to be an url extracted from a web or wap server log file
                                $newkey =~ s/^\/$SiteDomain//i;
                                # Define urlprot
                                my $urlprot='http';
                                if ($UseHTTPSLinkForUrl && $newkey =~ /^$UseHTTPSLinkForUrl/) { $urlprot='https'; }
-                               print "<a href=\"".XMLEncode("$urlprot://$SiteDomain$newkey\"")." target=\"url\">".XMLEncode($nompage)."</a>";
+                               print "<a href=\"".XMLEncode("$urlprot://$SiteDomain$newkey")."\">".XMLEncode($nompage)."</a>";
                        }
                        else {
                                print XMLEncode($nompage);
@@ -7608,10 +7620,10 @@
        $NewLinkParams =~ s/(^|&|&amp;)staticlinks(=\w*|$)//i;
        $NewLinkParams =~ s/(^|&|&amp;)framename=[^&]*//i;
        my $NewLinkTarget='';
-       if ($DetailedReportsOnNewWindows) { $NewLinkTarget=" target=\"awstatsbis\""; }
+       if ($DetailedReportsOnNewWindows) { $NewLinkTarget=""; }
        if (($FrameName eq 'mainleft' || $FrameName eq 'mainright') && $DetailedReportsOnNewWindows < 2) {
                $NewLinkParams.="&framename=mainright";
-               $NewLinkTarget=" target=\"mainright\"";
+               $NewLinkTarget="";
        }
        $NewLinkParams =~ s/(&amp;|&)+/&amp;/i;
        $NewLinkParams =~ s/^&amp;//; $NewLinkParams =~ s/&amp;$//;
imgにはheight属性とwidth属性を指定しましょう
colタグに指定してみました。
@@ -4528,7 +4521,7 @@
                        my %lngtitle=('en','English','fr','French','de','German','it','Italian','nl','Dutch','es','Spanish');
                        my $lngtitle=($lngtitle{$lng}?$lngtitle{$lng}:$lng);
                        my $flag=($LangAWStatsToFlagAwstats{$lng}?$LangAWStatsToFlagAwstats{$lng}:$lng);
-                       print "<a href=\"".XMLEncode("$AWScript?${NewLinkParams}lang=$lng")."\"$NewLinkTarget><img src=\"$DirIcons\/flags\/$flag.png\" height=\"14\" border=\"0\"".AltTitle("$lngtitle")." /></a>&nbsp;\n";
+                       print "<a href=\"".XMLEncode("$AWScript?${NewLinkParams}lang=$lng")."\"$NewLinkTarget><img src=\"$DirIcons\/flags\/$flag.png\" height=\"14\" width=\"14\"".AltTitle("$lngtitle")."$endtag</a>&nbsp;\n";
                }
        }
 }
@@ -8574,13 +8639,13 @@
                        if ($total_h) { $p=int($_os_h{$key}/$total_h*1000)/10; $p="$p %"; }
                        print "<tr>";
                        if ($key eq 'Unknown') {
-                               print "<td".($count?"":" width=\"$WIDTHCOLICON\"")."><img src=\"$DirIcons\/browser\/unknown.png\"".AltTitle("")." /></td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td>";
+                               print "<td><img width=\"14\" height=\"14\" src=\"$DirIcons\/browser\/unknown.png\"".AltTitle("unknown")."$endtag</td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td>";
                        }
                        else {
                                my $keywithoutcumul=$key; $keywithoutcumul =~ s/cumul$//i;
                                my $libos=$OSHashLib{$keywithoutcumul}||$keywithoutcumul;
                                my $nameicon=$keywithoutcumul; $nameicon =~ s/[^\w]//g;
-                               print "<td".($count?"":" width=\"$WIDTHCOLICON\"")."><img src=\"$DirIcons\/os\/$nameicon.png\"".AltTitle("")." /></td><td class=\"aws\">$libos</td>";
+                               print "<td><img width=\"14\" height=\"14\" src=\"$DirIcons\/os\/$nameicon.png\"".AltTitle("$nameicon")."$endtag</td><td class=\"aws\">$libos</td>";
                        }
                        my $bredde_h=0;
                        if ($max_h > 0) { $bredde_h=int($BarWidth*($_os_h{$key}||0)/$max_h)+1; }
@@ -8635,16 +8701,16 @@
                                        my $p='&nbsp;';
                                        if ($total_h) { $p=int($_browser_h{$key}/$total_h*1000)/10; $p="$p %"; }
                                        print "<tr>";
-                                       print "<td".($count?"":" width=\"$WIDTHCOLICON\"")."><img src=\"$DirIcons\/browser\/$family.png\"".AltTitle("")." /></td>";
+                                       print "<td><img src=\"$DirIcons\/browser\/$family.png\" width=\"14\" height=\"14\"".AltTitle("$family")."$endtag</td>";
                                        print "<td class=\"aws\">".ucfirst($family)." ".($ver?"$ver":"?")."</td>";
@@ -8667,13 +8733,13 @@
                        if ($total_h) { $p=int($_browser_h{$key}/$total_h*1000)/10; $p="$p %"; }
                        print "<tr>";
                        if ($key eq 'Unknown') {
-                               print "<td".($count?"":" width=\"$WIDTHCOLICON\"")."><img src=\"$DirIcons\/browser\/unknown.png\"".AltTitle("")." /></td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td><td width=\"80\">?</td>";
+                               print "<td><img src=\"$DirIcons\/browser\/unknown.png\" width=\"14\" height=\"14\"".AltTitle("unknown")."$endtag</td><td class=\"aws\"><span style=\"color: #$color_other\">$Message[0]</span></td><td>?</td>";
                        }
                        else {
                                my $keywithoutcumul=$key; $keywithoutcumul =~ s/cumul$//i;
                                my $libbrowser=$BrowsersHashIDLib{$keywithoutcumul}||$keywithoutcumul;
                                my $nameicon=$BrowsersHashIcon{$keywithoutcumul}||"notavailable";
-                               print "<td".($count?"":" width=\"$WIDTHCOLICON\"")."><img src=\"$DirIcons\/browser\/$nameicon.png\"".AltTitle("")." /></td><td class=\"aws\">$libbrowser</td><td>".($BrowsersHereAreGrabbers{$key}?"<b>$Message[112]</b>":"$Message[113]")."</td>";
+                               print "<td><img src=\"$DirIcons\/browser\/$nameicon.png\" width=\"14\" height=\"14\"".AltTitle("$nameicon")."$endtag</td><td class=\"aws\">$libbrowser</td><td>".($BrowsersHereAreGrabbers{$key}?"<strong>$Message[112]</strong>":"$Message[113]")."</td>";
                        }
                        my $bredde_h=0;
                        if ($max_h > 0) { $bredde_h=int($BarWidth*($_browser_h{$key}||0)/$max_h)+1; }
@@ -9547,23 +9643,28 @@
                                        my $hrs=($ix>=12?$ix-12:$ix);
                                        my $hre=($ix>=12?$ix-11:$ix+1);
                                        my $apm=($ix>=12?"pm":"am");
-                                       print "<td><img src=\"$DirIcons\/clock\/hr$hre.png\" width=\"10\" alt=\"$hrs:00 - $hre:00 $apm\" /></td>\n";
+                                       print "<td><img src=\"$DirIcons\/clock\/hr$hre.png\" width=\"10\" height=\"10\" alt=\"$hrs:00 - $hre:00 $apm\"$endtag</td>\n";
                                }
                                print "</tr>\n";
                                print "</table>\n";
                        }
imgにはalt属性が必要です
@@ -8551,7 +8616,7 @@
                        print "<td>$_os_h{$key}</td><td>$p</td>";
                        print "<td class=\"aws\">";
                        # alt and title are not provided to reduce page size
-                       if ($ShowOSStats) { print "<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\" /><br />"; }
+                       if ($ShowOSStats) { print "<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\"".AltTitle("$bredde_h")."$endtag"; }
                             print "</td>";
                        print "</tr>\n";
                }
@@ -8588,7 +8653,7 @@
                        print "<td>$_browser_h{$key}</td><td>$p</td>";
                        print "<td class=\"aws\">";
                        # alt and title are not provided to reduce page size
-                       if ($ShowBrowsersStats) { print "<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\" /><br />"; }
+                       if ($ShowBrowsersStats) { print "<img src=\"$DirIcons\/other\/$BarPng{'hh'}\" width=\"$bredde_h\" height=\"5\"".AltTitle("$bredde_h")."$endtag"; }
                        print "</td>";
                        print "</tr>\n";
                }
tdのheight属性とwidth属性は薦められない属性です
@@ -5311,7 +5310,7 @@
        if (! $linetitle) { return; }
     # At least one entry in menu for this category, we can show categpry and entries
        my $WIDTHMENU1=($FrameName eq 'mainleft'?$FRAMEWIDTH:150);
-       print "<tr><td class=\"awsm\" width=\"$WIDTHMENU1\"".($frame?"":" valign=\"top\"").">".($categicon?"<img src=\"$DirIcons/other/$categicon\" />&nbsp;":"")."<b>$categtext:</b></td>\n";
+       print "<tr><td class=\"awsm\"".($frame?"":" valign=\"top\"").">".($categicon?"<img src=\"$DirIcons/other/$categicon\" />&nbsp;":"")."<strong>$categtext:</strong></td>\n";
        print ($frame?"</tr>\n":"<td class=\"awsm\">");
     foreach my $key (sort { $menu->{$a} <=> $menu->{$b} } keys %$menu) {
        if ($menu->{$key}==0) { next; }
td内に空白文字しかありません
@@ -5367,13 +5367,13 @@
                if ($max_k > 0) { $bredde_k=int($BarWidth*$_emails_k{$key}/$max_k)+1; }
                print "<tr>";
                my $direction=IsLocalEMail($key);
-               if ($direction > 0) { print "<td class=\"aws\">$newkey</td><td>-></td><td>&nbsp;</td>"; }
+               if ($direction > 0) { print "<td class=\"aws\">$newkey</td><td>-></td><td></td>"; }
                if ($direction == 0) { print "<td colspan=\"3\"><span style=\"color: #$color_other\">$newkey</span></td>"; }
-               if ($direction < 0) { print "<td class=\"aws\">&nbsp;</td><td><-</td><td>$newkey</td>"; }
+               if ($direction < 0) { print "<td class=\"aws\"></td><td><-</td><td>$newkey</td>"; }
                if ($ShowEMailSenders =~ /H/i) { print "<td>$_emails_h{$key}</td>"; }
                if ($ShowEMailSenders =~ /B/i) { print "<td>".Format_Bytes($_emails_k{$key})."</td>"; }
                if ($ShowEMailSenders =~ /M/i) { print "<td>".Format_Bytes($_emails_k{$key}/($_emails_h{$key}||1))."</td>"; }
@@ -5363,9 +5365,9 @@
        if ($rest_p > 0 || $rest_h > 0 || $rest_k > 0) {       # All other sender emails
                print "<tr><td colspan=\"3\"><span style=\"color: #$color_other\">$Message[2]</span></td>";
                if ($ShowEMailSenders =~ /H/i) { print "<td>$rest_h</td>"; }
-               if ($ShowEMailSenders =~ /B/i) { print "<td nowrap=\"nowrap\">".Format_Bytes($rest_k)."</td>"; }
-               if ($ShowEMailSenders =~ /M/i) { print "<td nowrap=\"nowrap\">".Format_Bytes($rest_k/($rest_h||1))."</td>"; }
-               if ($ShowEMailSenders =~ /L/i) { print "<td>&nbsp;</td>"; }
+               if ($ShowEMailSenders =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; }
+               if ($ShowEMailSenders =~ /M/i) { print "<td>".Format_Bytes($rest_k/($rest_h||1))."</td>"; }
+               if ($ShowEMailSenders =~ /L/i) { print "<td></td>"; }
                print "</tr>\n";
        }
        &tab_end();
@@ -5418,13 +5418,13 @@
                if ($ShowEMailReceivers =~ /L/i) { $title.=" &nbsp; - &nbsp; <a href=\"".($ENV{'GATEWAY_INTERFACE'} || !$StaticLinks?XMLEncode("$AWScript?${NewLinkParams}output=lastemailr"):"$PROG$StaticLinks.lastemailr.$StaticExt")."\"$NewLinkTarget>$Message[9]</a>"; }
        }
        &tab_head("$title",19,0,'emailreceivers');
-       print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th colspan=\"3\">$Message[132] : ".(scalar keys %_emailr_h)."</th>";
-       if ($ShowEMailReceivers =~ /H/i) { print "<th rowspan=\"2\" bgcolor=\"#$color_h\" width=\"80\"".Tooltip(4).">$Message[57]</th>"; }
-       if ($ShowEMailReceivers =~ /B/i) { print "<th rowspan=\"2\" bgcolor=\"#$color_k\" width=\"80\"".Tooltip(5).">$Message[75]</th>"; }
-       if ($ShowEMailReceivers =~ /M/i) { print "<th rowspan=\"2\" bgcolor=\"#$color_k\" width=\"80\">$Message[106]</th>"; }
+       print "<tr class=\"colortab\"><th colspan=\"3\">$Message[132] : ".(scalar keys %_emailr_h)."</th>";
+       if ($ShowEMailReceivers =~ /H/i) { print "<th rowspan=\"2\" class=\"colorh\" width=\"80\"".Tooltip(4).">$Message[57]</th>"; }
+       if ($ShowEMailReceivers =~ /B/i) { print "<th rowspan=\"2\" class=\"colork\" width=\"80\"".Tooltip(5).">$Message[75]</th>"; }
+       if ($ShowEMailReceivers =~ /M/i) { print "<th rowspan=\"2\" class=\"colork\" width=\"80\">$Message[106]</th>"; }
        if ($ShowEMailReceivers =~ /L/i) { print "<th rowspan=\"2\" width=\"120\">$Message[9]</th>"; }
        print "</tr>\n";
-       print "<tr bgcolor=\"#$color_TableBGRowTitle\"><th width=\"30%\">Local</th><th>&nbsp;</th><th width=\"30%\">External</th></tr>";
+       print "<tr class=\"colortab\"><th width=\"30%\">Local</th><td></td><th width=\"30%\">External</th></tr>";
        $total_p=$total_h=$total_k=0;
        $max_h=1; foreach (values %_emailr_h) { if ($_ > $max_h) { $max_h = $_; } }
        $max_k=1; foreach (values %_emailr_k) { if ($_ > $max_k) { $max_k = $_; } }
@@ -5440,9 +5440,9 @@
                if ($max_k > 0) { $bredde_k=int($BarWidth*$_emailr_k{$key}/$max_k)+1; }
                print "<tr>";
                my $direction=IsLocalEMail($key);
-               if ($direction > 0) { print "<td class=\"aws\">$newkey</td><td><-</td><td>&nbsp;</td>"; }
+               if ($direction > 0) { print "<td class=\"aws\">$newkey</td><td><-</td><td></td>"; }
                if ($direction == 0) { print "<td colspan=\"3\"><span style=\"color: #$color_other\">$newkey</span></td>"; }
-               if ($direction < 0) { print "<td class=\"aws\">&nbsp;</td><td>-></td><td>$newkey</td>"; }
+               if ($direction < 0) { print "<td class=\"aws\"></td><td>-></td><td>$newkey</td>"; }
                if ($ShowEMailReceivers =~ /H/i) { print "<td>$_emailr_h{$key}</td>"; }
                if ($ShowEMailReceivers =~ /B/i) { print "<td>".Format_Bytes($_emailr_k{$key})."</td>"; }
                if ($ShowEMailReceivers =~ /M/i) { print "<td>".Format_Bytes($_emailr_k{$key}/($_emailr_h{$key}||1))."</td>"; }
@@ -5459,7 +5512,7 @@
                if ($ShowEMailReceivers =~ /H/i) { print "<td>$rest_h</td>"; }
                if ($ShowEMailReceivers =~ /B/i) { print "<td>".Format_Bytes($rest_k)."</td>"; }
                if ($ShowEMailReceivers =~ /M/i) { print "<td>".Format_Bytes($rest_k/($rest_h||1))."</td>"; }
-               if ($ShowEMailReceivers =~ /L/i) { print "<td>&nbsp;</td>"; }
+               if ($ShowEMailReceivers =~ /L/i) { print "<td></td>"; }
                print "</tr>\n";
        }
        &tab_end();
<b>は物理的フォントタグです。論理的タグを使うようにしましょう
@@ -7553,9 +7565,9 @@
                # If rename and archive ok
                if ($renameok && $archiveok) {
                        if ($Debug) { debug("Purge log file"); }
-                       my $bold=($ENV{'GATEWAY_INTERFACE'}?'<b>':'');
-                       my $unbold=($ENV{'GATEWAY_INTERFACE'}?'</b>':'');
-                       my $br=($ENV{'GATEWAY_INTERFACE'}?'<br />':'');
+                       my $bold=($ENV{'GATEWAY_INTERFACE'}?'<strong>':'');
+                       my $unbold=($ENV{'GATEWAY_INTERFACE'}?'</strong>':'');
+                       my $br=($ENV{'GATEWAY_INTERFACE'}?'<br$endtag':'');
                        truncate(LOG,0) || warning("Warning: $bold$PROG$unbold couldn't purge logfile \"$bold$LogFile$unbold\".$br\nChange your logfile permissions to allow write for your web server CGI process or change PurgeLogFile=1 into PurgeLogFile=0 in configure file and think to purge sometimes manually your logfile (just after running an update process to not loose any not already processed records your log file contains).");
                }
                close(LOG);
@@ -7563,9 +7575,9 @@

        if ($DNSLookup==1 && $DNSLookupAlreadyDone) {
                # DNSLookup warning
-               my $bold=($ENV{'GATEWAY_INTERFACE'}?'<b>':'');
-               my $unbold=($ENV{'GATEWAY_INTERFACE'}?'</b>':'');
-               my $br=($ENV{'GATEWAY_INTERFACE'}?'<br />':'');
+               my $bold=($ENV{'GATEWAY_INTERFACE'}?'<strong>':'');
+               my $unbold=($ENV{'GATEWAY_INTERFACE'}?'</strong>':'');
+               my $br=($ENV{'GATEWAY_INTERFACE'}?'<br$endtag':'');
                warning("Warning: $bold$PROG$unbold has detected that some hosts names were already resolved in your logfile $bold$DNSLookupAlreadyDone$unbold.$br\nIf DNS lookup was already made by the logger (web server), you should change your setup DNSLookup=$DNSLookup into DNSLookup=0 to increase $PROG speed.");
        }
        if ($DNSLookup==1 && $NbOfNewLines) {

XHTML 1.0にあうように変更

Javascriptファイルの分離
XHTMLではコメントアウトで逃げられませんから、別ファイルにしました。定義も追加しました。
--- C:\awstats-6.7/wwwroot/cgi-bin/plugins/tooltips.pm  Thu Sep 27 11:03:58 2007
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/plugins/tooltips.pm       Sun Jan 07 00:26:46 2007
@@ -103,50 +103,17 @@
                        $doctop="document.documentElement.scrollTop";
                }

-               print <<EOF;
-
-<script language="javascript" type="text/javascript">
-function ShowTip(fArg)
-{
-       var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
-       if (tooltipOBJ != null) {
-               var tooltipLft = ($docwidth?$docwidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:$TOOLTIPWIDTH)) - 30;
-               var tooltipTop = 10;
-               if (navigator.appName == 'Netscape') {
-                       tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10);
-                       tooltipOBJ.style.top = tooltipTop+"px";
-                       tooltipOBJ.style.left = tooltipLft+"px";
-               }
-               else {
-                       tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10);
-                       tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10);
-EOF
                # Seul IE en HTML a besoin de code supplementaire. IE en xhtml est OK
                if ($BuildReportFormat ne 'xhtml' && $BuildReportFormat ne 'xml') {
 print <<EOF;
-                       if ((event.clientX > tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) {
-                               tooltipTop = ($doctop?$doctop:document.body.offsetTop) + event.clientY + 20;
-               }
+<script language="javascript" type="text/javascript" src="$DirJs/tooltiph.js"></script>
 EOF
-               }
+               } else {
 print <<EOF;
-                       tooltipOBJ.style.left = tooltipLft;
-                       tooltipOBJ.style.top = tooltipTop;
-               }
-               tooltipOBJ.style.visibility = "visible";
-       }
-}
-function HideTip(fArg)
-{
-       var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
-       if (tooltipOBJ != null) {
-               tooltipOBJ.style.visibility = "hidden";
-       }
-}
-</script>
+<script language="javascript" type="text/javascript" src="$DirJs/tooltipx.js"></script>

 EOF
-
+               }
        }
        return 1;
        # ----->
@@ -198,6 +165,7 @@
                        s/#RobotArray#/$aws_NbOfRobots/;
                        s/#WormsArray#/$aws_NbOfWorms/;
                        s/#SearchEnginesArray#/$aws_NbOfSearchEngines/;
+                       s/#br#/<br$endtag/;
                        print "$_";
                }
        }
transitionalに変更
XHTML 1.0 Strictになっていたのですが、大変そうなのでTransitionalにしました。
@@ -583,17 +602,17 @@
               if ($BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml') {
                      if ($PageCode) { print "<?xml version=\"1.0\" encoding=\"$PageCode\"?>\n"; }
                      else { print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"; };
-            if ($FrameName ne 'index') { print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";  }
+            if ($FrameName ne 'index') { print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";  }
                      else { print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n"; }
idとname属性を同時に指定しましょう
また、指定値は全部大文字にしました。
@@ -7691,44 +7703,55 @@
                $NewLinkParams =~ s/(&amp;|&)+/&amp;/i;
                $NewLinkParams =~ s/^&amp;//; $NewLinkParams =~ s/&amp;$//;
                        my $NewLinkTarget='';
-                       if ($FrameName eq 'mainright') { $NewLinkTarget=" target=\"_parent\""; }
-                       print "<form name=\"FormDateFilter\" action=\"".XMLEncode("$AWScript?${NewLinkParams}")."\" style=\"padding: 0px 0px 0px 0px; margin-top: 0\"$NewLinkTarget>\n";
+                       if ($FrameName eq 'mainright') { $NewLinkTarget=""; }
+                       print "<form name=\"FORMDATEFILTER\" id=\"FORMDATEFILTER\" action=\"".XMLEncode("$AWScript?${NewLinkParams}")."\" style=\"padding: 0px 0px 0px 0px; margin-top: 0\"$NewLinkTarget>\n";
                }

CSS 2.0にあうように変更

一般的なフォント名称
フォントの羅列の最後には一般的なフォント名称を入れておくことが推奨されています。
--- C:\awstats-6.7/wwwroot/css/awstats_bw.css   Wed Feb 08 23:26:18 2006
+++ C:\AWStats67t_Jpn/wwwroot/css/awstats_bw.css        Sat Dec 30 13:30:02 2006
@@ -10,7 +10,7 @@
        border-right-width: 0px;
        border-bottom-width: 0px;
 }
-.aws_formfield { font: 13px verdana, arial, helvetica; }
+.aws_formfield { font: 13px verdana, arial, helvetica, sans-serif; }
 .aws_button {
        font-family: arial,verdana,helvetica, sans-serif;
        font-size: 12px;

ブラウザの追加

Another HTML Lint等を追加
wdg_validatorがあったので真似て入れてみました。
--- C:\awstats-6.7/wwwroot/cgi-bin/lib/browsers.pm      Thu Sep 27 13:37:34 2007
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/lib/browsers.pm   Thu Sep 27 13:28:02 2007
@@ -33,6 +34,16 @@
 # Note: Regex IDs are in lower case and ' ' and '+' are changed into '_'
 #-------------------------------------------------------
 @BrowsersSearchIDOrder = (
+# Japanese Browsers
+# Added by Ryu 2007.01.06
+'another_html\-lint',
+'avant browser',
+'sleipnir',
+'lunascape',
+'j\-phone',
+'softbank',
+'kddi',
+'vodafone',
 # Most frequent standard web browsers are first in this list (except msie, netscape and firefox)
 'firebird',
 'go!zilla',
@@ -115,6 +126,14 @@
 'xaudio',
 'xine',
 'xmms',
+# RSS Readers added by Makoto Takahashi
+'fenrir\_headline\-reader',
+'goo rss reader',
+'headline\-reader',
+'movabletype',
+'mt\-rssfeed',
+'rssbar',
+'webryreader',
 # RSS Readers
 'abilon',
 'aggrevator',
@@ -213,6 +232,16 @@
 # List of browser's name ('browser id in lower case', 'browser text')
 #---------------------------------------------------------------
 %BrowsersHashIDLib = (
+# Japanese Browsers
+# Added by Ryu 2007.01.06
+'another_html\-lint','Another HTML-lint',
+'avant_browser','Avant Browser',
+'sleipnir','Sleipnir',
+'lunascape','Lunascape',
+'j\-phone','Vodafone (Non-3G)',
+'softbank','Softbank (3G)',
+'kddi','au by KDDI (HTML Compatible)',
+'vodafone','Vodafone (3G)',
 # Common web browsers text
 'msie','MS Internet Explorer',
 'netscape','Netscape',
@@ -300,6 +329,14 @@
 'xaudio','Some XAudio Engine based MPEG player (media player)',
 'xine','Xine, a free multimedia player (media player)',
 'xmms','XMMS (media player)',
+# RSS Readers added by Makoto Takahashi
+'fenrir\_headline\-reader','Fenrir Headline-Reader Plugin',
+'goo_rss_reader','Goo_RSS_Reader',
+'headline\-reader', 'Headline-Reader (RSS Reader)',
+'movabletype','MovableType (RSS Reader)',
+'mt\-rssfeed','mt-rssfeed (RSS Reader)',
+'rssbar','RssBar (RSS Reader)',
+'webryreader','WebryReader (RSS Reader)',
 # RSS Readers
 'abilon','Abilon (RSS Reader)',
 'aggrevator', 'Aggrevator (RSS Reader)',
@@ -418,6 +455,15 @@
 # file for this browser.
 #---------------------------------------------------------------------------
 %BrowsersHashIcon = (
+# Japanese Browsers
+# Added by Ryu 2007.01.06
+'avant_browser','avant',
+'sleipnir','sleipnir',
+'lunascape','lunascape',
+'j\-phone','vodafone',
+'softbank','softbank',
+'kddi','au',
+'vodafone','vodafone',
 # Standard web browsers
 'msie','msie',
 'netscape','netscape',
@@ -513,6 +559,15 @@
 # Anonymous Proxy Browsers (can be used as grabbers as well...)
 'cjb\.net','cjbnet',
 'ossproxy','ossproxy',
+# RSS Readers added by Makoto Takahashi
+'applesyndication', 'rss',
+'fenrir\_headline\-reader','rss',
+'goo_rss_reader', 'rss',
+'headline\-reader', 'rss',
+'movabletype', 'rss',
+'mt\-rssfeed','rss',
+'rssbar','rss',
+'webryreader','rss',
 # RSS Readers
 'abilon', 'abilon',
 'aggrevator', 'rss',

ロボットの追加

検索に来たロボットを追加
検索が来ていたので入れてみました。
--- C:\awstats-6.7/wwwroot/cgi-bin/lib/robots.pm        Thu Sep 27 13:53:04 2007
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/lib/robots.pm     Thu Sep 27 15:19:04 2007
@@ -337,6 +338,117 @@
 # Note: Robots IDs are in lower case, ' ' and '+' are changed into '_' and are quoted.
 #-------------------------------------------------------
 @RobotsSearchIDOrder_list1 = (
+# Japanese Robots+alpha
+# Added by Ryu 2007.01.06
+'adsenserbot',
+'amfibibot',
+'becomejpbot',
+'bibliotheca',
+'bookmark\srenewal\scheck\sagent',
+'cazoodlebot',
+'coast\swebmaster',
+'cococ',
+'comaneci_bot',
+'crooz',
+'daumoa\/',
+'depspid\/',
+'diffbrowser\/',
+'ec_favorite',
+'empas_robot',
+'e\-societyrobot',
+'everyfeed-spider',
+'faedit\/',
+'fast\smetaweb\scrawler',
+'fastladder\sfeedfetcher',
+'feed24\.com',
+'feedbringer',
+'feedchecker',
+'feed\sparser',
+'feedpath',
+'feedshow',
+'fly\/',
+'freshreader',
+'g10\sreader',
+'goorssreader',
+'grub\-client',
+'gsa\-crawler',
+'hatena',
+'headline\-reader',
+'hobbit bbtest\-net',
+'html\sget',
+'hyperestraier',
+'hyperrobot',
+'ilissurf',
+'indexpert',
+'internal\sdummy\sconnection',
+'kb\.rmail',
+'keywalkerbot',
+'klsh\-pageget\/',
+'kotoha\.co\.jp',
+'libghttp\/',
+'livedoorcheckers',
+'livedoor feedfetcher',
+'livedoor\sscreenshot\/',
+'livedoor\shttpclient\/',
+'maldive\scrawler',
+'masagool',
+'mfcrawler',
+'mogimogi\/',
+'metalogger',
+'mqbot',
+'multicrawler',
+'naver',
+'niyonizer',
+'ndl\-japan\-research\-robot',
+'netresearchserver',
+'netvibes',
+'newsalloy',
+'^obot',
+'onetszukaj',
+'openbot',
+'oracle\ssecure\senterprise\ssearch',
+'page_verifier',
+'pear\shttp_request\sclass',
+'paipo\-bot',
+'pingdom\sgigrib',
+'pipeliner',
+'playon\srss\sreader\/',
+'pockey\-gethtml',
+'protopage\/',
+'research\-spider',
+'search\-hp_bot',
+'seo\.cug\.net link checker',
+'shopwiki\/',
+'snapbot',
+'snoopy v',
+'sogou\sweb\sspider',
+'sonar\/', #Added by toshi 2006.04.09
+'sonarplus\/',
+'spamrobot@126\.com',
+'sproose\/',
+'stackrambler',
+'strategic board bot',
+'statbot@gmail\.com',
+'technoratisnoop',
+'techrigybot',
+'trackback\/',
+'twiceler\-',
+'umn\/',
+'useragent',
+'w3crobot',
+'wadaino\.jp\-crawler',
+'webauto',
+'webaroobot',
+'webdigity\swhois\sservice',
+'website\sexplorer',
+'wish\-la',
+'wish\-project',
+'wiwi',
+'wwwster\/',
+'yodaobot\/',
+'yeti\/',
+'zao\-crawler',
+'^-$',
 # Common robots (In robot file)
 'appie',
 'architext',
@@ -472,6 +584,7 @@
 'htmlgobble',
 'hyperdecontextualizer',
 'iajabot',
+'icc\-crawler',
 'iconoclast',
 'ilse',
 'imagelock',
@@ -728,7 +841,7 @@
 'deepindex',
 'dipsie\.bot',
 'dnsgroup',
-'docomo',
+#'docomo',
 'domainchecker',
 'domainsdb\.net',
 'dulance',
@@ -929,7 +1042,7 @@
 'ultraseek',
 'unchaos\sbot\shybrid\sweb\ssearch\sengine',
 'unido\-bot',
-'up\.browser',
+#'up\.browser',
 'updated',
 'ustc\-semantic\-group',
 'vagabondo\-wap',
@@ -978,14 +1091,15 @@
 'ng\/1\.', # put at end to avoid false positive
 'ng\/2\.', # put at end to avoid false positive
 'exabot',  # put at end to avoid false positive
-'java'   # put at end to avoid false positive
+'java',   # put at end to avoid false positive
+'uri::fetch'
 );
 @RobotsSearchIDOrder_listgen = (
 # Generic robot
 'robot',
 'crawl',
 'spider',
-'\wbot[\/\-]'
+'bot[\/\-]'
 );


@@ -994,10 +1108,121 @@
 # List of robots names ('robot id','robot clear text')
 #-------------------------------------------------------
 %RobotsHashIDLib   = (
+# Japanese Robots+alpha
+# Added by Ryu 2006.03.15
+'adsenserbot','<a href="http://adsenser.jp">AdSenserBot</a>',
+'amfibibot','Amfibibot',
+'becomejpbot','<a href="http://www.become.co.jp/site_owner.html">BecomeJPBot</a>',
+'bibliotheca','<a href="http://www.hitachi.co.jp/Prod/comp/soft1/textsearch/product/component/bib21/">Bibliotheca</a>',
+'bookmark\srenewal\scheck\sagent','<a href="http://www.bookmark.ne.jp">Bookmark Renewal Check Agent</a>',
+'cazoodlebot','<a href="http://www.cazoodle.com">CazoodleBot</a>',
+'coast\swebmaster','COAST WebMaster',
+'cococ','<a href="http://am13.net/wiki/index.php?cococ">cococ</a>',
+'comaneci_bot','<a href="http://help.i-know.jp/?crawler">Comaneci bot</a>',
+'crooz','DoCoMo CROOZ',
+'daumoa\/','<a href="http://www.daum.net">DAUMOA</a>',
+'depspid\/','<a href="http://about.depspid.net">DepSpid</a>',
+'diffbrowser\/','<a href="http://www010.upp.so-net.ne.jp/suede/diffbrowser.html">DiffBrowser</a>',
+'ec_favorite','eC_favorite',
+'empas_robot','EMPAS ROBOT',
+'e\-societyrobot','<a href="http://www.yama.info.waseda.ac.jp/~yamana/es/">e-SocietyRobot</a>',
+'everyfeed-spider','Everyfeed Spider',
+'faedit\/','<a href="http://www.srcw.net/wiki/index.php?FaEdit">FaEdit</a>',
+'fast\smetaweb\scrawler','<a href="http://fastsearch.com">FAST MetaWeb Crawler</a>',
+'fastladder\sfeedfetcher','<a href="http://fastladder.com">Fastladder FeedFetcher</a>',
+'feed24\.com','<a href="http://feed24.com">Feed24.com</a>',
+'feedbringer','<a href="http://feedbringer.net" title="Bot home page">FEEDBRINGER</a>',
+'feedchecker','FeedChecker',
+'feed\sparser','<a href="http://rss-search.net">Feed Parser</a>',
+'feedpath','<a href="http://feedpath.jp" title="Bot home page">Feedpath</a>',
+'feedshow','<a href="http://www.feedshow.com" title="Bot home page">Feedshow</a>',
+'fly\/','fly sinet.ad.jp',
+'freshreader','<a href="http://www.freshreader.com" title="Bot home page">FreshReader</a>',
+'g10\sreader','<a href="http://wordg10.com" title="Bot home page">G10 Reader</a>',
+'goorssreader','goo RSS Reader',
+'grub\-client','Grub Client',
+'gsa\-crawler','GSA Crawler',
+'hatena','<a href="http://a.hatena.ne.jp/help" title="Bot home page">はてなアンテナ</a>',
+'headline\-reader','Headline-Reader',
+'hobbit_bbtest\-net','<a href="http://hobbitmon.sourceforge.net" title="Bot home page">Hobbit bbtest-net</a>',
+'html\sget','HTML Get(SPAM)',
+'hyperestraier','<a href="http://hyperestraier.sourceforge.net/index.html" title="Bot home page">HyperEstraier</a>',
+'hyperrobot','HyperRobot InfoWeb',
+'ilissurf','<a href="http://software.fujitsu.com/jp/ilis_univ/surf/" title="iLisSurf - FUJITSU Japan">iLisSurf</a>',
+'indexpert','indexpert',
+'internal\sdummy\sconnection','internal dummy connection for <a href="http://httpd.apache.org/docs/2.0/mod/mod_dav.html" title="Apache モジュール mod_dav">Apache WebDAV</a>',
+'kb\.rmail','<a href="http://www.r-mail.org">kb.Rmail</a>',
+'keywalkerbot','<a href="http://www.keywalker.co.jp/crawl/bot.html">Keywalkerbot</a>',
+'klsh\-pageget\/','<a href="http://www.kondo-net.gr.jp/klsh/">KLSH-PageGet</a>',
+'kotoha\.co\.jp','コトハコ',
+'libghttp\/','libghttp(恐らくSPAM)',
+'livedoorcheckers','Livedoor Checkers',
+'livedoor_feedfetcher','<a href="http://reader.livedoor.com" title="Bot home page">livedoor FeedFetcher</a>',
+'livedoor\sscreenshot\/','<a href="http://reader.livedoor.com" title="Bot home page">livedoor ScreenShot</a>',
+'livedoor\shttpclient\/','livedoor HttpClient',
+'maldive\scrawler','Maldive crawler',
+'masagool','<a href="http://sagool.jp">MaSagool</a>',
+'metalogger','Metalogger',
+'mfcrawler','MFcrawler',
+'mogimogi\/','mogimogi',
+'mqbot','<a href="http://metaquerier.cs.uiuc.edu">MQbot</a>',
+'multicrawler','<a href="http://sw.deri.org/2006/04/multicrawler/robots.html">MultiCrawler</a>',
+'naver','NaverBot',
+'niyonizer','NIYONIZER',
+'ndl\-japan\-research\-robot','国立国会図書館',
+'netresearchserver','<a href="http://loopimprovements.com/robot.html">Net Research Server (NRS)</a>',
+'netvibes','<a href="http://www.netvibes.com" title="Bot home page">Netvibes<a>',
+'newsalloy','<a href="http://www.NewsAlloy.com" title="Bot home page">NewsAlloy<a>',
+'^obot','oBot',
+'onetszukaj','<a href="http://szukaj.onet.pl">OnetSzukaj</a>',
+'openbot','Openfind data gatherer',
+'oracle\ssecure\senterprise\ssearch','Oracle Secure Enterprise Search',
+'page_verifier','<a href="http://www.securecomputing.com/PageVerifier.cfm">page_verifier</a>',
+'pear\shttp_request\sclass','<a href="http://pear.php.net">PEAR HTTP_Request class</a>',
+'paipo\-bot','<a href="http://paipo.jp">PAIPO-Bot</a>',
+'pingdom\sgigrib','<a href="http://www.pingdom.com">Pingdom GIGRIB</a>',
+'pipeliner','PipeLine Spider',
+'playon\srss\sreader\/','<a href="http://playon.jp/rss/">PLAYON RSS READER</a>',
+'pockey\-gethtml','Pockey GetHTML',
+'protopage\/','<a href="http://www.protopage.com">Protopage</a>',
+'research-spider','research-spider',
+'search\-hp_bot','<a href="http://search-hp.com" title="Bot home page">search-hp_bot</a>',
+'seo\.cug\.net_link_checker','<a href="http://seo.cug.net">seo.cug.net link checker</a>',
+'shopwiki\/','<a href="http://www.shopwiki.com/wiki/Help:Bot">ShopWiki</a>',
+'snapbot','Snapbot',
+'snoopy_v','<a href="http://sourceforge.net/projects/snoopy/">Snoopy</a>',
+'sogou\sweb\sspider','<a href="http://www.sogou.com/docs/help/webmasters.htm#07">Sogou web spider</a>',
+'sonar\/','<a href="http://boxer.ne.jp/product_list/sonar/">Sonar Crawler</a>', #Added by toshi 2006.04.09
+'sonarplus\/','<a href="http://boxer.ne.jp/product_list/sonar_plus/">Sonar PLUS Crawler</a>',
+'spamrobot@126\.com','126.com',
+'sproose\/','<a href="http://www.sproose.com/bot.html" title="Bot home page">sproose bot</a>',
+'stackrambler','StackRambler',
+'statbot@gmail\.com','Gmail Com (Google)',
+'strategic_board_bot','<a href="http://www.strategicboard.com" title="Bot home page">Strategic Board Bot</a>',
+'technoratisnoop','TechnoratiSnoop(恐らくSPAM)',
+'techrigybot','<a href="http://www.techrigy.com" title="Bot home page">TechrigyBot</a>',
+'trackback\/','TrackBack(恐らくSPAM)',
+'twiceler\-','<a href="http://www.cuill.com/twiceler/robot.html">Twiceler</a>',
+'umn\/','<a href="http://www.nori-s.net/soft/umn/">URLマネージャ</a>',
+'useragent','USERAGENT(恐らくSPAM)',
+'w3crobot','W3CRobot',
+'wadaino\.jp\-crawler','<a href="http://wadaino.jp">話題の.jpクローラー</a>',
+'webauto','<a href="http://www.yanasoft.co.jp/webautodoc.html">WebAuto</a>',
+'webaroobot','<a href="http://www.webaroo.com/rooSiteOwners.html">Webaroo Bot</a>',
+'webdigity\swhois\sservice','<a href="http://www.webdigity.com/ws/">webdigity whois service</a>',
+'website\sexplorer','<a href="http://www.umechando.com/webex/">Website Explorer</a>',
+'wish\-la','<a href="http://wish.slis.tsukuba.ac.jp/jp/">Wish Project(wish la)</a>',
+'wish\-project','<a href="http://wish.slis.tsukuba.ac.jp/jp/">Wish Project</a>',
+'wiwi','<a href="http://wi2.jp">WiWi</a>',
+'wwwster\/','<a href="mailto:gue@cis.uni-muenchen.de">wwwster</a>',
+'yodaobot\/','YodaoBot',
+'yeti\/','Yeti',
+'zao\-crawler','Zao Crawler',
+'^-$','-(恐らくSPAM)',
 # Common robots (In robot file)
 'appie','<a href="http://www.walhello.com" title="Bot home page">Walhello appie</a>',
 'architext','ArchitextSpider',
-'jeeves','<a href="http://sp.ask.com/docs/about/tech_crawling.html" title="Bot home page">Ask</a>',
+'jeeves','<a href="http://sp.ask.com/docs/about/tech_crawling.html" title="Bot home page">AskJeeves</a>',
 'bjaaland','Bjaaland',
 'ferret','Wild Ferret Web Hopper #1, #2, #3',
 'googlebot','<a href="http://www.google.com/bot.html" title="Bot home page">Googlebot</a>',
@@ -1104,7 +1329,7 @@
 'felix','Felix IDE',
 'fetchrover','FetchRover',
 'fido','fido',
-'finnish','Hämähäkki',
+'finnish','Hämähäkki',
 'fireball','KIT-Fireball',
 'fouineur','Fouineur',
 'francoroute','Robot Francoroute',
@@ -1126,6 +1351,7 @@
 'htmlgobble','HTMLgobble',
 'hyperdecontextualizer','Hyper-Decontextualizer',
 'iajabot','iajaBot',
+'icc\-crawler','<a href="http://kc.nict.go.jp/icc/crawl-ja.html">ICC-Crawler</a>',
 'iconoclast','Popular Iconoclast',
 'ilse','Ingrid',
 'imagelock','Imagelock',
@@ -1243,11 +1469,11 @@
 'spiderbot','SpiderBot',
 'spiderline','Spiderline Crawler',
 'spiderman','SpiderMan',
-'spiderview','SpiderView(tm)',
+'spiderview','SpiderView&tm;',
 'spry','Spry Wizard Robot',
 'ssearcher','Site Searcher',
 'sqworm','<a href="http://www.websense.com" title="Bot home page (source: http://www.pgts.com.au)">Sqworm</a>',
-'suke','Suke',
+'suke','<a href="http://kensaku.org" title="Bot home page">Suke</a>',
 'sunrise','<a href="http://www.sunrisexp.com" title="Sunrise home page">Sunrise</a>',
 'suntek','suntek search engine',
 'sven','Sven',
@@ -1302,7 +1528,7 @@
 'wombat','The Web Wombat',
 'wordpress','<a href="http://wordpress.org" title="WordPress home page">WordPress</a>',
 'worm','The World Wide Web Worm',
-'wwwc','WWWC Ver 0.2.5',
+'wwwc','WWWC',
 'wz101','WebZinger',
 'xget','XGET',
 # Other robots reported by users
@@ -1360,7 +1586,7 @@
 'deepindex','<a href="http://www.deepindex.net/faq.php" title="Deepindex home page">Deepindex</a>',
 'dipsie\.bot','<a href="http://www.dipsie.com/bot/" title="Bot home page">Dipsie</a>',
 'dnsgroup','<a href="http://www.dnsgroup.com" title="DNSGroup home page">DNSGroup</a>',
-'docomo','<a href="http://www.nttdocomo.co.jp" title="DoCoMo home page">DoCoMo</a>',
+#'docomo','<a href="http://www.nttdocomo.co.jp" title="DoCoMo home page">DoCoMo</a>',
 'domainchecker','<a href="http://net-promoter.com" title="DomainChecker home page (not confirmed)">DomainChecker</a>',
 'domainsdb\.net','<a href="http://domainsdb.net" title="Bot home page">DomainsDB.net</a>',
 'dulance','<a href="http://www.dulance.com/bot.jsp" title="Bot home page">Dulance</a>',
@@ -1410,14 +1636,14 @@
 'hoowwwer','<a href="http://cosco.hiit.fi/search/hoowwwer/" title="HooWWWer home page">HooWWWer</a>',
 'hpprint','HPPrint',
 'htmlparser','<a href="http://htmlparser.sourceforge.net" title="HTMLParser home page">HTMLParser</a>',
-'html\_link\_validator','<a href="http://www.lithopssoft.com/ " title="Html_Link_Validator home page">Html_Link_Validator</a>',
+'html\_link\_validator','<a href="http://www.lithopssoft.com " title="Html_Link_Validator home page">Html_Link_Validator</a>',
 'httrack','<a href="http://www.httrack.com" title="Bot home page">HTTrack off-line browser</a>',
 'hundesuche\.com\-bot','<a href="http://www.hundesuche.com" title="Hundesuche.com-Bot home page">Hundesuche.com-Bot</a>',
 'ichiro','<a href="http://help.goo.ne.jp/door/crawlerE.html" title="Bot home page">ichiro</a>',
 'iltrovatore\-setaccio','<a href="http://www.iltrovatore.it/aiuto/motore_di_ricerca.html" title="bot@iltrovatore.it IlTrovatore-Setaccio home page">IlTrovatore-Setaccio</a>',
 'infobot','<a href="http://www.infobot.org" title="InfoBot home page">InfoBot</a>',
 'infociousbot','<a href="http://corp.infocious.com/tech_crawler.php" title="InfociousBot home page">InfociousBot</a>',
-'infomine','<a href="http://infomine.ucr.edu/useragents" title="Bot home page">INFOMINE VLCrawler</a>',
+'infomine','<a href="http://infomine.ucr.edu/useragents/" title="Bot home page">INFOMINE VLCrawler</a>',
 'insurancobot','<a href="http://www.fastspywareremoval.com" title="InsurancoBot home page">InsurancoBot</a>',
 'internet\_ninja','<a href="http://www.dti.ne.jp/  " title="Internet_Ninja home page">Internet_Ninja </a>',
 'internetarchive','<a href="http://lucene.apache.org/nutch/bot.html " title="InternetArchive home page">InternetArchive</a>',
@@ -1450,7 +1676,7 @@
 'livejournal\.com', 'LiveJournal.com',
 'magpierss', 'MagpieRSS',
 'mapoftheinternet\.com','<a href="http://MapoftheInternet.com" title="MapoftheInternet.com home page">MapoftheInternet.com</a>',
-'mediapartners\-google','<a href="https://adwords.google.com/" title="Bot home page">Google AdSense</a>',
+'mediapartners\-google','<a href="https://adwords.google.com" title="Bot home page">Google AdSense</a>',
 'megite','<a href="http://www.megite.com" title="Megite home page">Megite</a>',
 'metager\-linkchecker','MetaGer LinkChecker',
 'metaspinner','<a href="http://index.meta-spinner.de" title="Metaspinner home page">Metaspinner</a>',
@@ -1486,7 +1712,7 @@
 'octora\sbeta\sbot','<a href="http://www.octora.com" title="Bot home page">Octora Beta Bot</a>',
 'omniexplorer\_bot','<a href="http://www.omni-explorer.com" title="Bot home page.">OmniExplorer Bot</a>',
 'onet\.pl\_sa','<a href="http://szukaj.onet.pl" title="Onet.pl_SA home page">Onet.pl_SA</a>',
-'onfolio','<a href="http://www.onfolio.com" title="Bot home page">Onfolio</a>',
+'onfolio','<a href="http://www.onfolio.com" title="Bot home page [new window]">Onfolio</a>',
 'opentaggerbot','<a href="http://www.opentagger.com/opentaggerbot.htm" title="Bot home page">OpenTaggerBot</a>',
 'openwebspider','<a href="http://www.openwebspider.org" title="OpenWebSpider home page">OpenWebSpider</a>',
 'oracle\sultra\ssearch','<a href="http://www.oracle.com/technology/products/ultrasearch/index.html" title="Oracle Ultra Search home page">Oracle Ultra Search</a>',
@@ -1495,7 +1721,9 @@
 'passwordmaker\.org','<a href="http://passwordmaker.org" title="passwordmaker.org home page">passwordmaker.org</a>',
 'pear\shttp\srequest\sclass','<a href="http://pear.php.net" title="PEAR HTTP Request class home page">PEAR HTTP Request class</a>',
 'peerbot','<a href="http://www.peerbot.com" title="PEERbot home page">PEERbot</a>',
-'perman', 'Perman surfer',
+# Modified by Ryu 2006.03.15
+#'perman', 'Perman surfer',
+'perman', '<a href="http://www.bug.co.jp/nami-nori/" title="Bot home page.">波乗野郎</a>',
 'php\_version\_tracker','<a href="http://www.nexen.net/phpversion/bot.php" title="PHP_version_tracker home page">PHP_version_tracker</a>',
 'php\sversion\stracker','<a href="http://www.nexen.net/phpversion/bot.php" title="PHP version tracker home page">PHP version tracker</a>',
 'pictureofinternet','<a href="http://malfunction.org/poi/" title="PictureOfInternet home page">PictureOfInternet</a>',
@@ -1559,7 +1787,7 @@
 'ultraseek', 'Ultraseek',
 'unchaos\sbot\shybrid\sweb\ssearch\sengine','<a href="http://www.unchaos.com" title="UnChaos Bot Hybrid Web Search Engine home page">UnChaos Bot Hybrid Web Search Engine</a>',
 'unido\-bot','<a href="http://www.unchina.org/unido/unido/our_projects/3_3.html" title="unido-bot home page">unido-bot</a>',
-'up\.browser','<a href="http://developer.openwave.com/dvl/support/faqs/faq_mag_browser.htm" title="UP.Browser home page">UP.Browser</a>',
+#'up\.browser','<a href="http://developer.openwave.com/dvl/support/faqs/faq_mag_browser.htm" title="UP.Browser home page">UP.Browser</a>',
 'updated','<a href="http://www.updated.com" title="updated home page">updated</a>',
 'ustc\-semantic\-group','<a href="http://ai.ustc.edu.cn/mas/en/research/index.php" title="Bot home page">USTC-Semantic-Group</a>',
 'vagabondo\-wap','<a href="http://www.wise-guys.nl/Contact/index.php?botselected=webagents&lang=uk" title="Bot home page">Vagabondo-WAP</a>',
@@ -1608,14 +1836,15 @@
 'ng\/1\.','<a href="http://www.exabot.com" title="Bot home page">NG 1.x (Exalead)</a>', # put at end to avoid false positive
 'ng\/2\.','<a href="http://www.exabot.com" title="Bot home page">NG 2.x (Exalead)</a>', # put at end to avoid false positive
 'exabot','<a href="http://www.exabot.com" title="Bot home page">Exabot</a>', # put at end to avoid false positive
-'java','<a href="http://www.projecthoneypot.org/harvester_useragents.php" title="Bot home page">Java (Often spam bot)</a>', # put at end to avoid false positive
+'java','<a href="http://www.projecthoneypot.org/harvester_useragents.php" title="Bot home page">Java (spam botによく使われる)</a>', # put at end to avoid false positive
 # Generic root ID
-'robot', 'Unknown robot (identified by \'robot\')',
-'crawl', 'Unknown robot (identified by \'crawl\')',
-'spider', 'Unknown robot (identified by \'spider\')',
-'\wbot[\/\-]', 'Unknown robot (identified by \'bot/\' or \'bot-\')',
+'robot', '未分類のrobot (名前に\'robot\'を含む)',
+'crawl', '未分類のrobot (名前に\'crawl\'を含む)',
+'spider', '未分類のrobot (名前に\'spider\'を含む)',
+'bot[\/\-]', '未分類のrobot (名前に\'bot/\'や\'bot-\'を含む)',
+'uri::fetch','URI::Fetch',
 # Unknown robots identified by hit on robots.txt
-'unknown', 'Unknown robot (identified by hit on \'robots.txt\')'
+'unknown', '未分類のrobot (\'robots.txt\'への参照で検出)'
 );

サーチエンジンの追加

参照してくれたサーチエンジンを追加しました。
空白を含んだIDを処理するようにしました。二つのパラメタに分かれて、検索語が渡される場合についても処理しました。
--- C:\awstats-6.7/wwwroot/cgi-bin/lib/search_engines.pm        Thu Sep 27 13:38:52 2007
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/lib/search_engines.pm     Thu Sep 27 15:01:20 2007
@@ -154,6 +154,43 @@
 # Note: Regex IDs are in lower case and ' ' and '+' are changed into '_'
 #------------------------------------------------------------------------------
 @SearchEnginesSearchIDOrder_list1=(
+# Japanese Search Engines
+# Added by Ryu 2007.01.06
+'66\.102\.11\.104',
+'64\.233\.179\.99',
+'209\.85\.(129|135|165)\.104',
+'216\.239\.(37\.99|39\.104|41\.104|63\.104)',
+'biglobe\.ne\.jp',
+'cache\.yahoofs\.jp',
+'cgi\.search\.biglobe\.ne\.jp',
+'clusty\.jp',
+'excite\.co\.jp',
+'excite-cache\.jp',
+'find\.x0\.to',
+'search\.fresheye\.com',
+'dir\.fresheye\.com',
+'goo\.ne\.jp',
+'google\.co\.jp',
+#'msnscache\.com',
+'mysearch\.myway\.com',
+'naver\.co\.jp',
+'search\.biglobe\.ne\.jp',
+'search\.jp\.aol\.com',
+'search\.livedoor\.com',
+'search\.nifty\.com',
+'search\.msn\.co\.jp',
+'search\.odn\.ne\.jp',
+'search-hp\.com',
+'m\.technorati\.jp',
+'www\.technorati\.jp',
+'technorati\.jp',
+'technorati\.com',
+'tocc\.co\.jp',
+'www\.ceek\.jp',
+'www\.infoseek\.co\.jp',
+'www\.megite\.com',
+'www\.seochat\.com',
+'www\.yahoogle\.jp',
 # Major international search engines
 'base\.google\.',
 'froogle\.google\.',
@@ -353,7 +390,14 @@
 'msn\.'=>'hotmail\.msn\.',
 'tiscali\.'=>'mail\.tiscali\.',
 'yahoo\.'=>'mail\.yahoo\.',
-'yandex\.'=>'direct\.yandex\.'
+'yandex\.'=>'direct\.yandex\.',
+# For Japanese Search Engines
+# Added by Ryu 2006.03.15
+'infoseek\.co\.jp'=>'at\.imfoseek\.co\.jp',
+'googlee\.'=>'mail\.googlee\.',
+'googlee\.'=>'translate\.googlee\.',
+'goo\.ne\.jp'=>'members\.goo\.ne\.jp',
+'goo\.ne\.jp'=>'bsearch\.goo\.ne\.jp'
 );


@@ -361,6 +405,43 @@
 # Each Search Engine Search ID is associated to an AWStats id string
 #------------------------------------------------------------------------------
 %SearchEnginesHashID = (
+# Japanese Search Engines
+# Added by Ryu 2007.01.06
+'66\.102\.11\.104','googlejapan',
+'64\.233\.179\.99','googlejapan',
+'209\.85\.(129|135|165)\.104','google',
+'216\.239\.(37\.99|39\.104|41\.104|63\.104)','googlejapan',
+'biglobe\.ne\.jp','biglobe',
+'cache\.yahoofs\.jp','yahoocache',
+'cgi\.search\.biglobe\.ne\.jp','biglobe',
+'clusty\.jp','clustyjp',
+'excite\.co\.jp','excitejapan',
+'excite-cache\.jp','excitejapan',
+'find\.x0\.to','asamasearch',
+'search\.fresheye\.com','fresheye',
+'dir\.fresheye\.com','fresheyedir',
+'goo\.ne\.jp','goo',
+'google\.co\.jp','google',
+#'msnscache\.com','msn_cache',
+'mysearch\.myway\.com','myway',
+'naver\.co\.jp','naver',
+'search\.biglobe\.ne\.jp','biglobe',
+'search\.jp\.aol\.com','aoljapan',
+'search\.livedoor\.com','livedoor',
+'search\.nifty\.com','nifty',
+'search\.msn\.co\.jp','msnjapan',
+'search\.odn\.ne\.jp','odn',
+'search-hp\.com','searchhp',
+'m\.technorati\.jp','mtechnoratijp',
+'www\.technorati\.jp','wtechnoratijp',
+'technorati\.jp','technoratijp',
+'technorati\.com','technorati',
+'tocc\.co\.jp','tocc',
+'www\.ceek\.jp','ceekjp',
+'www\.infoseek\.co\.jp','infoseek',
+'www\.megite\.com','megite',
+'www\.seochat\.com','seochat',
+'www\.yahoogle\.jp','yahoogle',
 # Major international search engines
 'base\.google\.','google_base',
 'froogle\.google\.','google_froogle',
@@ -626,13 +707,49 @@
 # List of search engines that store keyword as page instead of query parameter
 #------------------------------------------------------------------------------
 %SearchEnginesWithKeysNotInQuery=(
-'a9',1    # www.a9.com/searckey1%20searchkey2
+'a9',1,   # www.a9.com/searckey1%20searchkey2
+'fresheyedir',1,       # dir.fresheye.com/ds/kw/new/searckey1/
+'megite',1,    # www.megite.com/discover/searckey1%20searchkey2
+'yahoogle',1,   # www.yahoogle.jp/yahoogle-1-searckey1%20searchkey2
+'mtechnoratijp',1,  # m.technorati.jp/search/searckey1+searchkey2
+'wtechnoratijp',1,     # www.technorati.jp/search/searckey1+searchkey2
+                       # www.technorati.jp/posts/tag/searckey1+searchkey2
+'technoratijp',1,  # technorati.jp/search/searckey1+searchkey2
+'technorati',1,  # technorati.com/posts/tag/searckey1+searchkey2
 );

 # SearchEnginesKnownUrl
 # Known rules to extract keywords from a referrer search engine URL
 #------------------------------------------------------------------------------
 %SearchEnginesKnownUrl=(
+# Japanese Search Engines
+# Added by Ryu 2007.01.06
+'asamasearch','q=',
+'askjapan','q=',
+'biglobe','q=',
+'ceekjp','q=',
+'clustyjp','query=',
+'excitejapan','search=',
+'fresheye','kw=',
+'fresheyedir','dir\.fresheye\.com\/ds\/kw\/new\/',
+'goo','mt=',
+'googlejapan','(p=|q=cache:[0-9A-Za-z]{12}:|as_p=|as_q=|as_epq=|q=)',
+'infoseek','qt=',
+'livedoor','q=',
+'megite','www\.megite\.com\/discover\/',
+'myway','searchfor=',
+'msnjapan','(q|mt)=',
+'naver','query=',
+'nifty','text=',
+'odn','querystring=',
+'searchhp','kensaku_ward=',
+'mtechnoratijp','m\.technorati\.jp\/search\/',
+'wtechnoratijp','www\.technorati\.jp\/(?:search|posts/tag)\/',
+'technoratijp','technorati\.jp\/search\/',
+'technorati','technorati\.com\/(?:tag|posts/tag)\/',
+'tocc','qry=',
+'yahoocache','w=',
+'yahoogle','www\.yahoogle\.jp\/yahoogle-1-',
 # Most common search engines
 'alexa','q=',
 'alltheweb','q(|uery)=',
@@ -644,9 +761,9 @@
 'google_groups','group\/', # does not work
 'google_image','(p|q|as_p|as_q)=',
 'google_cache','(p|q|as_p|as_q)=cache:[0-9A-Za-z]{12}:',
-'google','(p|q|as_p|as_q)=',
+'google','(p=|as_p=|as_q=|as_epq=|q=cache:[0-9A-Za-z]{12}:|q=)',
 'lycos','query=',
-'msn','q=',
+'msn','(q|mt)=',
 'live','q=',
 'netscape','search=',
 'tiscali','key=',
@@ -823,6 +940,16 @@
 'searchch', 'q=', 'bluewin', 'qry='
 );

+# SearchEnginesKnownUrlTrail
+# Known rules to extract keywords from a referrer search engine URL
+#------------------------------------------------------------------------------
+%SearchEnginesKnownUrlTrail=(
+# Japanese Search Engines
+# Added by Hobbit_makoto 2007.01.17
+'fresheyedir','\/',
+'yahoogle','\.html',
+);
+
 # SearchEnginesKnownUrlNotFound
 # Known rules to extract not found keywords from a referrer search engine URL
 #------------------------------------------------------------------------------
@@ -835,7 +962,8 @@
 # If no rules are known and search in WordsToExtractSearchUrl failed, this will be used to clean URL of not keyword parameters.
 #------------------------------------------------------------------------------
 @WordsToExtractSearchUrl= ('ask=','claus=','general=','key=','kw=','keyword=','keywords=','MT=','p=','q=','qr=','qt=','query=','s=','search=','searchText=','string=','su=','txtsearch=','w=');
-@WordsToCleanSearchUrl= ('act=','annuaire=','btng=','cat=','categoria=','cfg=','cof=','cou=','count=','cp=','dd=','domain=','dt=','dw=','enc=','exec=','geo=','hc=','height=','hits=','hl=','hq=','hs=','id=','kl=','lang=','loc=','lr=','matchmode=','medor=','message=','meta=','mode=','order=','page=','par=','pays=','pg=','pos=','prg=','qc=','refer=','sa=','safe=','sc=','sort=','src=','start=','style=','stype=','sum=','tag=','temp=','theme=','type=','url=','user=','width=','what=','\\.x=','\\.y=','y=','look=');
+# Words after "look" are added by Ryu for Japanese Search Engines.
+@WordsToCleanSearchUrl= ('act=','annuaire=','btng=','cat=','categoria=','cfg=','cof=','cou=','count=','cp=','dd=','domain=','dt=','dw=','enc=','exec=','geo=','hc=','height=','hits=','hl=','hq=','hs=','id=','kl=','lang=','loc=','lr=','matchmode=','medor=','message=','meta=','mode=','order=','page=','par=','pays=','pg=','pos=','prg=','qc=','refer=','sa=','safe=','sc=','sort=','src=','start=','style=','stype=','sum=','tag=','temp=','theme=','type=','url=','user=','width=','what=','\\.x=','\\.y=','y=','look=','target=','collection=','showSummary=','perPage=','next=','DB=','OPE=','Max=','base=','submit=','SearchType=','SESSIONID=','QUERYRULE=','DISPLAYMIN=','RELURLSWITCH=','SORT=','start=','direct=','relwd=','lk=','svx=','nh=','internet=','DC=','submit0=','DEST=','where=','CCM=','NRS=','UNI=','UD0=','FRS=','sv=','rf=','oq=','col=','act\.search=');

 # SearchEnginesKnownUTFCoding
 # Known parameter that proves a search engine has coded its parameters in UTF-8
@@ -852,6 +980,36 @@
 # 'search_engine_id', 'search_engine_name',
 #------------------------------------------------------------------------------
 %SearchEnginesHashLib=(
+# Japanese Search Engines
+# Added by Ryu 2006.03.15
+'googlejapan','<a href="http://www.google.co.jp">Google Japan</a>',
+'biglobe','Biglobe',
+'aoljapan','<a href="http://search.jp.aol.com">AOL Japan</a>',
+'goo','<a href="http://goo.ne.jp">Goo</a>',
+'nifty','<a href="http://www.nifty.com/search/">Nifty</a>',
+'msnjapan','MSN Japan',
+'odn','ODN',
+'clustyjp','<a href="http://clusty.jp">Clusty Japan</a>',
+'excitejapan','Excite Japan',
+'mtechnoratijp','<a href="http://m.technorati.jp">テクノラティモバイル検索</a>',
+'wtechnoratijp','<a href="http://technorati.jp">テクノラティ検索(WWW)</a>',
+'technoratijp','<a href="http://technorati.jp">テクノラティ検索</a>',
+'technorati','<a href="http://technorati.com">Technorati Search</a>',
+'yahoogle','<a href="http://www.yahoogle.jp">yahoogle</a>',
+#'msn_cache','MSN Cache',
+'myway','MyWay',
+'naver','Naver',
+'asamasearch','<a href="http://find.x0.to">Asamasearch</a>',
+'fresheye','<a href="http://fresheye.com">Fresheye</a>',
+'fresheyedir','<a href="http://fresheye.com">Fresheye(Dir)</a>',
+'seochat','SEOChat',
+'tocc','TOCC/Search',
+'searchhp','<a href="http://search-hp.com">Search HP</a>',
+'ceekjp','<a href="http://www.ceek.jp">CEEK.JP</a>',
+'infoseek','<a href="http://www.infoseek.co.jp">Infoseek</a>',
+'yahoocache','Yahoo Cache',
+'askjapan','Ask Jeeves Japan',
+'livedoor','Livedoor',
 # Major international search engines
 'alexa','<a href="http://www.alexa.com" title="Search Engine Home Page">Alexa</a>',
 'alltheweb','<a href="http://www.alltheweb.com" title="Search Engine Home Page">AllTheWeb</a>',

utf8_decode.plの改造

REFERER SPAM対策の追加

 接続元にREFERER SPAMばかリ出てくるので、groovymotherのパッチを組み込みました。少し足りない分はblacklist.txtに手動で追加。6.5で標準に組み込まれました。confファイルのキーワードが変わったのでご注意。

日付の様式の日本語化

 yyyy年mm月dd日の様式に変更しました。
--- C:\awstats-6.7/wwwroot/cgi-bin/awstats.pl   Thu Sep 27 15:05:22 2007
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/awstats.pl        Thu Sep 27 13:50:38 2007
@@ -4616,9 +4609,14 @@
        my $min=substr("$date",10,2);
        my $sec=substr("$date",12,2);
        my $dateformat=$Message[78];
-       if ($option == 2) {
-               $dateformat =~ s/^[^ymd]+//g;
-               $dateformat =~ s/[^ymd]+$//g;
+       if ($option == 2) {                     # dd mmm yy
+               $dateformat = $Message[173];
+       } elsif ($option == 3) {                # mmm<br>yyyy
+               $dateformat = $Message[174];
+       } elsif ($option == 4) {                # mmm yyyy
+               $dateformat = $Message[175];
+       } elsif ($option == 5) {                # dd<br>mmm
+               $dateformat = $Message[176];
        }
        $dateformat =~ s/yyyy/$year/g;
        $dateformat =~ s/yy/$year/g;
@@ -4628,6 +4626,7 @@
        $dateformat =~ s/HH/$hour/g;
        $dateformat =~ s/MM/$min/g;
        $dateformat =~ s/SS/$sec/g;
+       if ($BuildReportFormat eq 'xml') {
+               $dateformat =~ s/break/<br />/g;
+       } else {
+               $dateformat =~ s/break/<br>/g;
+       }
        return "$dateformat";
}

@@ -8935,47 +9010,50 @@

                        my $colspan=5;
                        my $w='20';
-                       if ($LogType eq 'W' || $LogType eq 'S') { $w='17'; $colspan=6; }
-
+                       if ($LogType eq 'W' || $LogType eq 'S') {
+                               $w='17'; $colspan=6;
+                               print "<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag\n";
+                       } else {
+                               print "<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag<col width=\"$w%\"$endtag\n";
+                       }
                        # Show first/last
-                       print "<tr bgcolor=\"#$color_TableBGRowTitle\">";
-                       print "<td class=\"aws\"><b>$Message[133]</b></td><td class=\"aws\" colspan=\"".($colspan-1)."\">\n";
-                       print ($MonthRequired eq 'all'?"$Message[6] $YearRequired":"$Message[5] ".$MonthNumLib{$MonthRequired}." $YearRequired");
+                       print "<tr class=\"colortab\">";
+                       print "<td class=\"aws\"><strong>$Message[133]</strong></td><td class=\"aws\" colspan=\"".($colspan-1)."\">\n";
+                       print ($MonthRequired eq 'all'?"$Message[6] $YearRequired":"$Message[5] ".Format_Date("$YearRequired$MonthRequired"."00000000",4));
                        print "</td></tr>\n";
-                       print "<tr bgcolor=\"#$color_TableBGRowTitle\">";
-                       print "<td class=\"aws\"><b>$Message[8]</b></td>\n";
+                       print "<tr class=\"colortab\">";
+                       print "<td class=\"aws\"><strong>$Message[8]</strong></td>\n";
                        print "<td class=\"aws\" colspan=\"".($colspan-1)."\">".($FirstTime?Format_Date($FirstTime,0):"NA")."</td>";
                        print "</tr>\n";
                        print "<tr bgcolor=\"#$color_TableBGRowTitle\">";
                        print "<td class=\"aws\"><b>$Message[9]</b></td>\n";
                        print "<td class=\"aws\" colspan=\"".($colspan-1)."\">".($LastTime?Format_Date($LastTime,0):"NA")."</td>\n";
                        print "</tr>\n";

                        # Show main indicators title row
                        print "<tr>";
@@ -8985,17 +9084,17 @@
 #                                      print "<td><a href=\"".XMLEncode("$AWScript?${NewLinkParams}month=12&year=".($YearRequired-1))."\"><<</a></td>";
 #                              }
 #                              else {
-                                       print "<td> </td>";
+                                       print "<td></td>";
 #                              }
                                for (my $ix=1; $ix<=12; $ix++) {
                                        my $monthix=sprintf("%02s",$ix);
 #                                      if (!$StaticLinks) {
-#                                              print "<td><a href=\"".XMLEncode("$AWScript?${NewLinkParams}month=$monthix&year=$YearRequired")."\">$MonthNumLib{$monthix}<br />$YearRequired</a></td>";
+#                                              print "<td><a href=\"".XMLEncode("$AWScript?${NewLinkParams}month=$monthix&year=$YearRequired")."\">$MonthNumLib{$monthix}<br$endtag$YearRequired</a></td>";
 #                                      }
 #                                      else {
-                                           print "<td>".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'<font class="currentday">':'');
-                                               print "$MonthNumLib{$monthix}<br />$YearRequired";
-                                           print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'</font>':'');
+                                       print "<td>".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'<span class="currentday">':'');
+                                               print Format_Date("$YearRequired$monthix"."00000000",3);
+                                       print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'</span>':'');
                                            print "</td>";
 #                                      }
                                }
@@ -9103,29 +9181,36 @@
 #                                      print "<td><a href=\"".XMLEncode("$AWScript?${NewLinkParams}month=1&year=".($YearRequired+1))."\">>></a></td>";
 #                              }
 #                              else {
-                                       print "<td> </td>";
+#                                      print "<td></td>";
 #                              }
                                print "</tr>\n";
                                print "</table>\n";
                        }
-                       print "<br />\n";
-#                      print "<br$endtag\n";

                        # Show data array for month
                        if ($AddDataArrayMonthStats) {
-                               print "<table>\n";
-                               print "<tr><td width=\"80\" bgcolor=\"#$color_TableBGRowTitle\">$Message[5]</td>";
-                               if ($ShowMonthStats =~ /U/i) { print "<td width=\"80\" bgcolor=\"#$color_u\"".Tooltip(2).">$Message[11]</td>"; }
-                               if ($ShowMonthStats =~ /V/i) { print "<td width=\"80\" bgcolor=\"#$color_v\"".Tooltip(1).">$Message[10]</td>"; }
-                               if ($ShowMonthStats =~ /P/i) { print "<td width=\"80\" bgcolor=\"#$color_p\"".Tooltip(3).">$Message[56]</td>"; }
-                               if ($ShowMonthStats =~ /H/i) { print "<td width=\"80\" bgcolor=\"#$color_h\"".Tooltip(4).">$Message[57]</td>"; }
-                               if ($ShowMonthStats =~ /B/i) { print "<td width=\"80\" bgcolor=\"#$color_k\"".Tooltip(5).">$Message[75]</td>"; }
+                               print "<table summary=\"Show data array for month\">\n";
+                               print "<col width=\"90\"$endtag";
+                               if ($ShowMonthStats =~ /U/i) { print "<col width=\"$WIDTHHIT\"$endtag";}
+                               if ($ShowMonthStats =~ /V/i) { print "<col width=\"$WIDTHHIT\"$endtag";}
+                               if ($ShowMonthStats =~ /P/i) { print "<col width=\"$WIDTHPAGE\"$endtag";}
+                               if ($ShowMonthStats =~ /H/i) { print "<col width=\"$WIDTHHIT\"$endtag";}
+                               if ($ShowMonthStats =~ /B/i) { print "<col width=\"$WIDTHBANDWIDTH\"$endtag";}
+                               print "<tr><td  class=\"colortab\">$Message[5]</td>";
+                               if ($ShowMonthStats =~ /U/i) { print "<td class=\"coloru\"".Tooltip(2).">$Message[11]</td>"; }
+                               if ($ShowMonthStats =~ /V/i) { print "<td class=\"coloru\"".Tooltip(1).">$Message[10]</td>"; }
+                               if ($ShowMonthStats =~ /P/i) { print "<td class=\"coloru\"".Tooltip(3).">$Message[56]</td>"; }
+                               if ($ShowMonthStats =~ /H/i) { print "<td class=\"coloru\"".Tooltip(4).">$Message[57]</td>"; }
+                               if ($ShowMonthStats =~ /B/i) { print "<td  class=\"coloru\"".Tooltip(5).">$Message[75]</td>"; }
                                print "</tr>\n";
                                for (my $ix=1; $ix<=12; $ix++) {
                                        my $monthix=sprintf("%02s",$ix);
                                        print "<tr>";
-                                       print "<td>".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'<font class="currentday">':'');
-                                       print "$MonthNumLib{$monthix} $YearRequired";
-                                       print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'</font>':'');
+                                       print "<td>".(! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'<span class="currentday">':'');
+                                       print Format_Date("$YearRequired$monthix"."00000000",4);
+                                       print (! $StaticLinks && $monthix==$nowmonth && $YearRequired==$nowyear?'</span>':'');
                                        print "</td>";
                                        if ($ShowMonthStats =~ /U/i) { print "<td>",$MonthUnique{$YearRequired.$monthix}?$MonthUnique{$YearRequired.$monthix}:"0","</td>"; }
                                        if ($ShowMonthStats =~ /V/i) { print "<td>",$MonthVisits{$YearRequired.$monthix}?$MonthVisits{$YearRequired.$monthix}:"0","</td>"; }
@@ -9299,37 +9383,43 @@
                                        my $year=$1; my $month=$2; my $day=$3;
                                        if (! DateIsValid($day,$month,$year)) { next; }                        # If not an existing day, go to next
                                        my $dayofweekcursor=DayOfWeek($day,$month,$year);
-                                       print "<td".($dayofweekcursor=~/[06]/?" bgcolor=\"#$color_weekend\"":"").">";
-                                       print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'<font class="currentday">':'');
-                                       print "$day<br /><span style=\"font-size: ".($FrameName ne 'mainright' && $QueryString !~ /buildpdf/i?"9":"8")."px;\">".$MonthNumLib{$month}."</span>";
-                                       print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'</font>':'');
+                                       print "<td".($dayofweekcursor=~/[06]/?" class=\"colorweekend\"":"").">";
+                                       print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'<span class="currentday">':'');
+                                       print Format_Date("$year$month$day"."000000",5);
+                                       print (! $StaticLinks && $day==$nowday && $month==$nowmonth && $year==$nowyear?'</span>':'');
                                        print "</td>\n";
                                }
-                               print "<td> </td>";
+                               print "<td></td>";
                                print "<td valign=\"middle\"".Tooltip(18).">$Message[96]</td>\n";
                                print "</tr>\n";
                                print "</table>\n";
                        }
-                       print "<br />\n";
+#                      print "<br$endtag\n";

                        # Show data array for days
--- C:\awstats-6.7/wwwroot/cgi-bin/lang/awstats-en.txt  Mon Jun 05 08:59:38 2006
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/lang/awstats-en.txt       Fri Sep 28 09:32:26 2007
@@ -173,3 +173,7 @@
 message170=plugins
 message171=Regions
 message172=Cities
+message173=dd mmm yyyy
+message174=mmmbreakyyyy
+message175=mmm yyyy
+message176=ddbreakmmm
--- C:\awstats-6.7/wwwroot/cgi-bin/lang/awstats-jp.txt  Wed Feb 08 23:26:16 2006
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/lang/awstats-jp.txt       Thu Sep 27 11:39:46 2007
@@ -1,66 +1,68 @@
 # Japanese message file (info@kchosting.jp)
 # $Revision: 1.9 $ - $Date: 2004/06/07 19:04:36 $
+# Modified by Ryu 2004.07.20
+# Modified by makoto_hobbit 2006.1.6
 PageCode=UTF-8
 message0=不明
-message1=不明(ipが解りません)
+message1=名前解決ができないホスト
 message2=その他
-message3=詳細を見る
-message4=日
-message5=月
-message6=年
-message7=統計
+message3=詳細の閲覧
+message4=日次
+message5=月次
+message6=年次
+message7=統計対象サイト
 message8=最初の訪問
 message9=最後の訪問
-message10=訪問数
-message11=訪問者
+message10=訪問回数
+message11=一意な訪問者数
 message12=訪問
-message13=キーワード
-message14=検索
-message15=パーセント
+message13=種類の検索語
+message14=検索回数
+message15=割合
 message16=容量
 message17=ドメイン/国名
 message18=訪問者
-message19=URLページ
-message20=時間
+message19=ページ数/URL
+message20=時間帯
 message21=ブラウザ
-message22=HTTPエラー
-message23=参照
+message22=
+message23=参照元
 message24=更新なし
-message25=訪問者・ドメイン/国名
+message25=訪問者のドメイン/国名
 message26=ホスト
 message27=ページ
-message28=ページ
-message29=アクセス
-message30=他の言葉
-message31=ページが見つかりません
-message32=HTTPエラーコード
-message33=Netscapeバージョン
-message34=IEバージョン
-message35=最終の更新 
-message36=このサイトへのアクセス元
-message37=アクセス元
-message38=直接URLを入力/お気に入りからのアクセス
-message39=起点が不明
-message40=インターネット検索エンジンからのリンク
-message41=外部ページからのリンク(検索エンジンを除く他のホームページ)
-message42=内部ページからのリンク(同じサイトの他のページ)
-message43=検索エンジンの文字列(キーフレーズ)
-message44=検索エンジンの文字列(キーワード)
-message45=不明なIPアドレス 
-message46=不明なOS(参照フィールド)
-message47=要求されたURLは見つかりません(HTTPコード404)
-message48=未解決のIPアドレス 
-message49=エラー 件数
-message50=不明ブラウザ(参照フィールド) 
-message51=ロボットの訪問
+message28=種類のページ
+message29=閲覧
+message30=上記以外の検索語
+message31=見つからなかったページ
+message32=HTTPステータスコード
+message33=Netscapeのバージョン
+message34=Internet Explorerのバージョン
+message35=最後の更新
+message36=このサイトへの接続元
+message37=接続元
+message38=直接URLを入力/ブックマーク
+message39=不明な接続元
+message40=検索エンジンからのリンク
+message41=外部ページからのリンク(検索エンジンを除くWebサイト)
+message42=内部ページからのリンク(同一サイトの他のページ)
+message43=検索エンジンで利用された検索文
+message44=検索エンジンで利用された検索語
+message45=名前解決できないIPアドレス
+message46=不明なOS(UserAgentフィールド)
+message47=要求されたが存在しなかったURL(HTTPコード404)
+message48=IPアドレス
+message49=エラー ヒット
+message50=不明なブラウザ(UserAgentフィールド)
+message51=種類のロボット
 message52=訪問/訪問者
 message53=ロボット/スパイダーの訪問者
-message54=上級web統計のフリーリアルタイムログファイル分析 
-message55=の
+message54=一歩進んだアクセス解析を可能にするフリーなリアルタイムログ解析スクリプト
+message55=(日本語では不要)
 message56=ページ
-message57=件数
+message57=ヒット
 message58=バージョン
-message59=オペレーティングシステム
+message59=OS
 message60=1月
 message61=2月
 message62=3月
@@ -73,17 +75,17 @@
 message69=10月
 message70=11月
 message71=12月
-message72=ナビゲーション
+message72=アクセス状況
 message73=ファイルの種類
-message74=更新する
-message75=バイト
+message74=今すぐ更新
+message75=帯域
 message76=メインページに戻る
-message77=トップ
-message78= yyyy年 mmm dd日 - HH:MM 
-message79=フィルター
+message77=上位
+message78=yyyy年 mmm dd日 - HH:MM
+message79=フィルタ
 message80=全リスト
-message81=ホスト
-message82=既知
+message81=ホスト名
+message82=既知のホスト
 message83=ロボット
 message84=日曜日
 message85=月曜日
@@ -93,79 +95,88 @@
 message89=金曜日
 message90=土曜日
 message91=曜日
-message92=だれ
-message93=いつ
-message94=認証されたユーザー
+message92=訪問者の属性
+message93=訪問日時
+message94=認証されたユーザ
 message95=最小
 message96=平均
 message97=最大
-message98=Web圧縮
-message99=帯域幅の保存
+message98=mod_zipによる圧縮
+message99=節約されたバイト数
 message100=圧縮前
 message101=圧縮後
 message102=合計
-message103=キーフレーズ
-message104=入り口
+message103=種類の検索文
+message104=最初に閲覧
 message105=コード
-message106=平均サイズ
+message106=平均データ長
 message107=ニュースグループからのリンク
-message108=Kb
-message109=Mb
-message110=Gb
-message111=Grabber
+message108=kB
+message109=MB
+message110=GB
+message111=自動巡回?
 message112=Yes
 message113=No
-message114=WhoIs情報
+message114=WhoIsDBの情報
 message115=OK
-message116=出口
-message117=訪問の長さ
-message118=ウィンドーを閉じる
+message116=最後に閲覧
+message117=滞在時間
+message118=このウィンドウを閉じる
 message119=バイト
-message120=検索文字列(キーフレーズ)
-message121=検索文字列(キーワード)
-message122=検索エンジン
-message123=ホームページ
-message124=他のフレーズ
-message125=他のログイン
-message126=検索エンジン
-message127=ホームページ
-message128=サマリー
-message129=「年」ビューでは精密な数字はありません
+message120=検索文
+message121=検索語
+message122=の検索エンジンから登録されている
+message123=このサイトにリンクしているWebページ
+message124=上記以外の検索文
+message125=他のユーザ(もしくは匿名ユーザ)のログイン
+message126=参照検索エンジン
+message127=参照サイト
+message128=サマリ
+message129=年単位の統計では正確な値は表示されません
 message130=データ配列関数
 message131=送信者のEMail
 message132=受信者のEMail
 message133=表示するレポート
 message134=エキストラ/マーケティング
 message135=画面解像度
-message136=ワーム/ウィルス攻撃
-message137=お気に入りに追加
-message138=日付
-message139=その他
-message140=Java 対応ブラウザー
-message141=Macromedia Director 対応ブラウザー
-message142=Flash 対応ブラウザー
-message143=Real Audio 対応ブラウザー
-message144=Quicktime Audio 対応ブラウザー
-message145=Windows Media 対応ブラウザー
-message146=PDF 対応ブラウザー
+message136=ワーム/ウィルスによる攻撃
+message137=お気に入りへの追加(推測値)
+message138=日別の統計
+message139=その他の情報
+message140=Java 対応ブラウザ
+message141=Macromedia Director 対応ブラウザ
+message142=Flash 対応ブラウザ
+message143=Real Audio 対応ブラウザ
+message144=Quicktime Audio 対応ブラウザ
+message145=Windows Media 対応ブラウザ
+message146=PDF 対応ブラウザ
 message147=SMTP エラーコード
 message148=国
 message149=メール
 message150=サイズ
 message151=最初
 message152=最後
-message153=除外フィルター
-message154=このチャートのコードは訪問者によるアクセスではありませんので他のチャートに含まれていません。
-message155=クラスター
-message156=ロボットによるアクセスは訪問者の閲覧とは違いますので他のチャートに含まれていません。
-message157=+の後の数字は「robots.txt」の表示が成功した回数です。
-message158=ワームによるアクセスは訪問者の閲覧とは違いますので他のチャートに含まれていません。
-message159=閲覧に含まれないアクセスはロボット、ワームなどによるものです。
-message160=閲覧アクセス
-message161=閲覧に含まれないアクセス
-message162=月
+message153=除外フィルタ
+message154=ここにリストされているコードは不可視な訪問者としてカウントされているため、その他のチャートの数値には含まれていません。
+message155=クラスタ
+message156=ここにリストされているロボットは不可視な訪問者としてカウントされているため、その他のチャートの数値には含まれていません。
+message157=+の後に表示されている数値は、“robots.txt”ファイルへの参照で検出されたヒット数です。
+message158=ここにリストされているワームは不可視な訪問者としてカウントされているため、その他のチャートの数値には含まれていません。
+message159=不可視トラフィックとは、ワームやロボット、あるいは特殊なHTTPステータスコードを持つ応答などによって生成されたトラフィックのことです。
+message160=可視トラフィック
+message161=不可視トラフィック
+message162=月別の統計
 message163=ワーム
-message164=その他のワーム
-message165=Mails successfully sent
-message166=Mails failed/refused
+message164=種類のワーム
+message165=送信成功メール
+message166=失敗メール
 message167=Sensitive targets
\ No newline at end of file
+message168=Javascript disabled
+message169=生成
+message170=プラグイン
+message171=地域
+message172=都市
+message173=yyyy年 mmm dd日
+message174=yyyy年breakmmm
+message175=yyyy年 mmm
+message176=mmmbreakdd日

GeoIPオプシション

 GeoLite Countryから、GeoIP.datをダウンロードします。Free版より、有償版のほうが精度がいいそうです。GeoIPオプションの指定でGeoIP.datの場所を指定するようになりました。この指定をしないとWindowsのActiveperlは異常終了するようです。GeoIP Perl APIにある通りインストールします。
 unixでは、
perl Makefile.PL
make
make test
make install
 Windows上では、ppmを使います。
C:\>ppm install http://theoryx5.uwinnipeg.ca/ppms/Geo-IP.ppd

Anchorの書式

 「IDトークンとNAMEトークンは、アルファベット([A-Za-z])で開始し、任意の数のアルファベット、数字、([0-9])、ハイフン(-)、アンダースコア(_)、コロン、(:)、ピリオド(.)のみで記述する必要がある。」(『HTML 4.01仕様書』6 HTMLの基本データ形式)のですが、うちでは、ちゃんと書いてなかったので、
--- C:\awstats-6.7/wwwroot/cgi-bin/awstats.pl   Thu Sep 27 15:05:22 2007
+++ C:\AWStats67t_Jpn/wwwroot/cgi-bin/awstats.pl        Thu Sep 27 13:50:38 2007
@@ -6126,7 +6174,7 @@
        my $regmisc=qr/^$miscquoted/;
        my $regfavico=qr/\/favicon\.ico$/i;
        my $regrobot=qr/^\/robots\.txt$/i;
-       my $regtruncanchor=qr/#(\w*)$/;
+       my $regtruncanchor=qr/#([A-Za-z0-9\-_:\.]*)$/;
        my $regtruncurl=qr/([$URLQuerySeparators])(.*)$/;
        my $regext=qr/\.(\w{1,6})$/;
        my $regdefault;
としています。まじめな方は、
+       my $regtruncanchor=qr/#([A-Za-z][A-Za-z0-9\-_:\.]*)$/;
としましょう。

ダウンロード

 ここで動かしたバージョンをawstats67t_jpn.zipとして置いておきます。Windowsで作成しているので、パーミッションとかはありません。unixで使うときは、パーミッションを適切に付けてください。差分は、下記の通りです。
ホーム(x)