🌚

PHPでUAからGA4に移行する際にAPIでデータ拾ってた方へ

2022/12/07に公開約3,200字

UA -> GA4

で、🐚データを拾ってた方はUAのAPIからGA4に関してやることリスト?をなんとなくまとめました。

やるリスト

  • GA4のアカウントのアクセス管理にjsonのemailを入れる
  • ビューじゃなくてプロパティIDをつかう
  • GCPでGoogle Analytics Data APIを有効にする
  • php-bcmathがいる
  • サンプルを実行する

GA4のアカウントのアクセス管理にjsonのemailを入れる

GCPの権限周りのjsonファイルを使ってる環境では、それをそのまま使います。そのjson内にある「client_email」をGA4の設定に追加します。データをとるだけなんで、閲覧者で結構とのこと。

参考: https://developers.gmo.jp/23074/

ビューじゃなくてプロパティIDをつかう

これはこのタイトル通りですね。

GCPでGoogle Analytics Data APIを有効にする

これですが、有効にして10分くらいまたないと、ちょっと待てってエラーがでます。

php-bcmathがいる

# dnf install php-bcmath

サンプルを実行する

上の参考URL通りで、動けばOK。ただ、

use Google\Analytics\Data\V1beta\Metric;

が抜けています。

GA4で取ったものをBigQueryにいれるムーヴ

# composer require  google/analytics-data
# composer require google/cloud-bigquery:* -W

composerはこんな感じでいれた。

require __DIR__.'/vendor/autoload.php';

//GA4
use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;

//BigQuery
use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

さきにGA4の例

putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __DIR__ . '/__________.json');

$client = new BetaAnalyticsDataClient();

//これで指定日のURL別の一覧が取れる。10,000件こえなければlimit,offsetは考えなくていい
$response = $client->runReport([
	'property' => 'properties/__________',
	'dateRanges' => [
		new DateRange([
			'start_date' => $argv[1],
			'end_date' => $argv[1],
		]),
	],

	'dimensions' => [
		new Dimension([
			'name' => 'date',
		]),
		new Dimension([
			'name' => 'pagePathPlusQueryString',
		]),
	],

	'metrics' => [
		new Metric([
			'name' => 'sessions',
		]),
		new Metric([
			'name' => 'screenPageViews',
		]),
	],

	#'limit' => 10,
	#'offset' => 0,
]);

ゼロ件なら終了。あんましないけど、limit超えたときの日用

if(count($response->getRows()) <= 0)exit();

ここからBigQuery

// BigQuery設定
$bigQuery = new BigQueryClient([
	'projectId' => '__________'
]);

//...一部処理割愛

// query作成
$add_values = "";
foreach ($response->getRows() as $row) {
	if(!$add_values)
		$add_values .= "values(";
	else
		$add_values .= ",(";

	$add_values .= '"'.$argv[1].'", "'.$row->getDimensionValues()[1]->getValue().'", '.$row->getMetricValues()[1]->getValue().', '.$row->getMetricValues()[0]->getValue();
	$add_values .= ")";

	#print("dimension date: " . $row->getDimensionValues()[0]->getValue() . "\t");
	#print("dimension pagePathPlusQueryString: " . $row->getDimensionValues()[1]->getValue() . "\t");

	#print("metric sessions: " . $row->getMetricValues()[0]->getValue() . "\t");
	#print("metric screenPageViews(PV): " . $row->getMetricValues()[1]->getValue() . "\n");
}

if(!$add_values)exit();

$query = "insert into `________.________.________`(date, url, pageviews, sessions)".$add_values;

$jobConfig = $bigQuery->query($query);
$queryResults = $bigQuery->runQuery($jobConfig);

小話

最初と最後にこれ入れとくとタイム計測してくれます。

$sta = date("Y/m/d H:i:s");
echo "START: ".$sta."\n";
...
...
...
$end = date("Y/m/d H:i:s");
echo "END: ".$end."\n";
$diff = strtotime($end) - strtotime($sta);
echo "EXE TIME: ".$diff." Seconds\n";
echo "---\n";
START: 2023/01/10 19:30:54
END: 2023/01/10 19:31:03
EXE TIME: 9 Seconds
---

そしていつまでBetaでいくのか謎。

Discussion

ログインするとコメントできます