オフィス狛 技術部のmmm(むー)です。
今回、LaravelからUniversal Analyticsの値を取得する必要があり、調査したため記事に残します。
※ちなみに、Universal Analyticsは2023年7月1日にサービスが終了されるので、時間に余裕があり移行できる場合、Google Analytics 4を使用しましょう。
前提条件
Universal Analyticsの設定が完了していること■Laravel バージョン
$ php artisan -V
Laravel Framework 8.27.0
■Comporser バージョン
$ composer --version
Composer version 2.4.1 2022-08-20 11:44:50
1. laravel-analyticsをインストールする
laravel-analyticsをインストールします。# laravel-analytics(バージョン 4.0.1)をインストールする
$ composer require spatie/laravel-analytics 4.0.1
■補足
・ 2022/09/07現在、laravel-analyticsの最新バージョンは 4.1.0ですが、今回のプロジェクトのLaravelのバージョンが8で対応していなかったので、1つ下のバージョンの 4.0.1をインストールしています。・Laravel 9を使用している場合、(試していませんが)最新バージョンを使用できるので、バージョン指定なしで、composer require spatie/laravel-analyticsを代わりに実行してください。
■エラーが起きた場合
・composerのバージョンが1でメモリエラーになる場合、composerを2に更新すると解決することがあるようです。# comporserのバージョンを「1」から「2」に更新する
$ docker exec -it yanase-ybs_app_1 composer self-update --2
・また関連してインストールされるパッケージが多く、私の環境の場合、google/apiclient-servicesをインストールしている最中にタイムアウトしました。その場合、laravel-analyticsをインストールするコマンドをもう一度実行すると、google/apiclient-servicesだけ差分でインストールできます。
# laravel-analyticsをインストールした際のエラーログ
$ composer require spatie/laravel-analytics 4.0.1
〜省略〜
- Installing symfony/cache (v5.4.11): Extracting archive
- Installing spatie/laravel-package-tools (1.12.1): Extracting archive
- Installing google/apiclient (v2.12.1): Extracting archive
- Installing spatie/laravel-analytics (4.0.1): Extracting archive
103/104 [===========================>] 99% Install of google/apiclient-services failed
In Filesystem.php line 314:
Could not delete /work/vendor/composer/e8a27dbc/googleapis-google-api-php-client-services-28c4208/src/SASPortalTesting/Resource:
2. laravel-analyticsを使用するための設定を行う
下記コマンドを実行すると、設定ファイル(config/analytics.php)が作成されます。# 設定ファイル(config/analytics.php)を作成する
$ php artisan vendor:publish --provider="Spatie\Analytics\AnalyticsServiceProvider"
config/analytics.phpの中身を見ると下記の様になっています。
// config/analytics.php
return [
/*
* The view id of which you want to display data.
*/
'view_id' => env('ANALYTICS_VIEW_ID'),
/*
* Path to the client secret json file. Take a look at the README of this package
* to learn how to get this file. You can also pass the credentials as an array
* instead of a file path.
*/
'service_account_credentials_json' => storage_path('app/analytics/service-account-credentials.json'),
/*
* The amount of minutes the Google API responses will be cached.
* If you set this to zero, the responses won't be cached at all.
*/
'cache_lifetime_in_minutes' => 60 * 24,
/*
* Here you may configure the "store" that the underlying Google_Client will
* use to store it's data. You may also add extra parameters that will
* be passed on setCacheConfig (see docs for google-api-php-client).
*
* Optional parameters: "lifetime", "prefix"
*/
'cache' => [
'store' => 'file',
],
];
まず、view_idを設定する必要があるので、.env に値をUniversal Analyticsの画面で取得した値を記載してください。 (下記は例となりますので、ご自身の環境に合わせて値を修正してください。)
// .env
ANALYTICS_VIEW_ID=1234567
次に、service_account_credentials_jsonを設定する必要があるので、app/analytics/フォルダの配下にservice-account-credentials.jsonファイルを作成して、Universal Analyticsの画面で取得した値を記載してください。 (下記は例となりますので、ご自身の環境に合わせて値を修正してください。)
// app/analytics/service-account-credentials.json
{
"type": "service_account",
"project_id": "testapi",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "1234",
"auth_uri": "...",
"token_uri": "...",
"auth_provider_x509_cert_url": "...",
"client_x509_cert_url": "..."
}
3. Universal Analyticsの値を取得する
下記に、一例ですが値を取得する方法を記載します。namespace App\Console\Commands;
use Illuminate\Console\Command;
use Analytics;
use Spatie\Analytics\Period;
class TestCommand extends Command
{
// 例1:
// 1日分の訪問者数とページビューを取得します。
// こちらはlaravel-analyticsが用意しているメソッドとなります。
$data1 = Analytics::fetchVisitorsAndPageViews(Period::days(1));
// 例2:
// 期間を指定して、7日分の訪問者数とページビューを取得します。
// ちなみにライブラリ内で日付に変換されるので、時間は設定できません。
$periodFrom = Carbon::now()->subDay(7);
$periodTo = Carbon::now();
$period = Period::create($periodFrom, $periodTo);
$data2 = Analytics::fetchVisitorsAndPageViews($period);
// 例3:
// 取得する指標、取得項目、ソート順をカスタムしたい場合は、performQuery()を使用してください。
// 指標(合計イベント数)
$metrics = 'ga:totalEvents';
// 取得項目(イベントラベル)、ソート(合計イベント数の降順)
$item = [
'dimensions' => 'ga:eventLabel',
'sort' => '-ga:totalEvents',
];
$data3 = Analytics::performQuery(Period::days(3), $metrics, $item);
}
fetchVisitorsAndPageViews()以外のメソッドについては、公式ページを確認してみてください。
公式が用意しているメソッドで、項目が取得できない場合はperformQuery()メソッドを使用してください。
指定する項目は、下記から必要なものを指定してください。
■参考サイト:https://ga-dev-tools.web.app/dimensions-metrics-explorer/
以上となります。
参考にして頂ければ幸いです。
Laravel , PHP
0 件のコメント:
コメントを投稿