エキサイト株式会社の武藤です。
GA3(ユニバーサルアナリティクス、UA)の終了が2023年7月1日となっており、いよいよ期日が迫ってきました。 引き続きGAを利用するためには、GA4への変更が必要になります。
私が担当しているサービスでは、バッチ処理をPHPで実装しています。 一部バッチでは、GA3 APIを利用してランキングの集計を行っています。
今回は、PHP実装におけるGA4 APIへの切り替えについて説明します。
Google Analytics Data API
Google Analytics Data APIは、GA4のデータを取得するためのAPIです。 developers.google.com
以下に公式ドキュメントの内容を引用します。
Why do I need to migrate
If your application needs to access data in a Google Analytics 4 property, it is necessary to update the code to use the Data API v1, since the Reporting API v4 can only access properties created with Universal Analytics.
GA3までは、Google Analytics Reporting APIからデータを取得できました。 Reporting APIではGA4のデータを取得できないため、Data APIへの移行が必要になります。
Google Analytics Reporting API は現在v4まであります。このv4表記がGA4に対応していそうに見えますが、実際にはできないので注意が必要です。
GA4 APIを利用するための準備
まずは、Google Coud PlatformのコンソールからGA4 APIを有効化します。
PHPでGA4 APIを操作するために、クライアントライブラリを使用します。 クライアントライブラリの操作には、認証情報が必要となりますので、サービスアカウントと認証情報を作成します。
最後に、サービスアカウントがGAにアクセスするための設定をします。
作成した認証情報はに下記の形式のサービスアカウントのメールアドレスが含まれています。
[サービスアカウント名]@[GCP プロジェクト名].iam.gserviceaccount.com
このメールアドレスをGAにアクセス可能なアカウントとして追加します。 GAの管理ページにあるアカウントのアクセス管理から追加します。
Google Analytics Data for PHP を使った実装
PHPからGoogle Analytics Data用のクライアントライブラリを使って、GA4のデータを取得します。
PHP 7.0系での動作を確認しました。
公式ページに則り、compsoerからライブラリをインストールします。
$ composer require google/analytics-data
先述したように、クライアントライブラリの利用にはサービスアカウントの認証情報を使います。
環境変数 GOOGLE_APPLICATION_CREDENTIALS
に認証情報のファイルパスを設定しておくと、クライアントライブラリが自動で読み込んでくれます。
また、bcmathを実行環境にインストールします。クライアントライブラリの内部で使われているライブラリがbcmathパッケージに依存しているためです。
以下に、サンプルコードを紹介します。 下記は特定のURLパスの条件にマッチするPV数を取得する実装です。
<?php require_once 'vendor/autoload.php'; use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient; use Google\Analytics\Data\V1beta\DateRange; use Google\Analytics\Data\V1beta\Dimension; use Google\Analytics\Data\V1beta\Filter; use Google\Analytics\Data\V1beta\Filter\StringFilter; use Google\Analytics\Data\V1beta\Filter\StringFilter\MatchType; use Google\Analytics\Data\V1beta\FilterExpression; use Google\Analytics\Data\V1beta\Metric; use Google\ApiCore\ApiException; /** * GA プロパティー */ $gaProperty = '0123456789'; putenv('GOOGLE_APPLICATION_CREDENTIALS=' . '/path/to/credentials.json'); $client = new BetaAnalyticsDataClient(); $response = null; try { $response = $client->runReport([ 'property' => 'properties/' . $gaProperty, 'dateRanges' => [ new DateRange([ 'start_date' => '7daysAgo', 'end_date' => 'yesterday', ]), ], 'dimensions' => [ new Dimension([ 'name' => 'pagePath', ]), ], 'dimensionFilter' => new FilterExpression([ 'filter' => new Filter([ 'field_name' => 'pagePath', 'string_filter' => new StringFilter([ 'match_type' => MatchType::PARTIAL_REGEXP, 'value' => '/hogehoge/[^\?]+' ]), ]), ]), 'metrics' => [ new Metric([ 'name' => 'screenPageViews', ]), ], ]); } catch (ApiException $e) { // 例外処理 } finally { foreach ($response->getRows() as $row) { foreach ($row->getDimensionValues() as $dimensionValue) { print 'pagePath : ' . $dimensionValue->getValue() . PHP_EOL; } foreach ($row->getMetricValues() as $metricValue) { print 'screenPageViews : ' . $metricValue->getValue() . PHP_EOL; } } }
出力結果のサンプルです。
pagePath : /hogehoge/20230403/ screenPageViews : 4651 pagePath : /hogehoge/20230403/ screenPageViews : 1526 pagePath : /hogehoge/20230320/ screenPageViews : 299 pagePath : /hogehoge/20230327/ screenPageViews : 287 pagePath : /hogehoge/20210412/ screenPageViews : 255
コードとしては、パラメータを付与して、APIにリクエストしています。 リクエストパラメータは以下になります。
- dataRanges : 取得期間
- 過去7日間
- dimemsions : ディメンション
- URLパス
- dimensionFilter : ディメンションフィルター
- URLパスに対して、正規表現(/hogehoge/[^\?]+)で部分マッチ
- metrics : メトリクス
- PV数
取得したいディメンションやメトリクスの設定は、下記を参考にしました。
dimensionsFilterで正規表現を扱う際には、用途に応じたMatchTypeを設定します。
終わりに
GA4のデータを取得するため、Google Analytics Data APIをPHPのクライアントライブラリ経由で利用する方法を紹介しました。
GA3からGA4へ移行するにあたってクライアントライブラリが変更になりますが、仕様自体は大きくは変わっていないような印象を受けました。
どなたかの参考になれば幸いです。