javascript - 谷歌分析嵌入 API : How to retireve access token?

标签 javascript google-analytics google-analytics-api

我使用了 this question 中提供的代码访问 Google Analytics Embed API。我想显示我网站的统计信息,而不需要具有正确权限的用户登录(因此没有登录屏幕)。

因此,我创建了一个服务帐户并保存了 p12 文件。但是,以下代码显示一个空页面。

<!DOCTYPE html>
<html>
<head>
  <title>Embed API Demo</title>
</head>
<body>

<section id="timeline"></section>

<script>
(function(w,d,s,g,js,fjs){
  g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(cb){this.q.push(cb)}};
  js=d.createElement(s);fjs=d.getElementsByTagName(s)[0];
  js.src='https://apis.google.com/js/platform.js';
  fjs.parentNode.insertBefore(js,fjs);js.onload=function(){g.load('analytics')};
}(window,document,'script'));
</script>

<script>
gapi.analytics.ready(function() {

  var IDS = 'ga:XXXX'; // I've hidden my personal ID for security purposes
  var ACCESS_TOKEN = 'key.p12'; // obtained from your service account

  gapi.analytics.auth.authorize({
    serverAuth: {
      access_token: ACCESS_TOKEN
    }
  });

  var timeline = new gapi.analytics.googleCharts.DataChart({
    reportType: 'ga',
    query: {
      'ids': IDS,
      'dimensions': 'ga:date',
      'metrics': 'ga:sessions',
      'start-date': '30daysAgo',
      'end-date': 'yesterday',
    },
    chart: {
      type: 'LINE',
      container: 'timeline'
    }
  }).execute();

});
</script>
</body>
</html>

也许访问 token 不应该是 p12 文件?但如果是这样,应该是什么?我真的迷路了。

最佳答案

您完全可以将服务帐户与 Embed API 结合使用。诀窍是从 .p12 文件获取访问 token ,但是一旦您拥有有效的访问 token ,您的代码就可以正常工作。

我刚刚亲自验证了这一点。以下是我采取的步骤:

我创建了一个服务帐户,然后按照 google-oauth-jwt node module 上列出的步骤进行操作文档页面以获取访问 token 。 (如果您不使用 Node.js,只需在 Google 上搜索它在其他语言中的工作原理,this devguide 描述了 PHP 的过程。)

我使用以下命令将 .p12 文件转换为 .pem 文件(需要使用 Node):

openssl pkcs12 -in downloaded-key-file.p12 -out your-key-file.pem -nodes

我运行了以下 Node 程序以从 .pem 文件获取访问 token :

var googleAuth = require('google-oauth-jwt');
var authOptions = {
  email: 'my-service-account@developer.gserviceaccount.com',
  keyFile: './key.pem',
  scopes: ['https://www.googleapis.com/auth/analytics']
};

googleAuth.authenticate(authOptions, function (err, token) {
  console.log(token);
});

一旦我获得了访问 token ,我就将其代入您问题中的代码,启动本地服务器,一切正常。

关于javascript - 谷歌分析嵌入 API : How to retireve access token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070463/

相关文章:

php - Analytics Reporting API V4 api 问题

r - 使用 RGoogleAnalytics 从 google 检索数据

javascript - Codeigniter 表单验证检查输入值是否已更改

javascript - 链表替换和删除

php - 使用 GAPI 获取无维度的指标

google-analytics - Google Analytics API 设备类别

google-analytics - Google Analytics 通用 - 增强的电子商务结账

google-analytics - 如何在 BigQuery 中识别广告分发网络

javascript - 带有 Bootstrap 选择器的 Knockout.JS

javascript - 在 jQuery Ajax 中,数据类型 : jsonp gives "SyntaxError: unterminated string literal" while dataType:json works fine?