Yahooの携帯サイト用のクローラが変なユーザーエージェントを吐いて困った件
Yahooの携帯サイト用のクローラは下記のようなユーザーエージェントを吐く
DoCoMo/2.0 SH904i(c100;TB;W24H16)(Y!J-AGENT)(robot)
で、PEREの携帯のキャリア情報などを判定するためのNet_UserAgent_Mobile(手元のバージョンは0.30なので古いが・・・)をつかってこのUAを下記のようにしてどのキャリアか判定しようとすると、下記のようなエラーになる。
本来返されるのとは異なるエラー用のオブジェクトが返されてる感じ・・・
<?php require_once('Net/UserAgent/Mobile.php'); $ua = 'DoCoMo/2.0 SH904i(c100;TB;W24H16)(Y!J-AGENT)(robot)'; $agent = Net_UserAgent_Mobile::factory($ua); var_dump($agent->getCarrierShortName()); ?>
PHP Fatal error: Call to undefined method Net_UserAgent_Mobile_Error::getCarrierShortName() in /home/hoge/test.php on line 5 Fatal error: Call to undefined method Net_UserAgent_Mobile_Error::getCarrierShortName() in /home/hoge/test.php on line 5
このエラーを回避するためには下記のようにコードを書き換えればよい
<?php require_once('Net/UserAgent/Mobile.php'); $ua = 'DoCoMo/2.0 SH904i(c100;TB;W24H16)(Y!J-AGENT)(robot)'; $agent = Net_UserAgent_Mobile::factory($ua); if (! method_exists($agent, 'getCarrierShortName')) { var_dump('error'); exit; } var_dump($agent->getCarrierShortName()); ?>
なお、i-modeシミュレータではUAは下記(1)のようになっており問題なく判別できるため、下記(2)や(3)のようなにUAを表記してくれれば、問題なく判別してくれる。
・・・ので、Yahooの中の人対応して頂戴(笑
(1).DoCoMo/2.0 ISIM0801(c100;TB;W24H32)
(2).DoCoMo/2.0 SH904i(c100;TB;W24H16)
(3).DoCoMo/2.0 Y!J-AGENT(c100;TB;W24H16)
なお、DoCoMo以外は下記URLの通りならうまく通る
http://help.yahoo.co.jp/help/jp/dir/dir-36.html
追記
http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html
ちなみに上記URLに書かれた下記のUAは問題なく通る
DoCoMo/2.0 SH902i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)
追記2
中の人と微妙にコンタクトが取れたのでいちおう追記
下記ののようにするのが最適かな?
DoCoMo/2.0 SH904i(c100;TB;W24H16) (compatible; Y!J-AGENT-robot/1.0; http://help.yahoo.co.jp/help/jp/dir/dir-36.html)