使用 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 和范围。

  1. 我想我对 Authorization 变量做错了什么。我如何生成后者?
  2. 在这种情况下甚至需要 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