#===================================================================== # access cgi UserAgent解析ライブラリ agent.pl (2003/01/08) #===================================================================== # UserAgent 解析処理 sub user_agent { my ($agent_os) = @_; $agent_os =~ s/Windows95/Windows 95/i; $agent_os =~ s/Windows98/Windows 98/i; $agent_os =~ s/Windows ME/Win 9x 4.90/i; $agent_os =~ s/Windows 2000|Windows2000/Windows NT 5.0/i; $agent_os =~ s/Windows XP/Windows NT 5.1/i; my ($os, $agent, $osa) = ('', '', ''); #--------------------------------------------------------------------- # tool 解析 # Google if ($agent_os =~ /Google CHTML Proxy/i) { $agent = $os = 'Google i-mode'; } # Telephone elsif ($agent_os =~ /DoCoMo/i) { $agent = $os = 'i-mode'; } elsif ($agent_os =~ /J-PHONE/i) { $agent = $os = 'J-PHONE'; } elsif ($agent_os =~ /ASTEL/i) { $agent = $os = 'ASTEL'; } elsif ($agent_os =~ /UP\.Browser/i) { $agent = $os = 'EZweb'; } elsif ($agent_os =~ /PDXGW/i) { $agent = $os = 'H"'; } elsif ($agent_os =~ /L-mode/i) { $agent = $os = 'L-mode'; } # Tool elsif ($agent_os =~ /WWWC/i) { $agent = $os = 'WWWC'; } elsif ($agent_os =~ /WWWD/i) { $agent = $os = 'WWWD'; } elsif ($agent_os =~ /INCM/i) { $agent = $os = 'INCM'; } elsif ($agent_os =~ /mamimi/i) { $agent = $os = 'mamimi'; } # Antenna elsif ($agent_os =~ /Hatena Antenna/i) { $agent = $os = 'はてなアンテナ'; } elsif ($agent_os =~ /NATSU-MICAN/i) { $agent = $os = 'なつみかん'; } elsif ($agent_os =~ /MICAN/i) { $agent = $os = 'MICAN'; } elsif ($agent_os =~ /Antenna/i) { $agent = $os = '朝日奈アンテナ'; } elsif ($agent_os =~ /WDB/i) { $agent = $os = 'WDB'; } elsif ($agent_os =~ /TAMATEBAKO/i) { $agent = $os = 'たまてばこ'; } # Validator elsif ($agent_os =~ /Another_HTML-lint/i) { $agent = $os = 'Another HTML-lint'; } elsif ($agent_os =~ /W3C_Validator/i) { $agent = $os = 'W3C Validator'; } elsif ($agent_os =~ /W3C_CSS_Validator/i) { $agent = $os = 'W3C CSS Validator'; } elsif ($agent_os =~ /WDG_Validator/i) { $agent = $os = 'WDG Validator'; } # Web filter elsif ($agent_os =~ /SpaceBison|ShonenKnife|Proxomitron/i) { $agent = $os = 'Proxomitron'; } elsif ($agent_os =~ /Blocked by Norton/i) { $agent = $os = 'Blocked by Norton'; } #--------------------------------------------------------------------- # Game or PDA 解析 # PlayStation 2 or DreamCast # Mozilla/4.0 (PS2; PlayStation BB Navigator 1.0) NetFront/3.0 elsif ($agent_os =~ /PS2; PlayStation/i) { $agent = $os = 'PlayStation 2'; } elsif ($agent_os =~ /DreamPassport/i) { $agent = $os = 'DreamCast'; } # PDA elsif ($agent_os =~ /sharp pda browser/i) { $agent = $os = 'sharp pda browser'; } elsif ($agent_os =~ /AVE-Front/i) { $agent = $os = 'AVE-Front'; } elsif ($agent_os =~ /NetFront/i) { $agent = $os = 'NetFront'; } #--------------------------------------------------------------------- # agent 解析 elsif ($agent_os =~ /Sleipnir/i) { $agent = 'Sleipnir (WinIE)'; $os = 'Windows (Sleipnir)'; } #--------------------------------------------------------------------- # agent 解析 if (!$ua_count) { $agent = $agent_os; } elsif ($ua_view) { # PlayStation 2 or DreamCast if ($agent_os =~ /PlayStation BB Navigator (.+?)\)/i) { $agent = "PlayStation BB Navigator $1"; } elsif ($agent_os =~ /DreamPassport\/(.+?)( |;|\)|$)/i) { $agent = "DreamPassport $1"; } # PDA elsif ($agent_os =~ /sharp pda browser\/(.+?)(\[| |;|\)|$)/i) { $agent = "sharp pda browser $1"; } elsif ($agent_os =~ /AVE-Front\/(.+?)( |;|\)|$)/i) { $agent = "AVE-Front $1"; } elsif ($agent_os =~ /NetFront\/(.+?)( |;|\)|$)/i) { $agent = "NetFront $1"; } # UserAgent elsif ($agent_os =~ /^amaya\/(.+?)( |;|\)|$)/i) { $agent = "Amaya $1"; } elsif ($agent_os =~ /^Lynx\/(.+?) /i) { $agent = "Lynx $1"; } elsif ($agent_os =~ /^w3m\/(.+?)$/i) { $agent = "w3m $1"; } # Linux 系 elsif ($agent_os =~ /Konqueror\/(.+?);/i) { $agent = "Konqueror $1"; } # Mac 系 elsif ($agent_os =~ /iCab .\/(.+?) /i) { $agent = "iCab $1"; } elsif ($agent_os =~ /OmniWeb\/(.+?)( |;|\)|$)/i) { $agent = "OmniWeb $1"; } elsif ($agent_os =~ /Safari\/(.+?)$/i) { $agent = "Safari $1"; } # Win 系 elsif ($agent_os =~ /NetCaptor (.+?)( |;|\)|$)/i) { $agent = "NetCaptor $1"; } # Opera elsif ($agent_os =~ /Opera(\/| )(.+?) /i) { $agent = "Opera $2"; } # IE elsif ($agent_os =~ /Mac/i && $agent_os =~ /MSIE (.+?);/i) { $agent = "MacIE $1"; } elsif ($agent_os =~ /MSIE (.+?);/i) { $agent = "WinIE $1"; } # Netscape 系 elsif ($agent_os =~ /Netscape(\d+\/|\/)(.+?)$/i) { $agent = "Netscape $2"; } elsif ($agent_os =~ /Mozilla\/4(.+?) /i) { $agent = "Netscape 4$1"; } # Mozilla 系 elsif ($agent_os =~ /Mozilla\/5.*? Galeon\/(.+?) Gecko\//i) { $agent = "Galeon $1"; } elsif ($agent_os =~ /Mozilla\/5.*? Nautilus\/(.+?)\) Gecko\//i) { $agent = "Nautilus $1"; } elsif ($agent_os =~ /Mozilla\/5.*? Gecko\/.*? Chimera\/(.+?)$/i) { $agent = "Chimera $1"; } elsif ($agent_os =~ /Mozilla\/5.*? Gecko\/.*? Phoenix\/(.+?)$/i) { $agent = "Phoenix $1"; } elsif ($agent_os =~ /Mozilla\/5.*? rv:(.+?)\) Gecko\//i) { $agent = "Mozilla $1"; } elsif ($agent_os =~ /Gecko\/(\d+)/i) { $agent = "Gecko $1"; } } else { # UserAgent if ($agent_os =~ /^amaya/i) { $agent = 'Amaya'; } elsif ($agent_os =~ /^Lynx/i) { $agent = 'Lynx'; } elsif ($agent_os =~ /^w3m/i) { $agent = 'w3m'; } # Linux 系 elsif ($agent_os =~ /Konqueror/i) { $agent = 'Konqueror'; } # Mac 系 elsif ($agent_os =~ /iCab/i) { $agent = 'iCab'; } elsif ($agent_os =~ /OmniWeb/i) { $agent = 'OmniWeb'; } elsif ($agent_os =~ /Safari/i) { $agent = 'Safari'; } # Win 系 elsif ($agent_os =~ /NetCaptor/i) { $agent = 'NetCaptor'; } # Opera elsif ($agent_os =~ /Opera(\/| )7/i) { $agent = 'Opera 7'; } elsif ($agent_os =~ /Opera(\/| )6/i) { $agent = 'Opera 6'; } elsif ($agent_os =~ /Opera(\/| )5/i) { $agent = 'Opera 5'; } # MacIE elsif ($agent_os =~ /Mac/i && $agent_os =~ /MSIE 5\.5/i) { $agent = 'MacIE 5.5'; } elsif ($agent_os =~ /Mac/i && $agent_os =~ /MSIE 5\.2/i) { $agent = 'MacIE 5.2'; } elsif ($agent_os =~ /Mac/i && $agent_os =~ /MSIE 5\.1/i) { $agent = 'MacIE 5.1'; } elsif ($agent_os =~ /Mac/i && $agent_os =~ /MSIE 5\.0/i) { $agent = 'MacIE 5'; } elsif ($agent_os =~ /Mac/i && $agent_os =~ /MSIE 4\.5/i) { $agent = 'MacIE 4.5'; } elsif ($agent_os =~ /Mac/i && $agent_os =~ /MSIE 4\.0/i) { $agent = 'MacIE 4'; } # WinIE elsif ($agent_os =~ /MSIE 7\.0/i) { $agent = 'WinIE 7.0'; } elsif ($agent_os =~ /MSIE 6\.0/i) { $agent = 'WinIE 6.0'; } elsif ($agent_os =~ /MSIE 5\.5/i) { $agent = 'WinIE 5.5'; } elsif ($agent_os =~ /MSIE 5\.0/i) { $agent = 'WinIE 5'; } elsif ($agent_os =~ /MSIE 4/i) { $agent = 'WinIE 4'; } elsif ($agent_os =~ /MSIE 3/i) { $agent = 'WinIE 3'; } # Netscape 系 elsif ($agent_os =~ /Netscape\/7/i) { $agent = 'Netscape 7'; } elsif ($agent_os =~ /Netscape6/i) { $agent = 'Netscape 6'; } elsif ($agent_os =~ /Mozilla\/4/i) { $agent = 'Netscape 4'; } # Mozilla 系 elsif ($agent_os =~ /Mozilla\/5.*? Galeon\/.*? Gecko\//i) { $agent = 'Galeon'; } elsif ($agent_os =~ /Mozilla\/5.*? Nautilus\/.*? Gecko\//i) { $agent = 'Nautilus'; } elsif ($agent_os =~ /Mozilla\/5.*? Gecko\/.*? Chimera\//i) { $agent = 'Chimera'; } elsif ($agent_os =~ /Mozilla\/5.*? Gecko\/.*? Phoenix\//i) { $agent = 'Phoenix'; } elsif ($agent_os =~ /Mozilla\/5.*? rv:.*? Gecko\//i) { $agent = 'Mozilla'; } elsif ($agent_os =~ /Gecko/i) { $agent = 'Gecko'; } } #--------------------------------------------------------------------- # os 解析 # Mac if ($agent_os =~ /Mac OS X/i) { $os = 'Mac OS X'; } elsif ($agent_os =~ /Mac/i) { $os = 'Mac'; } elsif ($agent_os =~ /Mozilla\/5.*? Gecko\/.*? Chimera/i) { $os = "Mac OS X"; } # Win elsif ($agent_os =~ /Win 9x 4\.90/i) { $os = 'WinMe'; } elsif ($agent_os =~ /Windows 98|Win98/i) { $os = 'Win98'; } elsif ($agent_os =~ /Windows 95|Win95/i) { $os = 'Win95'; } # WinNT elsif ($agent_os =~ /Windows CE|WinCE/i) { $os = 'WinCE'; } elsif ($agent_os =~ /Windows NT 5\.1/i) { $os = 'WinXP'; } elsif ($agent_os =~ /Windows NT 5\.0/i) { $os = 'Win2000'; } elsif ($agent_os =~ /Windows NT|WinNT/i) { $os = 'WinNT'; } # Unix elsif ($agent_os =~ /Linux/i) { $os = 'Linux'; } elsif ($agent_os =~ /FreeBSD/i) { $os = 'FreeBSD'; } elsif ($agent_os =~ /\(X1|X11\)|Sun/i) { $os = 'UNIX'; } #--------------------------------------------------------------------- # other if (!$agent) { if ($ua_others) { $agent = '[others]'; } else { $agent = $agent_os; } } if (!$os) { if ($os_others) { $os = '[others]'; } else { $os = $agent_os; } } #--------------------------------------------------------------------- # agent + os if ($ua_count || $ua_view) { if ($ua_others && $agent eq '[others]') { $osa = '[others]'; } elsif ($ua_others && $os eq '[others]') { $osa = "$agent [others]"; } elsif ($ua_others && $os eq $agent_os) { $osa = "$agent [others]"; } elsif (!$ua_others && $os eq '[others]') { $osa = $agent_os; } elsif (!$ua_others && $os eq $agent_os) { $osa = $agent_os; } elsif (!$ua_others && $agent eq $agent_os) { $osa = $agent_os; } elsif ($agent eq $os) { $osa = $agent; } else { $osa = "$agent [$os]"; } } #--------------------------------------------------------------------- return ($agent, $os, $osa); } #===================================================================== 1; # return