GA4のAPIの使い方

# はじめに

今までみなさん大変お世話になってきたであろう、「ユニバーサルアナリティクス」が2023年7月1日をもって停止するという話があり...

会社で運営しているサイトもGA4に切り替えたところ、今まで使っていたAPIが使えなくなるという事件が発生しました!!  
そして日本語の情報もあまりなく、苦労したので、まとめておきます。

# 使い方

## APIを使えるようにしよう
使用するAPI：[Google Analytics Data API (GA4)](https://developers.google.com/analytics/devguides/reporting/data/v1/quickstart-client-libraries)

認証用のjsonの作成などは、従来のユニバーサルアナリティクスと変わりません。
私は、従来のユニバーサルアナリティクス用で使用したjsonをそのまま使用しました。 

公式の手順サイト：[はじめてのアナリティクス API](https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php?hl=ja)  

このページの以下の手順をやっておいてください。
- [ステップ 1: アナリティクス API を有効にする](https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php?hl=ja#enable)
    - [クライアント ID を作成する](https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php?hl=ja#clientId)
    - [Google アナリティクス アカウントへのサービス アカウントの追加](https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php?hl=ja#add-user)


## composerでライブラリをインストール
[GitHub](https://github.com/googleapis/php-analytics-data)

```
$ composer require google/analytics-data
```


## PHPのbcmathエクステンションを追加

bcmathというエクステンションがないと使えません。  
私もエラー出てしまったのですが、そのときのエラーをメモするのを忘れてしまった。

以下のコマンドで追加されているエクステンションを表示できます。
```
$ php -m
```

## 認証ファイルの環境変数を設定する
```
$ GOOGLE_APPLICATION_CREDENTIALS="あなたの認証用jsonファイルのパス"
```

ただ、私はこれだけでは動かなかったので、phpのコード側にも`putenv`で記載しました。

以下のコマンドで設定されている環境変数の確認ができます。

```
$ printenv
```


## ソースコード
動作確認はしてないので、エラー出たら自分で直してください。  
以下のコードでは、ページパスごとのページビュー数と平均ページ滞在時間を取得しています。

```php
<?php
require '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\Metric;

class SampleClass
{
    protected $client;
    protected $property_id = 'GA4のプロパティID';

    function __construct() {
        //認証処理
        $filePath = 'あなたの認証用jsonファイルのパス';
        putenv("GOOGLE_APPLICATION_CREDENTIALS=$filePath");
        $this->client = new BetaAnalyticsDataClient();
    }

    /* GA4からデータ取ります */
    function getGA4Data()
    {
        $gaData = $this->client->runReport([
            'property' => 'properties/' . $this->property_id,
            // 'limit' => 2000, //取得件数絞れます
            'dateRanges' => [
                new DateRange([
                    'start_date' => '開始日',
                    'end_date' => '終了日',
                ]),
            ],
            'dimensions' => [new Dimension(
                [
                    'name' => 'pagePath',
                ],
            ),
            ],
            'metrics' => [
                new Metric([
                    'name' => 'screenPageViews', //PV数
                ]),
                new Metric([
                    'name' => 'averageSessionDuration', //平均ページ滞在時間（秒）
                ])
            ]
        ]);


        foreach($gaData->getRows() as $row) {
                //ディメンション
                $pageName = $row->getDimensionValues()[0]->getValue();

                //メトリクス
                $metricsValues = $row->getMetricValues();
                $viewCount = $metricsValues[0]->getValue(); //PV数
                $time = $metricsValues[1]->getValue(); //平均ページ滞在時間（秒）
        }
    }

}

```



## APIで使えるディメンションとメトリクス
[公式サイト：ディメンション・メトリクス一覧](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema)

[ユニバーサルアナリティクスのメトリクスとの対応表](https://developers.google.com/analytics/devguides/migration/api/reporting-ua-to-ga4-dims-mets)

私がAPI使っているサイトは、かつては`ga:pagePathLevel1`で一階層目のページビュー数を取っていたのですが、おそらくGA4にはこのメトリクスがないようです...


# 参考サイト
[GA4で収集したデータをAPIで取得する](https://zenn.dev/ryomaryoma1010/articles/1474df8fd78c1e)

他にもいろいろ見た気がするのですが、なんかもう調べすぎてよく分からなくなりました。。  
この記事にたどり着いたのは、GA4のAPIで複数のメトリクスの指定方法が分からなかったから...この記事に助けられました。  

サンプルコードだと、ディメンションひとつに対して、メトリクスひとつのサンプルしかなくて、いや、メトリクス複数欲しいのですがとなったときに、この記事に出会いました。ありがとうございます。

ちなみに参考サイトに以下の前置きがあったのですが、2022/08/19時点でも、なんら状況は変わっていないように感じました...
> 現在(2021/12/07時点)、GA4用のAPIはベータ版のみで、日本語での知見はほとんどなく、英語でもあまり見られないのでAPIを利用したい場合、GA4を利用するべきではない。


# 最後に
実は、サーバーにbcmath入れるのにも苦労した...

ユニバーサルアナリティクス時代のビューIDがなくなって、ビューIDをプロパティIDに変更してしまえば、そのまま使えるかなとか甘い考えでしたが、そんなことはありませんでした。。


...にしても、日本語の記事があまりなくて、英語の記事を結構見たのですが、英語圏でも文句言っている人が多かったので、2023年の7月が心配であります。。

ちなみに、GA4そのものも使っているのですが、従来できたことがすぐにできなかったりして、悩ませられています。。  
URLの一階層目ごとのページビュー数を見ようと思ったら、データポータルというのを使うしかないのか...？  

データポータルを使うにしても、わざわざ条件文入れないと見れないし、サイトの作り的に一階層目が大量にあるので、スプレッドシートの関数で条件文作ったりしてます。  

GA4を使いこなすのは大変なので、これを使いこなれせば、市場的にはかなり有利なんでしょうけど、そんなにやる気はない。。