⚠この記事はブログ移転前のアーカイブです

アクセスしてきたユーザーのUAをパースしてOS、バージョン、ブラウザ等を検出。更に膨大なデータベースからデバイス名まで解析できる「piwik/ DeviceDetector」を使ってみようと思います。

必要なもの

インストールにComposerが必要です。

piwik/DeviceDetector

Composerでインストール

$ 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入れなくていいです。

インストールが完了すると

.
├─ 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」 ができます。

次にプロジェクトに読み込ませます。

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

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

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では読み込み速度改善のためにキャッシュ機能を備えていますので一度お試し下さい