在Google AppsScript上,我一直试图将实时用户数据从GA4属性拉到Google表中。然而,我一直得到以下错误信息:此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和作用域。
- 我想我做了一些错误的授权变量。如何生成后者?
- 在这种情况下API密钥是必要的吗?
我已经在https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runRealtimeReport上测试了请求体,它工作了。
事先感谢您的意见。
Issue:
我不知道你是怎么想出[[oAuthtoken]]
的,但我猜这不是一个有效的oAuthToken
。
为了得到这个,你应该:
- 确保脚本被授权使用其中一个方法范围(例如
https://www.googleapis.com/auth/analytics.readonly
)。例如,您可以将其设置为显式范围。 - ScriptApp使用。getOAuthToken获取令牌(例如
const oAuthtoken = ScriptApp.getOAuthToken();
)。
另外,你是对的,API密钥不是必需的。由于您提供了OAuth令牌,因此API密钥完全是多余的。
使用Analytics Data Service:
调用这个API更简单的方法是使用Analytics Data Service:AnalyticsData.Properties.runRealtimeReport(theRequestBody, yourProperty);
在这种情况下,Apps Script为你处理授权,所以你不必担心OAuth令牌。
另外,由于它是高级服务,你必须首先启用它。