使用 GS 将数据从 GA4 runRealtimeReport 导入 Google Sheets
Using GS to Import data from GA4 runRealtimeReport into Google Sheets
在 Google AppsScript 上,我一直在尝试将实时用户数据从 GA4 属性 提取到 google sheet。但是,我不断收到以下错误消息:
“此 API 不支持 API 密钥。需要 OAuth2 访问令牌或其他身份验证凭据...”
下面是我的尝试:
async function test4() {
var theAuthorization = "Bearer " + [[oAuthtoken]];
var theRequestBody = {"dimensions":[{"name":"country"}],"metrics":[{"name":"activeUsers"}],"limit":"10","orderBys":[{"metric":{"metricName":"activeUsers"},"desc":true}],"returnPropertyQuota":true,"minuteRanges":[{"name":"1minute","startMinutesAgo":2,"endMinutesAgo":0}]};
var theOptions = {method: 'POST',headers: {'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': theAuthorization}, body: theRequestBody};
const response = await UrlFetchApp.fetch("https://analyticsdata.googleapis.com/v1beta/properties/[GA4property]:runRealtimeReport?key=[[API key]]", theOptions);
Logger.log(JSON.parse(response));
}
我已经启用了必要的 API 和范围。
- 我想我对 Authorization 变量做错了什么。我如何生成后者?
- 在这种情况下甚至需要 API 键吗?
我已经在 https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runRealtimeReport 上测试了请求正文并且它有效。
预先感谢您的意见。
问题:
我不确定你是怎么想出 [[oAuthtoken]]
的,但我想这不是一个有效的 oAuthToken
。
为了得到它,你应该:
- 确保脚本已获得方法范围之一的授权(例如
https://www.googleapis.com/auth/analytics.readonly
)。例如,您可以将其设置为 explicit scope.
- 使用ScriptApp.getOAuthToken获取令牌(例如
const oAuthtoken = ScriptApp.getOAuthToken();
)。
此外,你是对的,API 键不是必需的。由于您提供了 OAuth 令牌,因此 API 密钥完全多余。
使用分析数据服务:
调用这个 API 更简单的方法是使用 Analytics Data Service:
AnalyticsData.Properties.runRealtimeReport(theRequestBody, yourProperty);
在这种情况下,Apps 脚本会为您处理授权,因此您不必担心 OAuth 令牌。
此外,因为它是 advanced service, you'll first have to enable it。
在 Google AppsScript 上,我一直在尝试将实时用户数据从 GA4 属性 提取到 google sheet。但是,我不断收到以下错误消息: “此 API 不支持 API 密钥。需要 OAuth2 访问令牌或其他身份验证凭据...”
下面是我的尝试:
async function test4() {
var theAuthorization = "Bearer " + [[oAuthtoken]];
var theRequestBody = {"dimensions":[{"name":"country"}],"metrics":[{"name":"activeUsers"}],"limit":"10","orderBys":[{"metric":{"metricName":"activeUsers"},"desc":true}],"returnPropertyQuota":true,"minuteRanges":[{"name":"1minute","startMinutesAgo":2,"endMinutesAgo":0}]};
var theOptions = {method: 'POST',headers: {'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': theAuthorization}, body: theRequestBody};
const response = await UrlFetchApp.fetch("https://analyticsdata.googleapis.com/v1beta/properties/[GA4property]:runRealtimeReport?key=[[API key]]", theOptions);
Logger.log(JSON.parse(response));
}
我已经启用了必要的 API 和范围。
- 我想我对 Authorization 变量做错了什么。我如何生成后者?
- 在这种情况下甚至需要 API 键吗?
我已经在 https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runRealtimeReport 上测试了请求正文并且它有效。
预先感谢您的意见。
问题:
我不确定你是怎么想出 [[oAuthtoken]]
的,但我想这不是一个有效的 oAuthToken
。
为了得到它,你应该:
- 确保脚本已获得方法范围之一的授权(例如
https://www.googleapis.com/auth/analytics.readonly
)。例如,您可以将其设置为 explicit scope. - 使用ScriptApp.getOAuthToken获取令牌(例如
const oAuthtoken = ScriptApp.getOAuthToken();
)。
此外,你是对的,API 键不是必需的。由于您提供了 OAuth 令牌,因此 API 密钥完全多余。
使用分析数据服务:
调用这个 API 更简单的方法是使用 Analytics Data Service:
AnalyticsData.Properties.runRealtimeReport(theRequestBody, yourProperty);
在这种情况下,Apps 脚本会为您处理授权,因此您不必担心 OAuth 令牌。
此外,因为它是 advanced service, you'll first have to enable it。