尝试使用应用程序脚本获取 google analytics 4 时出现身份验证错误

Authentication error when attempting to fetch google analytics 4 with app script

我想将社区连接器连接到 google analytics 4 帐户,以便我可以轻松修改数据并将其发送到数据工作室。但是,我的代码返回身份验证错误:

{ error: 
   { code: 401,
     message: 'Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.',
     status: 'UNAUTHENTICATED' } }

我已经包含了令牌,但我不确定我是否进行了正确的 url 调用,或者是否存在我不知道的其他问题。我认为我不需要 API 密钥来从社区连接器连接到 google API,但我可能错了。我确实创建了一个 API 密钥,但结果是一样的。

function testFetch(){
  var url = "https://analyticsdata.googleapis.com/v1alpha:runReport"
  var token = ScriptApp.getOAuthToken();
 
  var options = {
      "method" : 'POST',
      "entity": { "propertyId": "263290444" },
      "dateRanges": [{ "startDate": "2020-12-01", "endDate": "2021-03-01" }],
      "dimensions": [{ "name": "country" }],
      "metrics": [{ "name": "activeUsers" }],
      'muteHttpExceptions': true,
      headers: {
          Authorization: 'Bearer' + token,
        },
      };

  var response = UrlFetchApp.fetch(url, options);

  var result = JSON.parse(response.getContentText());
}

这里有一个关于如何实现目标的小指南:

为您的 Apps 脚本项目清单 (appsscript.json) 设置明确的 OAuth 范围 (see documentation)。在这种情况下,您需要添加以下内容:

{
  ...
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/analytics.readonly"
  }
}

然后你需要将方法参数与获取选项分开。获取选项需要被字符串化并添加到 payload。您还需要将 contentType 设置为 JSON。

const options = {
  entry: { propertyId: "263290444"},
  // etc.
}
const response = UrlFetchApp.fetch(
  'https://analyticsdata.googleapis.com/v1alpha:runReport',
  {
    method: 'POST',
    muteHttpExceptions: true,
    headers: {
      'Authorization': `Bearer ${ScriptApp.getOAuthToken()}`
    },
    contentType: 'application/json; charset=utf-8',
    payload: JSON.stringify(options)
  }
)

之后,您可以像以前一样使用响应。

请注意 Bearer 和令牌需要用 space 分隔,您的代码没有。由于连接的原因很难看清,这就是为什么我通常使用模板文字 (see documentation).

参考资料