function testAnalyticsResportingAPI() {
// Analytics Reporting API を呼び出す。引数はビュー ID
// 実行結果はログに記述
console.log(getAnalyticsReportingAPI('123456789'))
}
function getAnalyticsReportingAPI(_viewID) {
// 使いそうな値を定義しておく
const DATA_RANGE = {
sevenDaysAgo: '7DaysAgo',
yesterday: 'yesterday'
};
const GA_FIELDS = {
oneDayUsers: 'ga:1dayUsers',
city: 'ga:city',
clientId: 'ga:clientId',
date: 'ga:date',
dateHour: 'ga:dateHour',
newUsers: 'ga:newUsers',
users: 'ga:users',
pageViews: 'ga:pageviews',
screenViews: 'ga:screenViews',
sessions: 'ga:sessions'
};
// 実行部分
const res = AnalyticsReporting.Reports.batchGet({
reportRequests: [{
viewId: _viewID,
// 日付範囲
dateRanges: [{
startDate: DATA_RANGE.sevenDaysAgo,
endDate: DATA_RANGE.yesterday
}],
// まとめる項目
dimensions: [
{ name: GA_FIELDS.dateHour }
],
// データ部分
metrics: [
{ expression: GA_FIELDS.users },
{ expression: GA_FIELDS.sessions },
{ expression:GA_FIELDS.pageViews }
],
// 何で整列するか
orderBys: [
{ fieldName: GA_FIELDS.dateHour }
]
}]
});
return res.reports;
}
10:19:31 情報 [ { data:
{ totals: [Object],
rows: [Object],
minimums: [Object],
rowCount: 23,
maximums: [Object] },
columnHeader: { metricHeader: [Object], dimensions: [Object] } } ]
function test_AnalyticsReporting() {
const sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Google Analytics Reporting API');
// 引数はビュー ID
const res = getAnalyticsReportingAPI('123456789');
// 戻りのオブジェクトを配列に変換
const ret = res[0].data.rows.map(function (_row) {
return [].concat(_row.dimensions, _row.metrics[0].values);
});
// 整形後確認
//console.log(ret);
// 反映範囲確認
//console.log(sht.getRange(1, 1, ret.length, ret[0].length).getA1Notation());
sht.getRange(1, 1, ret.length, ret[0].length).setValues(ret);
}
function testGoogleAnalyticsDataAPI() {
// 引数はプロパティ ID
const res = getGoogleAnalyticsDataAPI('123456789');
// 結果をログに記述
console.log(res);
}
function getGoogleAnalyticsDataAPI(_propertyID) {
// GA4 のデータ取得
// まとめる項目定義
const dim = AnalyticsData.newDimension();
dim.name = 'dateHour';
// 取得データ定義
const met1 = AnalyticsData.newMetric();
met1.name = 'totalUsers';
const met2 = AnalyticsData.newMetric();
met2.name = 'sessions';
const met3 = AnalyticsData.newMetric();
met3.name = 'screenPageViews';
// 整列順定義
const ord = AnalyticsData.newOrderBy();
ord.dimension = {
dimensionName: 'dateHour'
};
// 日付範囲定義
const rng = AnalyticsData.newDateRange();
rng.startDate = '7daysAgo';
rng.endDate = 'yesterday';
// リクエストオブジェクト作成
const req = AnalyticsData.newRunReportRequest();
req.dimensions = [dim];
req.metrics = [met1, met2, met3];
req.dateRanges = rng;
req.orderBys = [ord];
// 実行
return AnalyticsData.Properties.runReport(req, 'properties/{property}'.replace('{property}', _propertyID));
}
11:03:40 情報 Logging output too large. Truncating output. { metadata: { currencyCode: 'JPY', timeZone: 'Asia/Tokyo' },
metricHeaders:
[ { name: 'totalUsers', type: 'TYPE_INTEGER' },
{ name: 'sessions', type: 'TYPE_INTEGER' },
{ name: 'screenPageViews', type: 'TYPE_INTEGER' } ],
kind: 'analyticsData#runReport',
rowCount: 167,
dimensionHeaders: [ { name: 'dateHour' } ],
rows:
[ { dimensionValues: [Object], metricValues: [Object] },
{ metricValues: [Object], dimensionValues: [Object] },
function testGoogleAnalyticsDataAPI() {
const sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Google Analytics Data API');
// 引数はプロパティ ID
const res = getGoogleAnalyticsDataAPI('123456789');
// データ確認
console.log(res);
// 戻りのオブジェクトを配列に変換
const ret = res.rows.map(function (_row) {
const ret = _row.dimensionValues;
return ret.concat(_row.metricValues).map(function (_column) {
return _column.value;
}).join('\t');
}).join('\n');
// 整形後確認
console.log(ret);
// 反映範囲確認
console.log(sht.getRange(1, 1, ret.length, ret[0].length).getA1Notation());
sht.getRange(1, 1, ret.length, ret[0].length).setValues(ret);
}