目次
Laravel上に作成したサンプルプログラムでGA4からデータを取得してみました
まだ実用化はしてないんですが動くことは確認出来ました。こんな感じのレスポンスが返ってきてます。Google\Analytics\Data\V1beta\RunReportResponse {#1875 ▼
-dimension_headers: Google\Protobuf\Internal\RepeatedField {#1865 ▶}
-metric_headers: Google\Protobuf\Internal\RepeatedField {#1876 ▶}
-rows: Google\Protobuf\Internal\RepeatedField {#1877 ▶}
-totals: Google\Protobuf\Internal\RepeatedField {#1872 ▶}
-maximums: Google\Protobuf\Internal\RepeatedField {#1862 ▶}
-minimums: Google\Protobuf\Internal\RepeatedField {#1863 ▶}
-row_count: 701
-metadata: Google\Analytics\Data\V1beta\ResponseMetaData {#7279 ▶}
-property_quota: null
-kind: "analyticsData#runReport"
-desc: Google\Protobuf\Internal\Descriptor {#1789 ▶}
-unknown: ""
}
例えば8月のPVを取得するコードはこんな感じで、
$client = new BetaAnalyticsDataClient([
'credentials' => config('google.analytics.credentials')
]);
$response = $client->runReport([
'property' => 'properties/' . config('google.analytics.propertyId'),
'dateRanges' => [
new DateRange([
'start_date' => '2023-08-01',
'end_date' => '2023-08-31',
]),
],
'metrics' => [
new Metric([
'name' => 'screenPageViews', // PV数
])
]
]);
dump($response->getRows()->offsetGet(0)->getMetricValues()[0]->getValue());
結果はこう。
"20641"
基本的にはこの記事を参考にすれば間違いありません
GA4からデータを取得するには工程が多いため、迷子になることや注意点が多かったです。 本記事では写真と共にクリックする場所を丁寧に解説していきますので、参考になるかと思います。
PHP(Laravel)でGA4のPV数を取得してみた | FOURIER TECH BLOG 〜 IT技術ブログ 〜
Google Cloudの設定とGoogle Analyticsの設定がめちゃくちゃ丁寧に書かれていて、これさえ読めばほとんど大丈夫です。特に最新に近いLaravelであれば問題なくいけると思います。
ただ僕が使っているLaravel 5.8ではいくつか罠があったのでそれについてはちょっと補足。
400 Bad Request
実際のエラーメッセージはこちら。
Client:error `POST https://oauth2.googleapis.com/token` resulted in a
`400 Bad Request` response: {"error":"invalid_scope",
"error_description":"Invalid OAUth scope or ID token audience provided."}
これものすごく苦戦しました。credentialsが読み込めてないのかなとか色んなことをたくさん考慮しましたけど最終的な結論は、
どうやらサーバにインストールされているGoogle関連ライブラリが古い
であって、以下のコマンドで解決しました。
composer update
実際に上手く動いていないライブラリは一部なわけですから、それを特定した上でそれだけをアップデートする方が安全だろうとは思います。念のため。
補足:認証情報を設定するやり方はいくつかある
詳しくはドキュメントのここに書かれています。In general, the Google Cloud PHP library uses Service Account credentials to connect to Google Cloud services. When running on Compute Engine the credentials will be discovered automatically. When running on other environments, the Service Account credentials can be specified by providing the path to the JSON keyfile for the account (or the JSON itself) in environment variables.
google-cloud-php/AUTHENTICATION.md at main · googleapis/google-cloud-php
具体的には次のどれだけであれば大丈夫らしい。
putenv("GOOGLE_APPLICATION_CREDENTIALS=" . __DIR__ . '/your-service-account-credentials.json');
// Authenticating with keyfile data.
$video = new VideoIntelligenceServiceClient([
'credentials' => json_decode(file_get_contents('/path/to/keyfile.json'), true)
]);
// Authenticating with a keyfile path.
$video = new VideoIntelligenceServiceClient([
'credentials' => '/path/to/keyfile.json'
]);
サーバの環境変数に設定してしまうということも出来るみたいです。
Here are the environment variables that Google Cloud PHP checks for credentials:
google-cloud-php/AUTHENTICATION.md at main · googleapis/google-cloud-php
GOOGLE_APPLICATION_CREDENTIALS – Path to JSON file
Call to undefined function Google\Protobuf\Internal\bnccomp()
これはbcmathというライブラリが入っていないと起こるエラーのようです。これはbcmathが入っていないのが原因。
GA4 APIをPHPで叩こうとしたら undefined function とか言われた – Qiita
インストールコマンドはOSによっていろいろ変わるだろうと思いますが、Amazon Linuxの場合はこんな感じでした。
sudo yum install php72-bcmath
PHPのバージョンによって変わるので、正しいバージョンをインストールしてください。
あとはドキュメントを見ながら欲しいデータを取得するようにコードを書くだけ
Google アナリティクスのレポートデータにアクセスします。警告: 複数のお客様アプリケーション、アカウント、プロジェクトを 1 つ作成し、単一のお客様アプリケーション、アカウント、プロジェクトとして動作させたり、サービス固有の使用制限や割り当てを回避したりすると、Google Cloud Platform の利用規約および Google API の利用規約に直接違反します。この操作を行うと、警告が表示されずに GCP プロジェクトが直ちに終了する可能性があります。
Google Analytics Data API | Google for Developers
特別複雑というわけではないんですけど、多種多様なデータが取得出来るから色んなオプションがあるんですよね。欲しいデータはごく限られてるのでそれだけ知りたいんですけどドキュメントが長い……適切な設定を気長に探して組み込んでいくしかないかなー
来月のアクセスレポートまでにはなんとかしたいですね。なるかなあ。
(難易度よりモチベーションの問題)