
使った材料
目的
User-Agentのダミーデータを生成し、生成した値を解析出力する。
誰得な目的だが、私事で必要になったために作成した。
Fakerライブラリの導入
Laravelのcomposer.jsonが置かれている階層で下記を実行。
$ composer require fzaninotto/fakerFakerは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 UserAgentControllerUserAgentController.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
)上記のような出力結果ならば完成です。ただ前述した通り、解析結果についてはうまくいっていない場合も多々あります。なぜならば、バージョン表記自体もダミーデータなので、解析ライブラリ制作者も意図していないケースがあって当然だと思います。
他の解析ライブラリも試してみますが、とりあえずこれは完成ということでおしまい。


Be the first to comment