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

Back to archive index

Kenji Suzuki kenji****@gmail*****
2010年 2月 13日 (土) 11:01:04 JST


Kenji です。


On Sat, 13 Feb 2010 03:42:46 +0900
<webma****@cilab*****> wrote:

> 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を先に検
> 出するようにして問題が回避できているようなのですが、文字列の
> パターンマッチが絡んでくると思わぬ見落としがありそうで、確
> 信が持てず…このやり方で大丈夫でしょうか?
> 
> これは、バグでしょうか? それとも、デフォルトの設定の問題?
> 単に何か見落としがあるだけかもしれません…

詳しく見ていませんが、確かにそのようなロジックになっていたと
思いますので、ロジックの仕様に問題がありそうですね。

影響範囲が広いので、本家フォーラムかバグトラッカーになにか
出てませんでしょうか?

もしなければ、詳細を調査して、本家フォーラムに投げた方が
よさそうですね。


// Kenji


 
> 皆様のお知恵をお貸しください。
> 
> 
> ────────────
> CILab
> webma****@cilab*****
> 
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users




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