HTTP-BrowserDetect-0.97 > HTTP::BrowserDetect

名前

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, lee@semel.net

参考資料

"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.