google-analytics - 查询谷歌分析报告 API 时出现未知名称 "view_id"错误

标签 google-analytics google-api-nodejs-client

我正在尝试从 node.js 应用程序查询 Google Analytics Reporting API。

我想我已经在谷歌方面正确设置了所有东西,包括一个服务帐户,但我一定错过了一件。

我的应用程序成功地将使用数据发送到 Google,我可以在实时 View 中看到它。我还可以使用交互式 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 记录器)。我从谷歌得到了积极的回应,没有设置错误,登录到控制台的凭据看起来很有说服力。

然后稍后当相关的客户端请求进入我的服务器时,我会尝试向谷歌询问数据:
    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' } ] }

它想在这里告诉我什么?我的 JSON 中没有名为 view_id 或 report_requests 的属性。尽管它们看起来很像我的脱 Camel 。

最佳答案

我讨厌自我回答,但我喜欢解决方案!

"viewID": "138122972",

应该
"viewId": "138122972",

注意小写的“d”。

具有讽刺意味的是,这一点的线索是在 camelCase 到 snake_case 的转换中。如果参数名称是“viewID”,则它可能已被蛇形大小写为“view_i_d”,这不是错误消息中的内容。

我觉得自己很愚蠢,但也很高兴能够继续下去。

关于google-analytics - 查询谷歌分析报告 API 时出现未知名称 "view_id"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41676759/

相关文章:

javascript - oauth2Client.getToken 缺少 refresh_token

node.js - 如何使用 google-api-nodejs-client 获取群组成员列表

google-analytics - 如何从 Google Analytics 中排除 oauth referrer?

http - 通过普通 HTTP POST 请求跟踪 Google Analytics 上的事件

node.js - Google API NodeJS 库 OAuth2 请求

javascript - 如何将字符串作为文件上传到 Google 云端硬盘?

node.js - 驱动服务API某些参数不起作用

php - Google Analytics API开始发出错误403权限不足(PHP)

ios - viewController.title 在 Google Analytics 初始化后为 nil

c# - 您会建议 Google Analytic 在您的 Web App Application Admin 部分中跟踪用户事件吗?