PHP でクローラー判定する
(参考)
http://memorandum.yamasnet.com/archives/Post-217.html
Webサーバへのリクエストがクローラーかどうかを判定したい。
今回は、リクエストヘッダーの User-Agent で判定する。
get_browser() を使う
PHP では、get_browser() 関数を使うと簡単。
<?php function isCrawler($ua = null) { $br = get_browser($ua, true); return ($br['crawler'] || $br['platform'] === 'unknown'); }
ただし、PHPのマニュアルにあるとおり、ブラウザ情報(php_browscap.ini)をここ から取得し、
php.ini に
[browscap] browscap = /path/to/php_browscap.ini
と設定しておく必要がある。
Browscap クラスを使う
https://github.com/garetjax/phpbrowscap
にある、Browscap クラスを使うと browscap.ini を自動的に取得してくれる。
このクラスなら php.ini が設定変更できないレンタルサーバでも利用可能。
get_browser() 版を無理やり書き換えるとこんな感じ。
<?php require 'path/to/Browscap.php'; function isCralwer($ua = null) { $browscap = new Browscap('path/to/cache/dir/'); $br = $browscap->getBrowser(null, true); return ($br['Crawler'] || $br['Platform'] === 'unknown'); }
誤判定について
get_browser() によるクローラー判定に 'crawler' だけでは不十分なため、 'platform' をチェックしているが、携帯ブラウザがチェックに引っかかってしまうことに注意。
携帯は、それに特化したライブラリがいくつかあるので、そちらを利用したほうがいいだろう。