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" } ] } ]}
コメント