UserAgent判別部分
# X-boxの場合 if(/X-box/){ $Browser{'X box'}{0} += $c; # MSN Explorerらしい } elsif(/MSN/) { $Browser{'MSN Explorer'}{0} += $c; # Operaというブラウザ } elsif(/Opera\s*(\d\.\d\d?)/) { $Browser{'Opera'}{$1} += $c; # NN判別 } elsif(/Netscape\s*(\d(\.\d)?)\d*/) { $Browser{'Netscape'}{$1} += $c; # 巡回ソフト } elsif(/(Internet|Download) Ninja\s*(\d\.\d)/){ $Browser{'Internet Ninja'}{$1} += $c; } elsif(/PerMan Surfer\s*(\d\.\d)/){ $Browser{'波乗り太郎'}{$1} += $c; # IE判別 } elsif(/MSP?IE\s*(\d\.\d)/) { $Browser{'Internet Explorer'}{$1} += $c; # IEキャッチ } elsif(/MSP?IE|compatible|Internet Explorer/) { $Browser{'Internet Explorer'}{0} += $c; # NNの場合3桁表記を行っている場合が多い } elsif(/Mozilla\/(\d\.\d)\d+/) { $Browser{'Netscape'}{$1} += $c; # ドリームキャスト } elsif(/(Dream|Sonic)Passport\/(\d\.\d\d?)/) { $Browser{'ドリームキャスト'}{$1} += $c; # Microsoft製品からの場合 } elsif(/Microsoft/) { $Browser{'Microsoft 製品'}{0} += $c; # 携帯を分別 } elsif(/DoCoMo/) { $Browser{'携帯'}{'DoCoMo'} += $c; } elsif(/J-PHONE|Vodafone/i) { $Browser{'携帯'}{'Vodafone'} += $c; } elsif(/UP\.Browser/) { $Browser{'携帯'}{'au'} += $c; # Mozilla.orgで開発中のブラウザ } elsif(/Gecko/) { if(/rv\:(\d.\d)/){ $Browser{'Gecko'}{$1} += $c; } else { $Browser{'Gecko'}{0} += $c; } # Lynx } elsif(/Lynx/) { $Browser{'Lynx'}{0} += $c; # ホームページビルダーからのアクセス } elsif(/IBM\sHomePage\sBuilder/) { $Browser{'IBM ホームページビルダー'}{0} += $c; # Sleipnir } elsif(/Sleipnir\s*(Version\s)?(\d\.\d\d?)/) { $Browser{'Sleipnir'}{$1} += $c; # ブラウザ? } elsif(/Pockey\/(\d\.\d)/) { $Browser{'Pockey'}{$1} += $c; # NNの場合の表記(良くある表現) } elsif(/(I|U)(\;|\))/&&/Mozilla\/(\d\.\d)/) { $Browser{'Netscape'}{$1} += $c; # きわどい場合 } else { $Browser{'その他'}{0} += $c; } #------------------------OS判別------------------------# # Windows系の場合 if(/Win(dows)?\s?(..)\s?(\d.?.\d)?/) { # 32bitになったのは98〜? if($2 eq '32'){ $OS{'Windows'}{'98'} += $c; # 16bitだから95? } elsif($2 eq '16'){ $OS{'Windows'}{'95'} += $c; # Windows CEから } elsif($2 eq 'CE'){ $OS{'Windows'}{'CE'} += $c; # Windows NT系の場合 } elsif($2 eq 'NT'){ # Windows XP? if($3 eq '5.1'){ $OS{'Windows'}{'XP'} += $c; # Windows 2000 } elsif($3 eq '5.0'){ $OS{'Windows'}{'2000'} += $c; # その他Windows NT系 } else { $OS{'Windows'}{'NT ' . $3} += $c; } # Windows 2000 } elsif($2 eq '20'||$2 eq '2k') { $OS{'Windows'}{'2000'} += $c; # Windows 98 SE? } elsif($2 eq '98' && $_ =~ /Win\s9x/) { $OS{'Windows'}{'98SE'} += $c; # Windowsしか分からない場合 } elsif($2 =~ /\;/) { $OS{'Windows'} += $c; # Windows系の何たら } else { $OS{'Windows'}{$2} += $c; } # Windowsしか分からない場合 } elsif(/Windows/){ $OS{'Windows'} += $c; # たぶん巡回ソフトで情報を吐かない奴 } elsif(/Internet Ninja/){ $OS{'巡回ソフト'} += $c; # ドリキャ } elsif(/(Dream|Sonic)Passport/) { $OS{'ドリームキャスト'} += $c; # 携帯 } elsif(/DoCoMo|J-PHONE|Vodafone|UP\.Browser/) { $OS{'携帯'} += $c; # マックでしょうw } elsif(/Mac/) { $OS{'Mac OS'} += $c; # Unixの場合 } elsif(/Unix/) { $OS{'UNIX'} += $c; # RedHatの場合 } elsif(/RedHat/) { $OS{'RedHat'} += $c; # Linuxの場合 } elsif(/Linux/) { $OS{'Linux'} += $c; # SunOSの場合 } elsif(/SunOS/) { $OS{'SunOS'} += $c; # FreeBSD or BSD or NetBSD の場合 } elsif(/BSD/) { $OS{'BSD'} += $c; # 分からない場合 } else { $OS{'不明'} += $c; #$OS{$_} += $c; }
結構バージョンが古いので柔軟に対応できるかは不明。