🌚
PHPでUAからGA4に移行する際にAPIでデータ拾ってた方へ
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