Mar*_*vel 1 google-analytics google-api-nodejs-client
我正在尝试从 node.js 应用程序查询 Google Analytics Reporting API。
我想我已经在 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);
}
});
Run Code Online (Sandbox Code Playgroud)
(其中 lStartup 是一个 log4js 记录器)。我得到了 Google 的肯定答复,未设置 err 并且记录到控制台的凭据看起来令人信服。
然后当相关的客户端请求进入我的服务器时,尝试向谷歌询问数据:
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));
}
}
);
Run Code Online (Sandbox Code Playgroud)
响应是一个错误
[ { message: 'Invalid JSON payload received. Unknown name "view_id" at \'report_requests[0]\': Cannot find field.',
domain: 'global',
reason: 'badRequest' } ] }
Run Code Online (Sandbox Code Playgroud)
在这里想告诉我什么?我的 JSON 中没有名为 view_id 或 report_requests 的属性。尽管它们看起来很像我的去驼色。
我讨厌自我回答,但我喜欢解决方案!
"viewID": "138122972",
Run Code Online (Sandbox Code Playgroud)
应该
"viewId": "138122972",
Run Code Online (Sandbox Code Playgroud)
注意小写的“d”。
具有讽刺意味的是,这个问题的线索是在驼峰式到蛇形大小写的转换中。如果参数名称是“viewID”,它可能会被蛇形大小写为“view_i_d”,这不是错误消息中的内容。
我觉得自己很愚蠢,但也很高兴能够继续下去。
| 归档时间: |
|
| 查看次数: |
1224 次 |
| 最近记录: |