更新:我已将代码转换为NPM module。
我已经创建了JWT token for a service account,我可以访问用户数据,但我想获取我的分析数据,以便在我的网站上推广内容。
注意:我不知道是否有比这更好的方法,但现有的npm工具似乎要求您输入密码。因此,我最终使用REST调用而不是gapi
工具。
这是我得到的错误
{ error:
{ errors: [ [Object] ],
code: 403,
message: 'User does not have any Google Analytics account.' } }
以下是我正在使用的代码,用于处理用户数据。
var oauth2Client = new OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
var scopes = [
'https://www.googleapis.com/auth/plus.me',
'https://www.googleapis.com/auth/analytics.readonly'
];
var d = new Date();
var seconds = d.getTime() / 1000 + 60*59;
var SERVICE_CLIENT_ID = "xxxxxxx-0h21osagsg02eqk45me6ts7jn3kf0vfr.apps.googleusercontent.com";
var SERVICE_EMAIL = "xxxxxxx-0h21osagsg02eqk45me6ts7jn3kf0vfr@developer.gserviceaccount.com"
var claim_set = {
"iss": SERVICE_EMAIL,
"scope": 'https://www.googleapis.com/auth/analytics.readonly',
"aud": 'https://www.googleapis.com/oauth2/v3/token',
"exp":seconds,
"iat":seconds
};
var algorithm = {"alg":"RS256","typ":"JWT"};
var private_key = fs.readFileSync('privatekey.pem');
var signature = jwt.sign(claim_set, private_key, { algorithm: algorithm.alg});
var post_obj = {
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
assertion: signature
};
request.post({
url:'https://www.googleapis.com/oauth2/v3/token',
form: post_obj
}, function(err, data) {
if (err) throw err;
var body = JSON.parse(data.body);
var token = body.access_token;
// console.log(token);
console.log("Token: ",token);
var auth_obj = {
'auth': {
'bearer': token
}
};
// THIS CODE DOES RETURN INFORMATION
// request.get('https://www.googleapis.com/plus/v1/people/me', auth_obj, function(err, data) {
// if (err) throw err;
// console.log(JSON.parse(data.body));
// });
var report = {
'ids': 'ga:78624107',
'start-date': '2014-10-01',
'end-date': '2014-12-31',
'metrics': 'ga:sessions,ga:bounces'
};
var report2 = 'metrics=ga%253Ausers&start-date=2015-02-24&end-date=2015-03-10&max-results=50'
var report3 = 'ids=ga:78624107&start-date=2015-02-24&end-date=2015-03-10&metrics=ga:users'
request.get('https://www.googleapis.com/analytics/v3/data/ga?'+report3, auth_obj, function(err, data) {
if (err) throw err;
console.log(JSON.parse(data.body));
});
});
答案 0 :(得分:5)
默认情况下,服务帐户没有Google Analytics帐户。
进入Google Analytics网站,管理部分以ACCOUNT
级别的用户身份添加服务帐户电子邮件地址,必须为帐户级别。然后,服务帐户将有权阅读您的Google分析数据。