Javascript 在不登录的情况下使用GAPI获取谷歌分析数据
我有一个新闻网站,我必须使用google analytics跟踪的数据显示“当天访问量最大的前5条新闻”,但我还没有成功做到这一点。我找到的每一个代码示例都会显示一个登录弹出窗口,就好像他在谷歌上的账户与分析中的数据相链接,但显然不是这样。 我试着用JS,类似这样的东西Javascript 在不登录的情况下使用GAPI获取谷歌分析数据,javascript,google-analytics,oauth-2.0,google-api-js-client,Javascript,Google Analytics,Oauth 2.0,Google Api Js Client,我有一个新闻网站,我必须使用google analytics跟踪的数据显示“当天访问量最大的前5条新闻”,但我还没有成功做到这一点。我找到的每一个代码示例都会显示一个登录弹出窗口,就好像他在谷歌上的账户与分析中的数据相链接,但显然不是这样。 我试着用JS,类似这样的东西 <script src="https://apis.google.com/js/client:platform.js"></script> ... <script> funct
<script src="https://apis.google.com/js/client:platform.js"></script>
...
<script>
function start() {
// 2. Initialize the JavaScript client library.
gapi.client.load('analytics', 'v3').then(function() {
gapi.client.init({
'apiKey': 'SOME_API_KEY',
'clientId': 'SOME_CLIENT_ID',
'scope': 'https://www.googleapis.com/auth/analytics.readonly',
}).then(function() {
return gapi.client.analytics.data.ga.get({
'ids': 'ga:' + "SOME_ID",
'start-date': 'yesterday',
'end-date': 'today',
'metrics': 'ga:pageviews',
'dimensions': 'ga:pagetitle',
'max-results': '5',
'sort': '-ga:pageviews,-ga:date'
});
}).then(function(response) {
console.log(response );
}, function(reason) {
console.log(reason)
console.log('Error: ' + reason.result.error.message);
});
});
};
gapi.load('client', start);
</script>
我遗漏了什么?您可以使用客户端代码绕过登录。最简单的解决方法是在Google Data Studio中创建表,然后将其嵌入到您的站点。我不确定您是否能够使用NodeJS。但是如果你使用图书馆或图书馆。有关使用NodeJS的googleapis的示例教程,请参见 您需要使用服务帐户中的密钥,因此需要创建服务帐户。您可以使用访问令牌登录,方法是使用googleapis.auth.JWT,它需要您的serviceaccount电子邮件地址、私钥和作用域[“”] 我将向您展示我的一个项目中的一些示例代码: Googleapis库NodeJS(我使用的是express,我在路由中使用了承诺来获取密钥和google api数据) 路由和库示例
var express = require('express');
var router = express.Router();
var googleAuth = require('google-oauth-jwt');
router.get('/login', function(req, res, next) {
googleAuth.authenticate({
email: 'yourserviceaccount@project.iam.gserviceaccount.com',
// use the PEM file we generated from the downloaded key
key: "-----BEGIN PRIVATE KEY-----\nMII [your big ass private key which can be obtained by using a file too.-----END PRIVATE KEY-----\n",
// specify the scopes you wish to access
scopes: ['https://www.googleapis.com/auth/analytics.readonly']
}, function (err, token) {
res.json({token: token});
});
});
var jwtClient = new google.auth.JWT(
'[your serviceaccount@emailaddress]',
path.join(__dirname, '../.', '/files/KEY.json'),//path to your json key file]
null,
['https://www.googleapis.com/auth/analytics.readonly'] //scope
);
jwtClient.authorize(function (err, tokens) {
console.log('jwtClient.authorize() started');
//console.log(tokens);
if (err) {
console.log('error in authorization:' + err);
return;
} else {
console.log('authorization success!');
console.log(tokens);
return tokens;
}
});
var VIEW_ID = 'ga:[yourviewid]';
analytics.data.ga.get({
'auth': jwtClient,
'ids': VIEW_ID,
'metrics': 'ga:uniquePageviews',
'dimensions': 'ga:pagePath',
'start-date': 'today',
'end-date': 'today',
'sort': '-ga:uniquePageviews',
'max-results': 5,
}, function (err, response) {
if (err) {
console.log(err);
return;
}
//console.log(JSON.stringify(response, null, 4));
return JSON.stringify(response, null, 4);
});
var express = require('express');
var router = express.Router();
var googleAuth = require('google-oauth-jwt');
router.get('/login', function(req, res, next) {
googleAuth.authenticate({
email: 'yourserviceaccount@project.iam.gserviceaccount.com',
// use the PEM file we generated from the downloaded key
key: "-----BEGIN PRIVATE KEY-----\nMII [your big ass private key which can be obtained by using a file too.-----END PRIVATE KEY-----\n",
// specify the scopes you wish to access
scopes: ['https://www.googleapis.com/auth/analytics.readonly']
}, function (err, token) {
res.json({token: token});
});
});