狛ログ

2022年9月30日金曜日

laravel-analyticsを使用して、Universal Analyticsの値を取得する方法。


オフィス狛 技術部の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/

以上となります。
参考にして頂ければ幸いです。

,

0 件のコメント:

コメントを投稿