ошибка api отчетов Google Analytics

#ajax #google-api #google-analytics-api

#ajax #google-api #google-analytics-api

Вопрос:

Я пытаюсь отправить запрос для api версии 4, я выполняю этот простой запрос

 $.ajax({
  url: 'https://analyticsreporting.googleapis.com/v4/reports:batchGet',
  headers: {
        "Authorization":"Bearer xxxx"
    },
  method:"POST",
  data:{
  "reportRequests":[
  {
    "viewId":"xxx",
    "dateRanges":[
      {
        "startDate":"2015-06-15",
        "endDate":"2015-06-30"
      }],
    "metrics":[
      {
        "expression":"ga:sessions"
      }],
    "dimensions": [
      {
        "name":"ga:browser"
      }]
    }]
},
  success: function(resp){
    alert(resp);
  }
});
  

Но это ошибка возврата.

 "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "description": "Invalid JSON payload received. Unknown name "reportRequests[0][metrics][0][expression]": Cannot bind query parameter. Field 'reportRequests[0][metrics][0][expression]' could not be found in request message."
          },
          {
            "description": "Invalid JSON payload received. Unknown name "reportRequests[0][dateRanges][0][endDate]": Cannot bind query parameter. Field 'reportRequests[0][dateRanges][0][endDate]' could not be found in request message."
          },
          {
            "description": "Invalid JSON payload received. Unknown name "reportRequests[0][dimensions][0][name]": Cannot bind query parameter. Field 'reportRequests[0][dimensions][0][name]' could not be found in request message."
          },
          {
            "description": "Invalid JSON payload received. Unknown name "reportRequests[0][dateRanges][0][startDate]": Cannot bind query parameter. Field 'reportRequests[0][dateRanges][0][startDate]' could not be found in request message."
          },
          {
            "description": "Invalid JSON payload received. Unknown name "reportRequests[0][viewId]": Cannot bind query parameter. Field 'reportRequests[0][viewId]' could not be found in request message."
          }
        ]
      }
    ]
  

Что я делаю не так?

Комментарии:

1. какой тип контента вы используете?

2. тип содержимого: application / json; кодировка=UTF-8

3. я не использую тип содержимого: application / x-www-form-urlencoded; кодировка = UTF-8

Ответ №1:

Я только что отправил это, в котором указаны те же даты, размеры и показатели, что и в вашем запросе. Работает нормально. Единственное отличие, которое я вижу, заключается в том, что я добавляю токен доступа в конец URI и что я только отправляю 'application/Json' . 'application/json; charset=UTF-8' похоже, что тоже работает.

На самом деле я думал, что это было в документации, я свяжусь с разработчиками и попрошу их добавить это куда-нибудь.

 URl:    'https://analyticsreporting.googleapis.com/v4/reports:batchGet?access_token=<access_token>'
ContentType = 'application/Json'

{  
   "reportRequests":[  
      {  
         "viewId":"ga:78110423",
         "dateRanges":[  
            {  
               "startDate":"2015-06-15",
               "endDate":"2015-06-15"
            }
         ],
         "dimensions":[  
            {  
               "name":"ga:browser"
            }
         ],
         "metrics":[  
            {  
               "expression":"ga:sessions"
            }
         ],
         "pageToken":"0",
         "pageSize":"1000",
         "includeEmptyRows":"true",
         "hideTotals":"true",
         "hideValueRanges":"true"
      }
   ]
}
  

Комментарии:

1. можете ли вы написать код, используя ajax pls? я пытаюсь запустить консоль

2. Нет, у меня нет возможностей ajax, извините. Просто измените свой тип контента на «application / Json» и попробуйте. Он должен работать с токеном доступа в заголовке, а также в URL.

3. я в порядке, но теперь у меня есть это «сообщение» об ошибке: «Получена недопустимая полезная нагрузка JSON. Неожиданный токен. nreportRequests[0%5 n ^»,

4. похоже, у вас где-то есть несколько недопустимых символов. Я запустил то, что вы указали, через Json beautifier, и Json действителен и выглядит так же, как у меня. Должно быть, там скрыто что-то еще.

Ответ №2:

Вот перезаписанный запрос, который работает. Требовалось исправить две вещи:

 $.ajax({
    url: 'https://analyticsreporting.googleapis.com/v4/reports:batchGet',
    headers: {
        "Authorization": "Bearer XXX"
    },
    method: "POST",
    data: JSON.stringify({
        "reportRequests": [{
            "viewId": "XXX",
            "dateRanges": [{
                "startDate": "2015-06-15",
                "endDate": "2015-06-30"
            }],
            "metrics": [{
                "expression": "ga:sessions"
            }],
            "dimensions": [{
                "name": "ga:browser"
            }]
        }]
    }),
    contentType: 'application/json',
    success: function(resp) {
        alert(resp);
    }
});
  
  1. установите для типа содержимого значение ‘application/json’
  2. используйте JSON.stringify() для преобразования объекта в строку, которая может быть проанализирована сервером API