[Codeigniter-users] User_Agent ライブラリのis_robot()がうまく動作しない?

Back to archive index

webma****@cilab***** webma****@cilab*****
2010年 2月 13日 (土) 03:42:46 JST


cilabです。


CI1.7.2の User_Agent ライブラリの is_robot() についてなのです
が、Googleボットなどがロボットとして判別されず困っています。

application/config/user_agents.phpは、日本語パック1.7.2のも
のをデフォルトのまま変えず、そのまま使用しています。

※ よくアクセスしてくるボットを概ね判別できれば問題ないのです
が、ボットの定義は後日書き足すつもりです。


うまく動かない原因を見ていたのですが、User_Agent ライブラリでは、
コンストラクタの中で呼ばれる_compile_data()メソッドで、
browser、robot、mobileの順にユーザエージェントを判別して、判別
成功した時点で処理中断。browser判別成功の場合だけは、mobileも
続けて判別というようになっているように見えます。


GoogleボットのUserAgentは、一例で下のようなものですが、

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)


デフォルトの設定(application/config/user_agents.php)では、


$browsers = array(
  'Opera'    =>  'Opera',
  …
  'Mozilla'  =>  'Mozilla',
  …
);


というようになっているので、「Mozilla」を含むGoogleボットの
UserAgent文字列は 最初に、is_browser == TRUE と判断されて、
robotの判別をする前に処理を終えてしまうように思えます。

ひとまず、ライブラリを拡張・オーバーライドで、robotを先に検
出するようにして問題が回避できているようなのですが、文字列の
パターンマッチが絡んでくると思わぬ見落としがありそうで、確
信が持てず…このやり方で大丈夫でしょうか?

これは、バグでしょうか? それとも、デフォルトの設定の問題?
単に何か見落としがあるだけかもしれません…

皆様のお知恵をお貸しください。


────────────
CILab
webma****@cilab*****




Codeigniter-users メーリングリストの案内
Back to archive index