使用JavaScript访问未经许可的Google分析页面

我正在使用Atlasboard创build仪表板。

我需要访问Google分析数据,例如页面浏览等,在这里我将运行一些查询。

有没有方法来访问我的谷歌分析数据没有这个同意页面出现? 在这里输入图像描述

我正在使用google-api-nodejs-client api。

我发现这个职位 ,有人提到使用服务帐户。 但我无法find这个工作在JavaScript中。

任何帮助将是伟大的!

我终于设法find了解决这个问题! 这是解决scheme:)

假设您已经拥有Google Analytics(分析)帐户,其中包含视图等网站数据并安​​装了请求和googleapis模块。

首先,您需要在console.developers.google.com上创build一个Google控制台帐户。

在Google控制台中:

  • 使用适当的名称创build一个项目,例如dashboard1。
  • 从左侧菜单打开API&Auth – >打开API选项卡 – >打开分析API。
  • 打开凭证选项卡 – >创build新的客户端ID – >select服务帐户
  • 一键应自动下载 – >点击键并按照说明操作 – >默认密码是“notasecret” – >它会输出一个.pem文件
  • 该服务帐户将有一个电子邮件地址,例如123434234324f34f5fd4ww5f@developer.gserviceaccount.com

现在访问www.google.com/analytics,转到您的Google分析帐户:

在仪表板作业(服务器端使用nodejs)中:

使用此代码:

var fs = require('fs'), crypto = require('crypto'), request = require('request'); // This is an external module (https://github.com/mikeal/request) var authHeader = { 'alg': 'RS256', 'typ': 'JWT' }, authClaimSet = { 'iss': '#######SERVICE ACCOUNT EMAIL GOES HERE#######', // Service account email 'scope': 'https://www.googleapis.com/auth/analytics.readonly', // We MUST tell them we just want to read data 'aud': 'https://accounts.google.com/o/oauth2/token' }, SIGNATURE_ALGORITHM = 'RSA-SHA256', SIGNATURE_ENCODE_METHOD = 'base64', GA_KEY_PATH = '#######DIRECTORY TO YOUR .PEM KEY#######', //finds current directory then appends private key to the directory gaKey; function urlEscape(source) { return source.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, ''); } function base64Encode(obj) { var encoded = new Buffer(JSON.stringify(obj), 'utf8').toString('base64'); return urlEscape(encoded); } function readPrivateKey() { if (!gaKey) { gaKey = fs.readFileSync(GA_KEY_PATH, 'utf8'); } return gaKey; } var authorize = function(callback) { var self = this, now = parseInt(Date.now() / 1000, 10), // Google wants us to use seconds cipher, signatureInput, signatureKey = readPrivateKey(), signature, jwt; // Setup time values authClaimSet.iat = now; authClaimSet.exp = now + 60; // Token valid for one minute // Setup JWT source signatureInput = base64Encode(authHeader) + '.' + base64Encode(authClaimSet); // Generate JWT cipher = crypto.createSign('RSA-SHA256'); cipher.update(signatureInput); signature = cipher.sign(signatureKey, 'base64'); jwt = signatureInput + '.' + urlEscape(signature); // Send request to authorize this application request({ method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, uri: 'https://accounts.google.com/o/oauth2/token', body: 'grant_type=' + escape('urn:ietf:params:oauth:grant-type:jwt-bearer') + '&assertion=' + jwt }, function(error, response, body) { if (error) { console.log(error); callback(new Error(error)); } else { var gaResult = JSON.parse(body); if (gaResult.error) { callback(new Error(gaResult.error)); } else { callback(null, gaResult.access_token); console.log(gaResult); console.log("Authorized"); ###########IF IT REACHES THIS STAGE THE ACCOUNT HAS BEEN AUTHORIZED############## } } }); }; var request = require('request'), qs = require('querystring'); authorize(function(err, token) { if (!err) { // Query the number of total visits for a month ############requestConfig################ var requestConfig = { 'ids': 'ga:#######PROJECT ID GOES HERE#######', 'dimensions': 'ga:country', 'metrics': 'ga:users', 'sort': '-ga:users', 'start-date': '2014-04-08', 'end-date': '2014-04-22', 'max-results': '10' }; request({ method: 'GET', headers: { 'Authorization': 'Bearer ' + token // Here is where we use the auth token }, uri: 'https://www.googleapis.com/analytics/v3/data/ga?' + qs.stringify(requestConfig) }, function(error, resp, body) { console.log(body); var data = JSON.parse(body); console.log(data); }); } }); 

请记住,您拥有自己的电子邮件账户,GA_KEY_PATH和IDS

您可以通过更改requestConfig来Google分析数据。 我使用这个Google Analytics(分析)查询工具来帮助我: http : //ga-dev-tools.appspot.com/explorer/

数据应该在控制台中输出。

希望这可以帮助 :)

除了smj2393的回答以外,对于那些想要创build特定url来检索Google Analytics API所提供的JSON的人来说,下面是一个Node Express路由的示例。 您需要安装官方的Google API Node npm软件包( https://www.npmjs.org/package/googleapis )。

 var google = require('googleapis'); var analytics = google.analytics('v3'); var ENV = process.env; //get key.p12 in Google Developer console //Extract it with : openssl pkcs12 -in key.p12 -nodes -nocerts > key.pem //Get GOOGLE_API_EMAIL in Google Developer console (Service Account) //Get GOOGLE_ANALYTICS_VIEW_ID in Google Analytics Console : Admin -> View -> View Parameters -> View ID //Add GOOGLE_API_EMAIL in the Google Analytics account users var authClient = new google.auth.JWT( ENV.GOOGLE_API_EMAIL, './keys/googlekey.pem', //path to .pem null, // Scopes can be specified either as an array or as a single, space-delimited string ['https://www.googleapis.com/auth/analytics.readonly']); module.exports = function(req, res, next) { var startDate = (req.query.start_date) ? req.query.start_date : '7daysAgo'; var endDate = (req.query.end_date) ? req.query.end_date : 'yesterday'; authClient.authorize(function(err, tokens) { if (err) { console.log(err); return; } // Make an authorized request to list analytics files. // list of dimensions and metrics : https://developers.google.com/analytics/devguides/reporting/core/dimsmets analytics.data.ga.get({ auth: authClient, "ids":'ga:'+ENV.GOOGLE_ANALYTICS_VIEW_ID, "start-date":startDate, "end-date":endDate, "metrics":"ga:sessions,ga:pageviews", "dimensions":"ga:deviceCategory" }, function(err, result) { console.log(err); console.log(result); if(!err){ res.json(result); } else{ next(); } }); }); } 

此路由将显示一个JSON,代表设备(桌面,移动设备和平板电脑)的会话和pageViews的数量。 您可以使用GETparameter passingstart_date或end_date。

希望这个帮助。

查看Atlasboard Atlassian软件包中的google-analytics作业。 它使用Google API Node.js客户端 npm包:

https://bitbucket.org/atlassian/atlasboard-atlassian-package/src/master/jobs/google-analytics/google-analytics.js?at=master&fileviewer=file-view-default

您可以使用它与实时或传统Google Analytics API进行交谈。