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