node.js - nodejs - oauth2 google web service
Nodo: datos de Google Analytics a través de una cuenta de servicio (1)
Una cuenta de servicio de manera predeterminada no tiene una cuenta de Google Analytics.
Vaya al sitio web de Google Analytics, en la sección Admin, agregue la dirección de correo electrónico de la cuenta de servicio como usuario a nivel de ACCOUNT
, debe estar en el nivel de la cuenta. Luego, la cuenta de servicio tendrá acceso para leer sus datos de análisis de Google.
Actualización: desde entonces he convertido el código en un módulo de NPM .
Trabajé para crear un token JWT para una cuenta de servicio , y puedo acceder a los datos del usuario, pero quiero acceder a mis datos analíticos para utilizarlos en el contenido de mi sitio web.
Nota: No sé si hay una manera mejor que esto, pero las herramientas existentes de npm parecen requerir que ingrese su contraseña. Como resultado, termino usando llamadas REST en lugar de las herramientas gapi
.
Este es el error que obtengo
{ error:
{ errors: [ [Object] ],
code: 403,
message: ''User does not have any Google Analytics account.'' } }
Aquí está el código que estoy usando, que funciona para los datos del usuario.
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));
});
});