Google Analytics Data API for PHPを使う

エキサイト株式会社の武藤です。

GA3(ユニバーサルアナリティクス、UA)の終了が2023年7月1日となっており、いよいよ期日が迫ってきました。 引き続きGAを利用するためには、GA4への変更が必要になります。

私が担当しているサービスでは、バッチ処理PHPで実装しています。 一部バッチでは、GA3 APIを利用してランキングの集計を行っています。

今回は、PHP実装におけるGA4 APIへの切り替えについて説明します。

support.google.com

Google Analytics Data API

Google Analytics Data APIは、GA4のデータを取得するためのAPIです。 developers.google.com

以下に公式ドキュメントの内容を引用します。

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を有効化します。

GCPコンソールからGA4 APIを有効化

PHPでGA4 APIを操作するために、クライアントライブラリを使用します。 クライアントライブラリの操作には、認証情報が必要となりますので、サービスアカウントと認証情報を作成します。

サービスアカウントと認証情報の作成

最後に、サービスアカウントがGAにアクセスするための設定をします。

作成した認証情報はに下記の形式のサービスアカウントのメールアドレスが含まれています。

[サービスアカウント名]@[GCP プロジェクト名].iam.gserviceaccount.com

このメールアドレスをGAにアクセス可能なアカウントとして追加します。 GAの管理ページにあるアカウントのアクセス管理から追加します。

GAの管理画面からサービスアカウントのメールアドレスを追加

Google Analytics Data for PHP を使った実装

PHPからGoogle Analytics Data用のクライアントライブラリを使って、GA4のデータを取得します。

PHP 7.0系での動作を確認しました。

github.com

公式ページに則り、compsoerからライブラリをインストールします。

$ composer require google/analytics-data

先述したように、クライアントライブラリの利用にはサービスアカウントの認証情報を使います。 環境変数 GOOGLE_APPLICATION_CREDENTIALS に認証情報のファイルパスを設定しておくと、クライアントライブラリが自動で読み込んでくれます。

また、bcmathを実行環境にインストールします。クライアントライブラリの内部で使われているライブラリがbcmathパッケージに依存しているためです。

github.com

以下に、サンプルコードを紹介します。 下記は特定の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数

取得したいディメンションやメトリクスの設定は、下記を参考にしました。

developers.google.com

dimensionsFilterで正規表現を扱う際には、用途に応じたMatchTypeを設定します。

developers.google.com

終わりに

GA4のデータを取得するため、Google Analytics Data APIPHPのクライアントライブラリ経由で利用する方法を紹介しました。

GA3からGA4へ移行するにあたってクライアントライブラリが変更になりますが、仕様自体は大きくは変わっていないような印象を受けました。

どなたかの参考になれば幸いです。