2014-04-10 16 views
8

Tworzę pulpit nawigacyjny przy użyciu Atlasboard.Dostęp do Google Analytics bez strony zgody za pomocą JavaScript

Potrzebuję uzyskać dostęp do danych Google Analytics, takich jak odsłony itp., W których będę wyświetlał niektóre zapytania wyświetlane here.

Czy istnieje sposób uzyskania dostępu do moich danych analitycznych Google bez wyświetlenia strony zgody? enter image description here

Używam api google-api-nodejs-client.

Znalazłem this post, gdy ktoś wspomniał o korzystaniu z konta usługi. Ale nie mogę znaleźć, by działało to w JavaScript.

Każda pomoc będzie świetna!

+1

Według mojej wiedzy nie można używać konta usługi z JavaScript. Jest to najprawdopodobniej spowodowane problemami bezpieczeństwa. Sugeruję przejście na język skryptowy po stronie serwera – DaImTo

+0

Ok, okrzyki! Przeprowadzę trochę więcej badań i opublikuję moje wyniki! – smj2393

Odpowiedz

10

W końcu udało mi się znaleźć rozwiązanie tego problemu !!! Oto rozwiązanie :)

to zakładając masz już konto Google Analytics, który ma dane rekreacyjnych takich jak widoki i mieć zainstalowane moduły request i googleapis.

Najpierw należy utworzyć konto konsoli Google pod numerem console.developers.google.com.

Na konsoli Google:

  • stworzyć projekt z odpowiednią nazwą np deska rozdzielcza1.
  • Otwórz API & Auth z menu po lewej stronie -> otwórz zakładkę API -> włącz interfejs analityczny API.
  • Otwórz kartę poświadczeń -> utwórz nowy identyfikator klienta -> wybierz konto usługi
  • Klucz powinien automatycznie pobrać -> kliknij klucz i postępuj zgodnie z instrukcjami -> domyślne hasło to "notasecret" -> to będzie następnie wypisz plik .pem
  • Konto usługi będzie miało adres e-mail, np. [email protected]

Teraz przejdź do swojego konta Google Analytics w www.google.com/analytics:

w pracy (na desce rozdzielczej po stronie serwera przy użyciu nodejs):

użyć tego kodu:

var fs = require('fs'), 
     crypto = require('crypto'), 
     request = require('request'); // This is an external module (https://github.com/mikeal/request) 

    var authHeader = { 
      'alg': 'RS256', 
      'typ': 'JWT' 
     }, 
     authClaimSet = { 
      'iss': '#######SERVICE ACCOUNT EMAIL GOES HERE#######', // Service account email 
      'scope': 'https://www.googleapis.com/auth/analytics.readonly', // We MUST tell them we just want to read data 
      'aud': 'https://accounts.google.com/o/oauth2/token' 
     }, 
     SIGNATURE_ALGORITHM = 'RSA-SHA256', 
     SIGNATURE_ENCODE_METHOD = 'base64', 
     GA_KEY_PATH = '#######DIRECTORY TO YOUR .PEM KEY#######', //finds current directory then appends private key to the directory 
     gaKey; 

    function urlEscape(source) { 
     return source.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, ''); 
    } 

    function base64Encode(obj) { 
     var encoded = new Buffer(JSON.stringify(obj), 'utf8').toString('base64'); 
     return urlEscape(encoded); 
    } 

    function readPrivateKey() { 
     if (!gaKey) { 
      gaKey = fs.readFileSync(GA_KEY_PATH, 'utf8'); 
     } 
     return gaKey; 
    } 

    var authorize = function(callback) { 

     var self = this, 
      now = parseInt(Date.now()/1000, 10), // Google wants us to use seconds 
      cipher, 
      signatureInput, 
      signatureKey = readPrivateKey(), 
      signature, 
      jwt; 

     // Setup time values 
     authClaimSet.iat = now; 
     authClaimSet.exp = now + 60; // Token valid for one minute 

     // Setup JWT source 
     signatureInput = base64Encode(authHeader) + '.' + base64Encode(authClaimSet); 

     // Generate JWT 
     cipher = crypto.createSign('RSA-SHA256'); 
     cipher.update(signatureInput); 
     signature = cipher.sign(signatureKey, 'base64'); 
     jwt = signatureInput + '.' + urlEscape(signature); 

     // Send request to authorize this application 
     request({ 
      method: 'POST', 
      headers: { 
       'Content-Type': 'application/x-www-form-urlencoded' 
      }, 
      uri: 'https://accounts.google.com/o/oauth2/token', 
      body: 'grant_type=' + escape('urn:ietf:params:oauth:grant-type:jwt-bearer') + 
       '&assertion=' + jwt 
     }, function(error, response, body) { 
      if (error) { 
       console.log(error); 
       callback(new Error(error)); 
      } else { 
       var gaResult = JSON.parse(body); 
       if (gaResult.error) { 
        callback(new Error(gaResult.error)); 
       } else { 
        callback(null, gaResult.access_token); 
        console.log(gaResult); 
        console.log("Authorized"); 
        ###########IF IT REACHES THIS STAGE THE ACCOUNT HAS BEEN AUTHORIZED############## 
       } 
      } 
     }); 

    }; 



    var request = require('request'), 
     qs = require('querystring'); 

    authorize(function(err, token) { 
     if (!err) { 
      // Query the number of total visits for a month 
      ############requestConfig################ 
      var requestConfig = { 
       'ids': 'ga:#######PROJECT ID GOES HERE#######', 
       'dimensions': 'ga:country', 
       'metrics': 'ga:users', 
       'sort': '-ga:users', 
       'start-date': '2014-04-08', 
       'end-date': '2014-04-22', 
       'max-results': '10' 
      }; 

      request({ 
       method: 'GET', 
       headers: { 
        'Authorization': 'Bearer ' + token // Here is where we use the auth token 
       }, 
       uri: 'https://www.googleapis.com/analytics/v3/data/ga?' + qs.stringify(requestConfig) 
      }, function(error, resp, body) { 
       console.log(body); 
       var data = JSON.parse(body); 
       console.log(data); 
      }); 
     } 
    }); 

PAMIĘTAJ do wejścia JESTEŚ własny rachunek usługa pocztowa, GA_KEY_PATH I IDS

Dane analityczne Google można zmienić, zmieniając hasło stConfig. Użyłem tego narzędzia Google Analytics do wysyłania zapytań, aby mi pomóc: http://ga-dev-tools.appspot.com/explorer/

Dane powinny zostać przesłane do konsoli.

Nadzieja to pomaga :)

4

Poza odpowiedzią smj2393, i dla tych, którzy chcą stworzyć konkretny adres URL, aby pobrać JSON API dostarczone przez Google Analytics, oto próbka od Węzła Express, trasa. Musisz zainstalować oficjalny pakiet npm Google API Node npm (https://www.npmjs.org/package/googleapis).

var google = require('googleapis'); 
var analytics = google.analytics('v3'); 
var ENV = process.env; 

//get key.p12 in Google Developer console 
//Extract it with : openssl pkcs12 -in key.p12 -nodes -nocerts > key.pem 
//Get GOOGLE_API_EMAIL in Google Developer console (Service Account) 
//Get GOOGLE_ANALYTICS_VIEW_ID in Google Analytics Console : Admin -> View -> View Parameters -> View ID 
//Add GOOGLE_API_EMAIL in the Google Analytics account users 

var authClient = new google.auth.JWT(
    ENV.GOOGLE_API_EMAIL, 
    './keys/googlekey.pem', //path to .pem 
    null, 
    // Scopes can be specified either as an array or as a single, space-delimited string 
    ['https://www.googleapis.com/auth/analytics.readonly']); 

module.exports = function(req, res, next) { 
    var startDate = (req.query.start_date) ? req.query.start_date : '7daysAgo'; 
    var endDate = (req.query.end_date) ? req.query.end_date : 'yesterday'; 

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

    // Make an authorized request to list analytics files. 
    // list of dimensions and metrics : https://developers.google.com/analytics/devguides/reporting/core/dimsmets 
    analytics.data.ga.get({ 
     auth: authClient, 
     "ids":'ga:'+ENV.GOOGLE_ANALYTICS_VIEW_ID, 
     "start-date":startDate, 
     "end-date":endDate, 
     "metrics":"ga:sessions,ga:pageviews", 
     "dimensions":"ga:deviceCategory" 

     }, function(err, result) { 
     console.log(err); 
     console.log(result); 
     if(!err){ 
      res.json(result); 
     } 
     else{ 
      next(); 
     } 
    }); 
    }); 
} 

Ta trasa pokaże JSON reprezentujący liczbę sesji i pageViews według urządzenia (komputer stacjonarny, telefon komórkowy i tablety). Możesz przekazać parametry start_date lub end_date parametrom GET.

Mam nadzieję, że ta pomoc.

Powiązane problemy