名前¶
HTTP::BrowserDetect - HTTPユーザー・エージェント文字列からWebブラウザ、 そのバージョンやプラットホームを判定します。
概要¶
use HTTP::BrowserDetect;
my $browser = new HTTP::BrowserDetect($user_agent_string);
# オペレーティング・システムの判定
if ($browser->windows) {
if ($browser->winnt) ...
if ($brorwser->win95) ...
}
print $browser->mac;
# ブラウザのベンダーとバージョンを判定
print $browser->netscape;
print $browser->ie;
if (browser->major(4)) {
if ($browser->minor() > .5) {
...
}
}
if ($browser->version() > 4) {
...;
}
# 違うユーザー・エージェント文字列を処理
$browser->user_agent($another_user_agent_string);
説明¶
HTTP::BrowserDetectオブジェクトはHTTPユーザー・エージェント文字列に 数多くのテストを行います。これらのテストの結果はオブジェクトのメソッドを 通して利用することができます。
このモジュールは下記から利用することができる、JavaScriptブラウザ判定 コードをベースにしています: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html.
新しいブラウザ判定オブジェクトを生成し、ユーザー・エージェント文字列を設定¶
- new HTTP::BrowserDetect($user_agent_string)
-
コンストラクタをユーザー・エージェント文字列を指定して呼び出すことが出来ます。 そうでなければ、CGIスクリプトを呼び出したときWebサーバーによって設定される $ENV{'HTTP_USER_AGENT'}によって指定される値を利用します。
オブジェクト指向ではないインターフェースも使うことが出来ます。 各メソッドを、HTTP::BrowserDetect::メソッド名()で呼ぶことが出来ます。 こうすると見えないところで作成されるデフォルトのHTTP::BrowserDetect オブジェクトで作業することになります。
- user_agent($user_agent_string)
-
ユーザー・エージェント文字列を返します。パラメータ付きで呼びだすと、 ユーザー・エージェントをリセットし、その文字列を再度テストします。 こうすると、毎回、新しいHTTP::BrowserDetectオブジェクトを 作成することなく、(おそらくログファイルからの)一連の ユーザー・エージェント文字列を処理することが出来ます。
ブラウザのバージョンを判定¶
- major($major)
-
ブラウザ・バージョンの整数部分を返します。 パラメータを渡されると、ブラウザのメジャー・バージョンと同じであれば trueを返します。
- minor($minor)
-
ブラウザ・バージョンの小数部分を、1より小さい浮動小数点数値で返します。 例えばバージョンが4.05であれば、このメソッドは.05を返します;もしバージョンが4.5であれば、 このメソッドは.5を返します。 文字列で返していた前のバージョンからは、ここは動きが変更されています。
パラメータが渡されると、マイナー・バージョンと同じであればtrueを返します。
'Wget/1.4.5'のように、バージョンが複数の小数点を持っている場合、 マイナー・バージョンは2番目の小数点やそこから先の数字や小数点を含みません。
- version($version)
-
浮動小数点数でバージョンを返します。パラメータが渡されると、 ユーザー・エージェント文字列によって指定されたバージョンと同じであれば trueを返します。
- beta($beta)
-
バージョン番号の後ろの数値でない文字で構成される、ベータ・バージョンを 返します。例えばユーザー・エージェント文字列が 'Mozilla/4.0 (compatible; MSIE 5.0b2; Windows NT)'であれば、 'b2'を返します。パラメータが渡されると、 ベータ・バージョンと同じであればtrueを返します。
OSプラットホームとバージョンの判定¶
以下のメソッドを利用することが出来ます。それぞれはtrueまたはfalseを返します。 いくつかのメソッドはオペレーティング・システムのバージョンのための テストも行います。
windows win16 win3x win31 win95 win98 winnt win32 win2k winme
mac mac68k macppc
os2
unix
sun sun4 sun5 suni86 irix irix5 irix6 hpux hpux9 hpux10
aix aix1 aix2 aix3 aix4 linux sco unixware mpras reliant
dec sinix freebsd bsd
vms
amiga
Netscape 4.x以前ではWin98を判定できないかもしれません。Opera 3.0では、 全てのWin32で、ユーザー・エージェント文字列に"Windows 95/NT4"と入っています。 そのためWin95とWinNTを区別することはできません。
- os_string()
-
以下の文字列のいずれか、あるいはundefを返します。このメソッドはHTTP::Headers::UserAgent モジュールとの互換性のためだけに存在しています。
Win95, Win98, WinNT, Mac, Win3x, OS2, Unix, Linux
ブラウザ・ベンダーの判定¶
以下のメソッドを利用することが出来ます。それぞれはtrueまたはfalseを返します。 いくつかのメソッドは、バージョンを別にチェックすることを節約しながら、 ブラウザのバージョンのためのテストも行います。
netscape nav2 nav3 nav4 nav4up nav45 nav45up navgold nav6 nav6up
gecko
ie ie3 ie4 ie4up ie5 ie55
neoplanet neoplanet2
mosaic
aol aol3 aol4 aol5 aol6
webtv
opera
lynx
emacs
staroffice
lotusnotes
icab
konqueror
java
たとえ6とそれが呼ばれていたとしても、Netscape 6はユーザー・エージェント文字列には バージョン番号として5を持っています。nav6 と nav6up はこのクセを正しく扱います。
- browser_string()
-
以下の文字列のいずれか、あるいはundefを返します。
Netscape, MSIE, WebTV, AOL Browser, Opera, Mosaic, Lynx
他のデバイスの判定¶
以下のメソッドを利用することが出来ます。それぞれはtrueまたはfalseを返します。
wap
audrey
iopener
palm
avantgo
ロボットの判定¶
- robot()
-
もしユーザー・エージェントがロボット、スパイダー、クローラあるいは他の 自動化されたWebクライアントのように見えたら、trueを返します。
以下の追加のメソッドを利用することが出来ます。それぞれはtrueまたはfalseを返します。 これがWeb上に存在するロボットの完全なリストというわけでは決してありません。
wget getright yahoo altavista lycos infoseek lwp webcrawler linkexchange slurp google
作者¶
Lee Semel, [email protected]
参考資料¶
"The Ultimate JavaScript Client Sniffer, Version 3.0", http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html.
perl(1), HTTP::Headers, HTTP::Headers::UserAgent.
著作権(COPYRIGHT)¶
Copyright 1999-2001 Lee Semel. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.