Google Analytics APIでデータ取得してみようかなと
サンプルと言うか viewIdで取得しているものが多くて
GA4は reportingではなく Google Analytics Data API で良いようです^^
Google Cloud Platform / Apps Script 設定
Google Cloud Platform
- プロジェクトに Analytics Data APIを有効!
- OAuthの認証用に認証情報追加(ウェブのときはreturn_urlを対象の apps scriptのURL追加
execとdev両方追加するとテストできます - 認証情報のクライアントID、シークレットを使用
Apps Script
- サービスに Google Analytics Data APIを追加
- ライブラリはなくてもOKですが使う場合は
OAuth2 – ライブラリID – 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
そんな感じで.
認証部分
var accessToken = "";
function doGet(e) {
var clientId = '1000000.apps.googleusercontent.com'; // 置き換える
var clientSecret = 'AAAAAA-0000000000000'; // 置き換える
var redirectUri = 'https://script.google.com/macros/s/AAAAAAAAAAAA-9999999/dev'; // 置き換える
// 認証コードがURLパラメータに含まれている場合
if (e.parameter.code) {
var code = e.parameter.code;
// アクセストークンを取得する
var tokenUrl = 'https://oauth2.googleapis.com/token';
var options = {
'method': 'post',
'payload': {
'code': code,
'client_id': clientId,
'client_secret': clientSecret,
'redirect_uri': redirectUri,
'grant_type': 'authorization_code'
}
};
var response = UrlFetchApp.fetch(tokenUrl, options);
var json = JSON.parse(response.getContentText());
accessToken = json.access_token;
// 取得したアクセストークンを保存したり、API呼び出しに使用したりする
// ...
fetchGA4Data();
// 初回アクセス時、認証ページにリダイレクト
} else {
var authorizationUrl = 'https://accounts.google.com/o/oauth2/v2/auth' +
'?client_id=' + clientId +
'&redirect_uri=' + redirectUri +
'&response_type=code' +
'&scope=https://www.googleapis.com/auth/analytics.readonly';
return HtmlService.createHtmlOutput('<a target="_blank" href="' + authorizationUrl + '">認証</a>');
}
}とりあえず access_tokenだけ外に共有
簡単ですが、これだけで認証リンクから認証できます^^
ここは analytics関係なく共通です。
fetchGA4Data()だけデータ取得です
Analytics Data APIからデータ取得
view id ではなくプロパティIDでデータ取得できます^^v

Google Analytics Data API の概要 | Google for Developers
Google アナリティクスのレポートとデータをプログラマティックに管理する。
あまり細かく見ていないですがこんな感じでAPI利用できます
accessTokenは上の認証で保存されています。
function fetchGA4Data() {
var propertyId = 'properties/1234567890'; // GA4プロパティIDを入力
var url = `https://analyticsdata.googleapis.com/v1beta/${propertyId}:runReport`
var requestBody = {
dateRanges: [
{
startDate: '7daysAgo',
endDate: 'today'
}
],
dimensions: [
{ name: 'country' }, // 地域データを取得する例
],
metrics: [
{ name: 'activeUsers' } // アクティブユーザー数
]
};
try {
var response = UrlFetchApp.fetch(url, {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: 'Bearer ' + accessToken,
},
payload: JSON.stringify(requestBody),
});
var data = JSON.parse(response.getContentText());
Logger.log(JSON.stringify(data, null, 2));
} catch (e) {
Logger.log('データ取得中にエラーが発生しました: ' + e.message);
}
}こんな感じで、国名とアクティブユーザーを取得できました
{
"dimensionHeaders": [
{
"name": "country"
}
],
"metricHeaders": [
{
"name": "activeUsers",
"type": "TYPE_INTEGER"
}
],
"rows": [
{
"dimensionValues": [
{
"value": "Japan"
}
],
"metricValues": [
{
"value": "169"
}
]
},
{
"dimensionValues": [
{
"value": "Hong Kong"
}
],
"metricValues": [
{
"value": "6"
}
]
}
]}


コメント