アクセスしてきたユーザーのUAをパースしてOS、バージョン、ブラウザ等を検出。更に膨大なデータベースからデバイス名まで解析できる「piwik/ DeviceDetector」を使ってみようと思います。
必要なもの
インストールにComposerが必要です。
Composerでインストール
1 2 3 4 5 | $ cd /var/share/nginx/html $ git clone https://github.com/piwik/device-detector.git $ cd device-detector $ sudo curl -sS https://getcomposer.org/installer | sudo php $ php composer.phar install |
GitHubからソースを引っ張ってきてComposerをインストールします。グローバルにインストールしている人は新たにComposer入れなくていいです。
インストールが完了すると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | . ├─ Cache │ ├─ Cache.php │ └─ StaticCache.php ├─ composer.json ├─ composer.lock ├─ composer.phar ├─ DeviceDetector.php ├─ misc │ ├─ readme-report.php │ └─ test.php ├─ Parser │ ├─ Bot.php │ ├─ Client │ ├─ Device │ ├─ OperatingSystem.php │ ├─ ParserAbstract.php │ └─ VendorFragment.php ├─ phpunit.xml.dist ├─ README.md ├─ regexes │ ├─ bots.yml │ ├─ client │ ├─ device │ ├─ oss.yml │ └─ vendorfragments.yml ├─ Tests │ ├─ Cache │ ├─ DeviceDetectorTest.php │ ├─ fixtures │ └─ Parser └─ vendor ├─ autoload.php ├─ bin ├─ composer ├─ fabpot ├─ mustangostang ├─ phpunit ├─ sebastian └─ symfony |
vendorディレクトリに「autoload.php」 ができます。
次にプロジェクトに読み込ませます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php require_once './device-detector/vendor/autoload.php'; use DeviceDetector\DeviceDetector; use DeviceDetector\Parser\Device\DeviceParserAbstract; DeviceParserAbstract::setVersionTruncation(DeviceParserAbstract::VERSION_TRUNCATION_NONE); $userAgent=$_SERVER['HTTP_USER_AGENT']; $dd = new DeviceDetector($userAgent); $ua=$dd->getInfoFromUserAgent($userAgent); var_dump($ua); ?> |
PC、スマホでアクセスしてみる
Windows 8.1
1 | array(6) { ["user_agent"]=> string(72) "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0" ["os"]=> array(3) { ["name"]=> string(7) "Windows" ["short_name"]=> string(3) "WIN" ["version"]=> string(3) "8.1" } ["client"]=> array(5) { ["type"]=> string(7) "browser" ["name"]=> string(7) "Firefox" ["short_name"]=> string(2) "FF" ["version"]=> string(4) "39.0" ["engine"]=> string(5) "Gecko" } ["device"]=> array(3) { ["type"]=> string(7) "desktop" ["brand"]=> string(0) "" ["model"]=> string(0) "" } ["os_family"]=> string(7) "Windows" ["browser_family"]=> string(7) "Firefox" } |
Windows のOSバージョン、ブラウザの種類とバージョン、略称まで入っていますね。
Android 5.0
1 | array(6) { ["user_agent"]=> string(140) "Mozilla/5.0 (Linux; Android 5.0.2; C6833 Build/14.5.A.0.270) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36" ["os"]=> array(3) { ["name"]=> string(7) "Android" ["short_name"]=> string(3) "AND" ["version"]=> string(5) "5.0.2" } ["client"]=> array(5) { ["type"]=> string(7) "browser" ["name"]=> string(13) "Chrome Mobile" ["short_name"]=> string(2) "CM" ["version"]=> string(12) "43.0.2357.93" ["engine"]=> string(5) "Blink" } ["device"]=> array(3) { ["type"]=> string(7) "phablet" ["brand"]=> string(2) "SO" ["model"]=> string(14) "Xperia Z Ultra" } ["os_family"]=> string(7) "Android" ["browser_family"]=> string(6) "Chrome" } |
ユーザーエージェントには記述されていないXperia Z Ultraの文字まであります。モデル名がC6833なのでDevice Detectorのデータベースに入っていたのでしょう。スマートフォンではなくファブレット判定が出ています。
かなり簡単に解析可能
PC、スマートフォンのほかネットワーク機能付きの音楽プレーヤーまで対応していてすごいです。これの更新が止まってしまったらすぐ使い物にならなくなってしまいますが。
ちなみに解析のためにページの読み込みが若干長くなります。遅いと感じたらキャッシュ機能を使うといいかもしれません。DeviceDetectorでは読み込み速度改善のためにキャッシュ機能を備えていますので一度お試し下さい
こんにちは、UAの扱い方について思案していたところ本ページ(https://wp.bmemo.pw/509)を見つけ勉強させていただきました。
早速ですが、一点誤植を見つけましたのでご報告します。
WEBアプリ側から渡される値からUAを解析サンプルソースの2行目
vender
↓
vendor
よろしくお願いします。
修正しました。ご指摘ありがとうございました!