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*****