1

Ich muss mithilfe eines Dienstkontos Daten von der Google Search Console (Webmaster-Tools) abrufen.Die Google Search Console-API kann nicht mithilfe eines Dienstkontos abgefragt werden.

Bisher konnte ich eine access_token für das Dienstkonto abrufen, die ich an die URL der Anfrage anhängen muss. Das Problem ist, dass ich nicht einen Weg, dies zu tun finden, das ist der Code, den ich bin mit:

https://content.googleapis.com/webmasters/v3/sites/http%3A%2F%2Fwww.WEBSITE.com/searchAnalytics/query?fields=responseAggregationType%2Crows&alt=json" 

Stattdessen sollte es:

function retrieveSearchesByQuery(token) 
    { 
     gapi.client.webmasters.searchanalytics.query(
     { 
      'access_token': token, 
      'siteUrl': 'http://www.WEBSITE.com', 
      'fields': 'responseAggregationType,rows', 
      'resource': { 
       'startDate': formatDate(cSDate), 
       'endDate': formatDate(cEDate), 
       'dimensions': [ 
        'date' 
       ] 
      } 
     }) 
     .then(function(response) { 
      console.log(response); 
     }) 
     .then(null, function(err) { 
      console.log(err); 
     }); 
    } 

Dies ist die URL durch die Funktion aufgerufen wird so etwas wie dieses:

https://content.googleapis.com/webmasters/v3/sites/http%3A%2F%2Fwww.WEBSITE.com/searchAnalytics/query?fields=responseAggregationType%2Crows&alt=json&access_token=XXX" 

die gapi.client.webmasters.searchanalytics.query nicht erkennt 'access_token' als gültiger Schlüssel so ist es nicht an die uRL anhängen und das ist, warum ich ein 401 Unauthorized als Antwort bekommen.

Wenn ich 'key' anstelle von 'access_token' der Parameter an die URL angehängt wird aber 'key' wird für OAuth2-Authentifizierung verwendet, um das Dienstkonto Token gebe ich nicht gültig ist.

Hat jemand eine Lösung oder einen Workaround dafür?

Antwort

1

Wenn Ihre Anwendung private Daten anfordert, muss die Anfrage von einem authentifizierten Benutzer autorisiert werden, der Zugriff auf diese Daten hat. Wie in der Search Console-API in the documentation angegeben, muss Ihre Anwendung OAuth 2.0 verwenden, um Anforderungen zu autorisieren. Andere Autorisierungsprotokolle werden nicht unterstützt.

Wenn Ihre Anwendung correctly configured ist, sieht eine authentifizierte Anforderung bei Verwendung der Google API genau wie eine nicht authentifizierte Anforderung aus. Wenn, wie in the documentation angegeben, die Anwendung ein OAuth 2.0-Token erhalten hat, wird es von der JavaScript-Clientbibliothek automatisch in die Anfrage aufgenommen.

Sie erwähnen, dass Sie eine access_token abgerufen haben, wenn der API-Client dieses Token korrekt empfängt, wird es automatisch für Sie senden, Sie müssen es nicht selbst anhängen.

Ein sehr einfacher Workflow zur Authentifizierung und einmal authentifiziert, senden Sie eine Anfrage würde wie der folgende Code aussehen. Die Search Console-API kann die folgenden Bereiche verwenden: https://www.googleapis.com/auth/webmasters und https://www.googleapis.com/auth/webmasters.readonly.

var clientId = 'YOUR CLIENT ID'; 
var apiKey = 'YOUR API KEY'; 
var scopes = 'https://www.googleapis.com/auth/webmasters'; 

function auth() { 
    // Set the API key. 
    gapi.client.setApiKey(apiKey); 

    // Start the auth process using our client ID & the required scopes. 
    gapi.auth2.init({ 
     client_id: clientId, 
     scope: scopes 
    }) 
    .then(function() { 
    // We're authenticated, let's go... 
    // Load the webmasters API, then query the API 
    gapi.client.load('webmasters', 'v3') 
     .then(retrieveSearchesByQuery); 
    }); 
} 

// Load the API client and auth library 
gapi.load('client:auth2', auth); 

An diesem Punkt wird Ihre retrieveSearchesByQuery Funktion geändert werden müssen, da sie es in der Abfrage kein Token Argument erhalten müssen, um mehr zu passieren. Die JavaScript-Clientbibliothek sollte sie automatisch in die Anfrage aufnehmen.

Sie können auch die API Explorer verwenden, um zu überprüfen, welche Parameter für eine bestimmte Abfrage unterstützt werden, und die zugehörige Anfrage zu prüfen.

Wenn Sie einen extern erzeugten Zugriffstoken verwenden müssen, was der Fall mit einem Dienstkonto sein sollte, müssen Sie die gapi.auth.setToken method auf Mengen verwenden, die OAuth 2.0 token object sich für die Anwendung:

gapi.auth.setToken(token_Object); 
+0

Dank! Die letzte Lösung ist, was funktioniert hat, aber mit der folgenden Syntax: 'gapi.auth.setToken ({ access_token: "YOUR_TOKEN_HERE" }); ', weil die Methode ein TokenObject akzeptiert, während ich eine Zeichenfolge habe. Jetzt kann ich mich einloggen und die Daten korrekt abrufen – Signo