オフィス狛 技術部の mmm(むー)です。
突然ですが、Google Analytics を使用していますか?
弊社では、Laravel のプロジェクトにて、Google Analytics で取得した値を集計する処理があります。先日、Google Analytics の古いバージョンであるUA(Universal Analytics)から、GA4(Google Analytics 4)へ移行しましたので、その時の備忘録を残しておこうと思います。
※UA(Universal Analytics)は2023年7月1日にサービスが終了しました。
(参考:
ユニバーサル アナリティクスについて )
前提条件
Google Analytics 4 の設定が完了していること。
■ Laravel バージョン
$ php artisan -V
Laravel Framework 8.27.0
■ Comporser バージョン
$ composer --version
Composer version 2.4.1 2022-08-20 11:44:50
google/analytics-data のインストール
google/analytics-data をインストールします。
composer require google/analytics-data
Google Analytics API を実行するためのコードを記載します。
use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;
use Google\Analytics\Data\V1beta\OrderBy;
use Google\Analytics\Data\V1beta\OrderBy\MetricOrderBy;
// GAコンソール画面にてサービスアカウントの認証情報を確認し、取得してください。
// ファイル名と格納場所は一例となりますので、ご自身の環境に合わせて値を修正してください。
$jsonPath = storage_path('app/analytics/service-account-credentials.json');
// 認証用のライブラリで getenv が使用されているため、putenv の使用が必須のようです。
putenv("GOOGLE_APPLICATION_CREDENTIALS=".$jsonPath);
// GAのコンソール画面にてプロパティIDの値を確認し、ご自身の環境に合わせて値を修正してください。
$propertyId = 12345;
$client = new BetaAnalyticsDataClient();
// Google Analytics API を実行します。(GA4)
$response = $client->runReport([
'property' => "properties/{$propertyId}",
// 取得期間
'dateRanges' => [
new DateRange([
'start_date' => '2023-07-01',
'end_date' => '2023-07-02',
])
],
// ディメンション
'dimensions' => [new Dimension(['name' => 'pagePath'])],
// 指標
'metrics' => [new Metric(['name' => 'screenPageViews'])],
// ソート
'orderBys' => [
new OrderBy([
'metric' => new MetricOrderBy(
[
'metric_name' => 'screenPageViews'
]
),
'desc' => true
])
],
]);
// 取得した値を処理します。例となりますので、具体的な処理については省略します。
foreach ($response->getRows() as $row) {
// ディメンションの値
foreach ($row->getDimensionValues() as $v) {
$pagePath = $v->getValue();
}
// 指標の値
foreach ($row->getMetricValues() as $v) {
$screenPageViews = $v->getValue();
}
}
■補足(コードについて)
service-account-credentials.json には以下のような値の設定が必要となります。ご自身の環境に合わせて値を設定してください。
// 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": "..."
}
ディメンションと指標は、公式ページを参考にご自身が必要なものを設定してください。上記の例では、各ページごとのビューを取得しています。
(参考:
API のディメンションと指標 )
■補足(エラーが発生した場合)
この修正をおこなっている時に遭遇したエラーについて、記載します。
1. Google Analytics Data API が無効になっているエラー
下記エラーが表示されている場合、Google Analytics Data API を使用したことがなく、無効になっていることが原因ですので、メッセージに記載されている URL にアクセスして API を有効にしてください。
(「..12345..」の部分は本来プロジェクトのIDとなります)
Google Analytics Data API has not been used in project ..12345.. before or it is disabled.
Enable it by visiting https://console.developers.google.com/apis/api/analyticsdata.googleapis.com/overview?project=..12345.. then retry.
If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
2. bcmath がインストールされていないエラー
下記エラーが表示されている場合、bcmath が入っていないことが原因ですので、サーバーにてインストールを行なってください。(Apache を使用している場合、リロードも行なってください。)
Call to undefined function Google\Protobuf\Internal\bccomp()
■参考サイト
・
Google Analytics Data for PHP
・
google-cloud-php
・
Analytics Data API の概要
以上となります。
参考にして頂ければ幸いです。
Google Analytics
,
Laravel
,
PHP