2016-07-16 51 views
0

Ich versuche, die Google Analytics API im Knoten aufrufen. Kann mir jemand sagen, was ich falsch mache? Ich bekomme "path.replace ist keine Funktion" in node_modules/mime/mime.js, aber ich bin mir sicher, dass das Problem mit meiner Auth ist. (Mein Log getroffen wird btw nicht ist)google analytics api node.js

const 
    gapi  = require ("googleapis"), 
    profileid = '000000000', 
    key  = require ('./key.json'), 
    email  = '[email protected]', 
    scopes = ['https://www.googleapis.com/auth/analytics', 'https://www.googleapis.com/auth/analytics.readonly'], 
    jwt  = new gapi.auth.JWT (email, key, null, scopes, null); 

gapi.analytics ('v3').data.ga.get ({ 
    'auth': jwt, 
    'ids': 'ga:' + profileid, 
    'start-date': '30daysAgo', 
    'end-date': 'today', 
    'metrics': 'ga:pageviews' 
}, function (err, result) { 
    console.log (err, result); 
}); 

UPDATE: Ich habe versucht, statt wie so einen API-Schlüssel zu verwenden. In diesem Fall wird mein Protokoll getroffen. Aber ich bekomme einen 'Login Required' Fehler.

const 
    gapi  = require ("googleapis"), 
    API_KEY = 'IzaSyDbIBVkt5kia3CJ3w2Y3-nsLHDpSruERkw'; 

gapi.analytics ('v3').data.ga.get ({ 
    'auth': API_KEY, 
    'ids': 'ga:' + profileid, 
    'start-date': '30daysAgo', 
    'end-date': 'today', 
    'metrics': 'ga:pageviews' 
}, function (err, result) { 
    console.log (err, results); 
}); 

diese oauth Spielplatz https://developers.google.com/oauthplayground/ führt mich zu glauben, dass Sie ein Google Analytics-Login und Umfang müssen einen Berechtigungscode zu erhalten. Und mit dem Autorisierungscode können Sie ein Zugriffs-Token erhalten. Und sobald Sie das haben, können Sie einfach die Anfrage mit Parametern stellen, um zu bekommen, was Sie brauchen. Das Problem ist, es in Code zu bekommen.

Die Codeschnipsel, die ich gesehen habe, die das Erlangen des Autorisierungscodes beinhalten, tun es in einer Weise, die der Benutzer von einer Zustimmungsseite bekommt (wie hier https://github.com/google/google-api-nodejs-client#retrieve-authorization-code), aber ich versuche nur, einen Server zum Server zu machen App, und ich bekomme keine Benutzerdaten, so dass ich keine Erlaubnis von einem Benutzer benötigen sollte.

Antwort

0

Wenn Sie serverseitige Anforderungen ausführen, können Sie die jwt-Route verwenden und die jwt-JSON-Datei verwenden, die Google bereitstellt, wenn Sie den "serverseitigen" Fluss unter cloud.google.com/console durchlaufen. Siehe these docs für die JWT-Erklärung und this sample für ein Snippet. In diesem Beispiel wird die Google Drive-API verwendet. Ihre Frage konzentriert sich jedoch auf die Aktivierung der serverseitigen Authentifizierung.

Die relevanten Änderungen, die ich es funktioniert gemacht:

var authClient = new google.auth.JWT(
'[email protected]', 
'CHANGE_THIS_TO_YOUR_JSON.json', 
// Contents of private_key.pem if you want to load the pem file yourself 
// (do not use the path parameter above if using this param) 
'', 
// Scopes can be specified either as an array or as a single, space-delimited string 
['https://www.googleapis.com/auth/drive.readonly'], 
// User to impersonate (leave empty if no impersonation needed) 
''); 
0

bekam ich die erste Methode mit folgenden Änderungen zu arbeiten.

  1. blätterte die 2. und 3. Argumente in der JWT Funktion
  2. im private_key aus der JSON-Datei übergeben, anstatt die gesamte Datei
  3. die E-Mail aus der JSON-Datei
  4. statt meiner google E-Mail verwendet
  5. gemacht neue Nutzer in google analytics mit dem angegebenen E-Mail-

    const 
        gapi  = require ("googleapis"), 
        profileid = '000000000', 
        key  = require ('./key.json'), 
        scopes = 'https://www.googleapis.com/auth/analytics.readonly', 
        jwt  = new gapi.auth.JWT (key.client_email, null, key.private_key, scopes); 
    
    jwt.authorize (function (err, response) { 
    
        gapi.analytics ('v3').data.ga.get ({ 
        'auth': jwt, 
        'ids': 'ga:' + profileid, 
        'start-date': '30daysAgo', 
        'end-date': 'today', 
        'metrics': 'ga:pageviews' 
        }, function (err, result) { 
        console.log (err, result); 
        }); 
    
    }); 
    
Verwandte Themen