【问题标题】:Accessing google analytics through nodejs通过 nodejs 访问谷歌分析
【发布时间】:2013-09-11 20:03:06
【问题描述】:

我正在使用 nodejs,我想显示一些来自谷歌分析的数据。

在 google API explorer 上,我找到了这个 url 来获取我的数据:

https://www.googleapis.com/analytics/v3/data/ga?ids=ga%XXXXX&start-date=2013-08-17&end-date=2013-09-15&metrics=ga%3Avisits&key={YOUR_API_KEY}

但是,如果我访问此网址,我会得到:

{"error":{"errors":[{"domain":"global","reason":"required","message":"Login Required","locationType":"header","location":"Authorization"}],"code":401,"message":"Login Required"}}

如何通过 url 传递我的登录信息,然后访问我的数据?

谢谢!

【问题讨论】:

  • 你真的把你的 API 密钥放在这里了吗? &key={YOUR_API_KEY}
  • 是的,我做到了。但似乎我需要令牌。我使用请求调用https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXX88&metrics=ga:visits&start-date=2013-08-17&end-date=2013-09-15&access_token=XXXXXXXX&access_type_token=bearer,一切正常。
  • 但是当我尝试刷新令牌时,使用https://accounts.google.com/o/oauth2/token?client_secret=XXX&grant_type=refresh_token&refresh_token=YYYY&client_id=ZZZZ 上的请求我得到error, invalid request.

标签: node.js google-analytics google-api


【解决方案1】:

从 Google API 控制台,您需要激活 Analytics API,最后设置一个服务帐户,然后您将下载一个*.p12 文件。

从这个*.p12 文件中,您需要将其转换为*.pem 文件,为此,运行以下命令:

openssl pkcs12 -in XXXXX.p12 -nocerts -nodes -out XXXXX.pem

你会被要求输入密码,应该是notasecret

现在您得到了您需要的*.pem 文件,并且帐户电子邮件是在google api 控制台中显示的电子邮件,如EMAIL ADDRESS

不要忘记将此地址添加到您的分析帐户(请参阅:Analytics Google API Error 403: "User does not have any Google Analytics Account"

您应该很好地使用以下 sn-p:

var googleapis = require('googleapis'),
    JWT = googleapis.auth.JWT,
    analytics = googleapis.analytics('v3');

var SERVICE_ACCOUNT_EMAIL = 'XXXXXXXXXX@developer.gserviceaccount.com';
var SERVICE_ACCOUNT_KEY_FILE = __dirname + '/key.pem';


var authClient = new JWT(
    SERVICE_ACCOUNT_EMAIL,
    SERVICE_ACCOUNT_KEY_FILE,
    null,
    ['https://www.googleapis.com/auth/analytics.readonly']
);

authClient.authorize(function(err, tokens) {
    if (err) {
        console.log(err);
        return;
    }

    analytics.data.ga.get({ 
        auth: authClient,
        'ids': 'ga:XXXXXXXX',
        'start-date': '2015-01-19',
        'end-date': '2015-01-19',
        'metrics': 'ga:visits'
    }, function(err, result) {
        console.log(err);
        console.log(result);
    });
});

【讨论】:

    【解决方案2】:

    您是否将 Content-Type 设置为 application/x-www-form-urlencoded?

    如果你仍然卡住,值得注意的是,谷歌在这里发布了一个 nodejs 客户端库(alpha):https://github.com/google/google-api-nodejs-client

    【讨论】:

    • 我终于成功了,使用request.get。不过,我还是看看这个库,谢谢。
    【解决方案3】:

    @xavier.seignard 我遵循您的 sn-p 但进行了修改,因为我使用的是 json 文件而不是 p12(下面的代码)。 但我有一个疑问,我正在 nodejs 中开发一个宁静的后端。 在这种情况下,是否有必要将 ga.get 函数放在 app.use() 中以获取每个请求的分析信息?

    var key = require('filename.json');
    var authClient = new JWT(
    key.client_email,
    null,
    key.private_key,
    ['https://www.googleapis.com/auth/analytics.readonly']);
    

    【讨论】:

      猜你喜欢
      • 2019-07-07
      • 2015-09-28
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 2016-02-16
      • 2016-05-09
      • 1970-01-01
      相关资源
      最近更新 更多