Javascript Analytics API v4无效json有效负载错误

Javascript Analytics API v4无效json有效负载错误,javascript,google-apps-script,google-analytics-api,google-spreadsheet-api,Javascript,Google Apps Script,Google Analytics Api,Google Spreadsheet Api,我正在谷歌电子表格代码编辑器中编写谷歌应用程序脚本。我想从谷歌分析中提取一些数据,这些数据必须使用GA API v4。我知道Google apps脚本中有内置的分析API支持,但只有v3版本 因此,我遵循本指南并使用此库来执行oauth2 我确信我已经在API控制台中启用了Analytics V4 API,并获得了正确的客户端ID和密码。auth2之后,我编写了访问数据的代码 var payload = {'reportRequests' : [ { 'metrics'

我正在谷歌电子表格代码编辑器中编写谷歌应用程序脚本。我想从谷歌分析中提取一些数据,这些数据必须使用GA API v4。我知道Google apps脚本中有内置的分析API支持,但只有v3版本

因此,我遵循本指南并使用此库来执行oauth2

我确信我已经在API控制台中启用了Analytics V4 API,并获得了正确的客户端ID和密码。auth2之后,我编写了访问数据的代码

  var payload = {'reportRequests' : [
    {
      'metrics' : [{'expression':'ga:users'}],
      'viewId' : 'xxxxxxxx',
      'dateRages' : [{'startDate':'2016-10-01','endDate':'2016-10-10'}]
    }
  ]};

  var options = {
    'method' : 'post',
    'headers': {
       'contentType': 'application/json',
       'Authorization': 'Bearer ' + service.getAccessToken()
     },
    'payload' : payload,
    'muteHttpExceptions':true
   };

  var resp = UrlFetchApp.fetch("https://analyticsreporting.googleapis.com/v4/reports:batchGet", options);
  Logger.log(resp.getContentText());
然后我得到了一个错误的http响应

[16-10-30 21:25:51:325 PDT] {
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name \"reportRequests\": Cannot bind query parameter. 'reportRequests' is a message type. Parameters can only be bound to primitive types.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "description": "Invalid JSON payload received. Unknown name \"reportRequests\": Cannot bind query parameter. 'reportRequests' is a message type. Parameters can only be bound to primitive types."
          }
        ]
      }
    ]
  }
}
我做错了什么?错误消息是什么意思

谢谢大家!

两个潜在问题:

  • 错误状态为
    无效\u参数
    。您的有效负载包含
    dateRages
    ,它应该是
    dateRanges
    ,否则由于输入错误,它将不会被识别为有效请求

  • 请参见:如果希望传递内容类型为
    application/json
    的数据,则需要向
    payload
    参数提供字符串,而不是JS对象

    而不是:

    // JS Object, by default will be encoded as formdata (not desired)
    'payload' : payload
    
    使用:


  • 希望这有助于

    确保您也在正在使用的脚本编辑器中打开或启用Advance Google Services中的分析API。资源->推进谷歌服务->打开分析API。另一件我认为可以帮助你的事情是阅读这篇文章。它在第一时间就被启用了。
    // Convert JS Object to JSON string
    'payload' : JSON.stringify(payload)