2013-09-08 13 views
6

Sto utilizzando nodejs e vorrei visualizzare alcuni dati di google analytics.Accesso a google analytics tramite nodejs

su google API esploratore, ho trovare questo URL per ottenere la mia dati:

https://www.googleapis.com/analytics/v3/data/ga?ids=ga%XXXXX&start-date=2013-08-17&end-date=2013-09-15&metrics=ga%3Avisits&key={YOUR_API_KEY} 

Tuttavia, se accedo questo URL ottengo:

{"error":{"errors":[{"domain":"global","reason":"required","message":"Login Required","locationType":"header","location":"Authorization"}],"code":401,"message":"Login Required"}} 

Come posso passare il mio login attraverso l'url e quindi accedere ai miei dati?

Grazie!

+0

Stai effettivamente inserendo la chiave API qui? '& key = {YOUR_API_KEY}' – datasage

+0

Sì, l'ho fatto. Ma sembra che io avessi bisogno di un token. Uso la richiesta per chiamare "https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXX88&metrics=ga:visits&start-date=2013-08-17&end-date=2013-09-15&access_token= XXXXXXXX e access_type_token = bearer' e tutto funziona. – sayam

+0

Ma quando provo ad aggiornare il token, utilizzando la richiesta su 'https: //accounts.google.com/o/oauth2/token? Client_secret = XXX & grant_type = refresh_token e refresh_token = YYYY e client_id = ZZZZ' Ricevo' errore, richiesta non valida. – sayam

risposta

0

Stai impostando Content-Type su application/x-www-form-urlencoded?

Se siete ancora bloccati, vale la pena notare che Google ha rilasciato una libreria nodejs cliente (alpha) qui: https://github.com/google/google-api-nodejs-client

+0

Finalmente ho avuto successo, usando request.get. Ma comunque, guarderò questa libreria, grazie. – sayam

11

Dalla console API di Google, è necessario attivare l'API Analytics, e, infine, l'installazione di un Account di servizio, verrà quindi scaricato un file *.p12.

Da questo file *.p12, è necessario convertirlo in un file *.pem, per farlo, eseguire il seguente:

openssl pkcs12 -in XXXXX.p12 -nocerts -nodes -out XXXXX.pem

Ti verrà chiesto di una password, dovrebbe essere notasecret

Ora hai il file *.pem che ti serve e l'indirizzo email è quello visualizzato nella console di Google API, come EMAIL ADDRESS.

Non dimenticare di aggiungere questo indirizzo al tuo account Analytics (vedi: Analytics Google API Error 403: "User does not have any Google Analytics Account")

Si dovrebbe essere buona per andare con il seguente frammento:

var googleapis = require('googleapis'), 
    JWT = googleapis.auth.JWT, 
    analytics = googleapis.analytics('v3'); 

var SERVICE_ACCOUNT_EMAIL = '[email protected]'; 
var SERVICE_ACCOUNT_KEY_FILE = __dirname + '/key.pem'; 


var authClient = new JWT(
    SERVICE_ACCOUNT_EMAIL, 
    SERVICE_ACCOUNT_KEY_FILE, 
    null, 
    ['https://www.googleapis.com/auth/analytics.readonly'] 
); 

authClient.authorize(function(err, tokens) { 
    if (err) { 
     console.log(err); 
     return; 
    } 

    analytics.data.ga.get({ 
     auth: authClient, 
     'ids': 'ga:XXXXXXXX', 
     'start-date': '2015-01-19', 
     'end-date': '2015-01-19', 
     'metrics': 'ga:visits' 
    }, function(err, result) { 
     console.log(err); 
     console.log(result); 
    }); 
}); 
0

@ xavier.seignard seguo la vostra snippet ma con modifiche perché sto usando un file json invece di p12 (codice sotto). Ma ho un dubbio, sto sviluppando un backend riposante in nodejs. In questo caso, non è necessario inserire la funzione ga.get all'interno dell'app.use() per ottenere informazioni di analisi per ogni richiesta effettuata?

var key = require('filename.json'); 
var authClient = new JWT(
key.client_email, 
null, 
key.private_key, 
['https://www.googleapis.com/auth/analytics.readonly']);