【Laravel】Fakerを使って偽のUserAgentを生成し解析する【PHP】

Laravelライブラリを使ってUserAgentをダミーデータで出力解析する

使った材料

目的

User-Agentのダミーデータを生成し、生成した値を解析出力する。

誰得な目的だが、私事で必要になったために作成した。

Fakerライブラリの導入

Laravelのcomposer.jsonが置かれている階層で下記を実行。

$ composer require fzaninotto/faker

FakerはUser-Agentに限らず、様々なダミーデータを生成してくれる。今回は言語問わずな内容だが、日本語に設定したい場合は、configディレクトリ内のapp.phpにて下記のように「faker_locale」を修正しておく必要がある。

<?php 
return [ 
  'faker_locale' => 'ja_JP',
];
?>

解析ライブラリの導入

検索していて一番先に見つかったので選んだのだが、何とも言えない解析結果だった。使わせてもらって言うのもあれだが、もっと良いライブラリがおそらくあると思われる。

$ composer require "nebed/laravel-ua-parser"

config/app.phpにてServiceProvider追加する。「providers」の中身は元々他にも入っているため「Nebed\UserAgent\UserAgentServiceProvider::class」の一行を追加する。

<?php 
return [
  'providers' => [
    Nebed\UserAgent\UserAgentServiceProvider::class,
  ]
];
?>

上記で追加した同じファイルであるconfig/app.phpにて、下記のように「aliases」に「UA」として一行追加する。

<?php 
return [
  'aliases' => [
    'UA' => Nebed\UserAgent\Facades\UserAgent::class,
  ]
];
?>

LaravelのController作成

今回はbladeを使わずに進め、最終的に適当なURLを叩いて表示されるところまでをご紹介しますので、必要な方はこの時点でbladeを作成しておくと良いと思います。

まず下記のコマンドでControllerを作成します。

$ php artisan make:controller UserAgentController

UserAgentController.phpにて先ほど導入したライブラリを下記のように使います。

<?php 
namespace App\Http\Controllers;

use Illuminate\Database\Eloquent\Factories\Factory;
use UA;

class UserAgentController extends Controller
{
    private  $useragent;

    public function __construct()
    {
        $faker             = \Faker\Factory::create();
        $this->useragent   = $faker->userAgent;
    }// __construct

    /**
     * ダミーUserAgentを返す
    */
    public function show()
    {
        return $this->useragent;
    }// show

    /**
     * ダミーUserAgentの解析結果を返す
    */
    public function parse()
    {
        $resArray = UA::parse($this->useragent);
        return $resArray;
    }// parse

}// UserAgentController

これで出力する準備が整いました。

ダミーUser-Agentを出力し、解析する

bladeは作成しませんでしたので、ためしにroutes/web.phpにて出力したいと思います。

<?php
use Illuminate\Support\Facades\Route;

Route::get('/User-Agent', function () {
    $useragent = new App\Http\Controllers\UserAgentController();
    echo $useragent->show();
    echo "<pre>";
    print_r($useragent->parse());
    echo "</pre>";
	exit();
});
?>

Docker環境で作成しましたので「http://localhost/User-Agent」へアクセスをしてみる。

Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_7_4 rv:6.0) Gecko/20190905 Firefox/36.0

UAParser\Result\Client Object
(
    [ua] => UAParser\Result\UserAgent Object
        (
            [family] => Firefox
            [major] => 36
            [minor] => 0
            [patch] => 
        )

    [os] => UAParser\Result\OperatingSystem Object
        (
            [family] => Mac OS X
            [major] => 10
            [minor] => 7
            [patch] => 4
            [patchMinor] => 
        )

    [device] => UAParser\Result\Device Object
        (
            [family] => Mac
            [brand] => Apple
            [model] => Mac
        )

    [originalUserAgent] => Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_7_4 rv:6.0) Gecko/20190905 Firefox/36.0
)

上記のような出力結果ならば完成です。ただ前述した通り、解析結果についてはうまくいっていない場合も多々あります。なぜならば、バージョン表記自体もダミーデータなので、解析ライブラリ制作者も意図していないケースがあって当然だと思います。

他の解析ライブラリも試してみますが、とりあえずこれは完成ということでおしまい。

About Naoki 24 Articles
デザインを含めたフロントエンドから、インフラ含めたバックエンドまで広く浅く活動しているエンジニアです。主にSaasの開発・営業・運営管理などをしております。毎日デスマーチがモットーなブラックエンジニアです。 私が管理しているクラウドソフトウェアがこちらです→まとめツール倶楽部『MTCsystem』

Be the first to comment

Leave a Reply

Your email address will not be published.


*


CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)