2017-01-16 4 views
0

Я пытаюсь запросить API отчетности Google Analytics из приложения node.js.Неизвестное имя Ошибка «view_id» при запросе API отчетов Google Analytics

Я думаю, что я правильно настроил на google-стороне вещи, включая учетную запись службы, но мне не хватает части.

Мое приложение успешно отправляет данные об использовании в Google, я вижу, что он входит в режим реального времени. Я также могу запросить данные с помощью интерактивного проводника API.

В моем node.js код, который я аутентифицировать с API при запуске сервера так:

var googleapis_key = require('./config/google-api-key.json'); 
var googleapis = require('googleapis'); 
var googleapis_jwtClient = new googleapis.auth.JWT(
    googleapis_key.client_email, 
    null, 
    googleapis_key.private_key, 
    ["https://www.googleapis.com/auth/analytics.readonly"], 
    null); 
var googleapis_analyticsreporting = googleapis.analyticsreporting('v4'); 

googleapis_jwtClient.authorize(function(err, tokens) { 
    if (err) { 
     lStartup.error(err); 
     lStartup.error("Could not authenticate with google API. Analytics not available."); 
    } else { 
     lStartup.info("Successfully authenticated with google service-account."); 
     lStartup.debug(googleapis_jwtClient.credentials); 
    } 
}); 

(где lStartup является log4js регистратор). Я получаю положительный ответ от Google, ошибка не задана, и учетные данные, зарегистрированные в консоли, выглядят убедительными.

Позже, когда соответствующая просьба приходит клиент в моем сервере пытается спросить Google для данных:

var reportingrequests = { 
     "reportRequests": [ 
      { 
       "viewID": "138122972", 
       "dateRanges": [{"startDate": "7daysAgo", "endDate": "yesterday"}], 
       "metrics": [{"expression": "ga:users"}] 
      } 
     ] 
    }; 

    logger.debug(JSON.stringify(reportingrequests)); 

    googleapis_analyticsreporting.reports.batchGet(
    {  
     "resource": reportingrequests, 
     "auth": googleapis_jwtClient, 
    }, 
    function(err, response) { 
     if (err) { 
      // Failure. Log and report to the client. 
      console.error("Could not query the Google Analytics reporting API"); 
      console.error(err); 

      res.writeHead(500, "Internal server error. (Google analytics:" + err + ")"); 
      res.end(JSON.stringify(err)); 
     } else { 
      // Success, just serve googles result to the client. 
      res.end(JSON.stringify(response)); 
     } 
    } 
); 

Отклик ошибка

[ { message: 'Invalid JSON payload received. Unknown name "view_id" at \'report_requests[0]\': Cannot find field.', 
    domain: 'global', 
    reason: 'badRequest' } ] } 

Что он пытается сказать мне здесь ? У меня нет свойств с именем view_id или report_requests в моем JSON. Хотя они выглядят подозрительно, как мои де-camelcased.

+0

Я думаю, что snake_case v. CamelCase в названиях свойств - это красная селедка. Это как раз то, как API обрабатывает вещи внутри себя. Я удалил свойство viewID, сообщение об ошибке изменилось на «Parameter viewID должно быть установлено», обратите внимание, что CamelCase остался нетронутым. Я изменил значение на что-то известное - плохое. То же "неизвестное имя" view_id "". Так неправильно? Я проверил его несколько раз. –

ответ

2

Ненавижу автоответчик, но я люблю решения!

"viewID": "138122972", 

должно быть

"viewId": "138122972", 

Обратите внимание на нижний регистр "d".

По иронии судьбы, ключ к этому заключается в преобразовании camelCase в snake_case. Если имя параметра было «viewID», оно было бы возможно связано с snake_cased с «view_i_d», что не является тем, что находится в сообщении об ошибке.

Я чувствую себя глупо, но также счастлив, что смог продолжить.

Смежные вопросы