Ich erstelle ein Skript, das auf der schrittweisen Anleitung von Google Analytics auf dieser Seite basiert:
https://developers.google.com/analytics/resources/tutorials/hello-analytics-api
Die Autorisierung erfolgt ohne Probleme, bis versucht wird, auf Daten zuzugreifen. Der Rückkehrcode ist 403 und die Fehlermeldung lautet:
Der Nutzer hat kein Google Analytics-Konto
Diese Nachricht hat keinen Sinn: Mein Konto enthält Google Analytics-Daten, die mehrere Websites verfolgen, und ich kann problemlos über den Webbrowser darauf zugreifen. Ich habe die Analytics-API über die Google-API-Konsole zugelassen, und der API-Zugriff gibt mir die richtigen Daten.
Ich hatte auch dieses Problem. Ich habe das Problem behoben, indem ich die E-Mail-Adresse für mein Servicekonto dem Google Analytics-Profil hinzugefügt habe, auf das ich zugreifen wollte.
Ich habe die E-Mail-Adresse (z. B. [email protected]) für das Dienstkonto erhalten, indem Sie auf der Registerkarte "API-Zugriff" in der Google APIs-Konsole nachschauen.
Dann folgte ich den Anweisungen von Google zum Hinzufügen einer E-Mail-Adresse zu einem Analytics-Profil . Jetzt funktioniert alles wie erwartet.
Viel Glück!
Fügen Sie einfach Ihre angegebene E-Mail hinzu (Format [email protected]nt.com
)
an User Manager:
Ich wünschte, es hilft dir
Ich stand vor demselben Problem. Es wurde behoben, indem die E-Mail-ID des Dienstkonto-Benutzers (Ihr [email protected]) den Benutzern in Ihrem Analytics-Konto unter-
Analytics-Startseite -> Admin (linker Bereich) -> Benutzerverwaltung -> Hinzufügen (klicken Sie auf das Pluszeichen auf der rechten Seite des Menüs) -> Neuen Benutzer hinzufügen -> E-Mail-ID hinzufügen in E-Mail-Adressen eingeben.
Jetzt wird das Problem gelöst.
Sie erhalten diese Fehlermeldung auch, wenn Sie sich noch nie mit dem Google-Konto angemeldet haben, mit dem Sie sich authentifizieren möchten.
Ich habe den Fehler 403 erhalten, bis ich die Berechtigungen des E-Mail-Kontos von Google Analytics aus von "Lesen & Analysieren" in etwas anderes geändert habe, es gespeichert habe und dann die Berechtigungen wieder in "Lesen & Analysieren" geändert habe und es funktioniert.
Ich habe den Fehler 403 getroffen. Diese Schritte haben mich umgehauen. Um klar zu sein, habe ich versucht, Googles Beispiel "HelloAnalytics.php" mit OAuth (sans Benutzer-Interaktion, geeignet für Cron-Jobs usw.) zu arbeiten.
Nach dem Aktivieren der Analytics-API habe ich unter "APIs & Auth/Credentials" ein neues "Service-Konto" erstellt. und speicherte das .p12-Schlüsselpaar. Ich ging dann in die Analytics-Benutzerverwaltungskonsole und fügte die E-Mail-Adresse dieses Service-Benutzers hinzu.
Die .p12-Autorisierung mit der API PHP funktioniert, wenn ich only "Read & Analyze" only in der Berechtigungsliste abhaken. Wenn ich "Benutzer verwalten" und/oder "Bearbeiten" hinzufüge, bekomme ich den 403. Hoffe, das ist hilfreich, ich habe ein paar Stunden damit herumgefressen ...
Ich hatte auch dieses Problem und stellte fest, dass ich zu viele Berechtigungen angefordert hatte. Die Entwicklerkonsole fordert Sie auf, nach den Berechtigungen http://www.googleapis.com/auth/analytics
und http://www.googleapis.com/auth/analytics.readonly
zu fragen. Dies funktionierte nicht, als ich auch den sub
-Claim verwendete. Eine sub
-Anweisung weist Google an, ein Zugriffstoken auszugeben, das im Auftrag eines anderen Nutzers - in meinem Fall dem Google-Konto, das das Dienstkonto besitzt, betrieben wird. Ich entfernte die analytics
-Berechtigung und blieb bei analytics.readonly
mit dem Unteranspruch:
{
"iss":"[email protected]nt.com",
"sub":"[email protected]"
"scope":"http://www.googleapis.com/auth/analytics",
...
}
Das ausgegebene Bearer-Token ermöglicht es mir, (zumindest einige) Google Analytics-Abfragen an Profile zu richten, deren Inhaber völlig unterschiedliche Google-Konten sind, die jedoch für meinen Google Mail-Nutzer (schreibgeschützt) freigegeben wurden ([email protected]) .
Ich habe den gleichen Fehler erhalten, da ich mich nicht bei Google Analytics angemeldet habe. Also hatte ich es gelöst, indem ich mich im Analytics-Konto angemeldet hatte.
Der Benutzer, für den Sie die API verwenden möchten, hat seinen GA -Dienst nicht aktiviert.
Einfach ein Google-Konto zu haben reicht nicht aus .
... Nur wenn Sie ein Google-Konto besitzen, erhalten Sie nicht automatisch Zugang zu Analytics. Zunächst müssen Sie sich für Google Analytics registrieren, eine einmaliger, einfacher Prozess ...
Ich konnte das Problem beheben, indem ich sicherstellte, dass die
client = Google :: APIClient.new (: Anwendungsname => 'X',: Anwendungsversion => '1')
anwendungsnamenvariable 'X oben war der ACCOUNT-Name im Dashboard GA, nicht der PROPERTY-Name, der in meinem Fall die tatsächliche URL der Site war, auf die ich zugreifen möchte.
Verwirrend, aber dankbar behoben (ohne Google danke!)
Das Problem tritt auf, da wir kein "Unterargument" angeben. Wenn wir dies nicht bereitstellen, erfolgt der Anruf im Namen dieser E-Mail mit langem Servicekonto.
Geben Sie einfach ein Unterargument an, mit einer E-Mail, die Sie bereits im Bericht angegeben haben, und die Dinge sollten gut funktionieren!
Anstatt ein Dienstkonto zu verwenden, können Sie die Notwendigkeit des Hinzufügens neuer Benutzerberechtigungen (gemäß den häufigsten Antworten in diesem Thread) umgehen, indem Sie OAuth client ID
-Anmeldeinformationen verwenden.
Gehen Sie zum Dashboard API-Anmeldeinformationen und klicken Sie auf "Anmeldeinformationen erstellen" -> "OAuth-Client-ID". Anschließend sollten Sie eine Client-ID und ein Client-Geheimnis erhalten, die Sie zur Authentifizierung der API benötigen.
Jetzt können Sie OAuth2WebServerFlow
verwenden, um sich nach Verwendungszweck zu authentifizieren. Hier ist ein Python3-Beispiel:
from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow
# TODO: Fill these in...
CLIENT_ID = ''
CLIENT_SECRET = ''
VIEW_ID = ''
flow = OAuth2WebServerFlow(
CLIENT_ID, CLIENT_SECRET,
'https://www.googleapis.com/auth/analytics.readonly',
redirect_uri='urn:ietf:wg:oauth:2.0:oob'
)
authorize_url = flow.step1_get_authorize_url()
print('Receive code from:\n%s\n' % authorize_url)
code = input('Enter code here:').strip()
credentials = flow.step2_exchange(code)
api = build('analyticsreporting', 'v4', credentials=credentials)
body={
'reportRequests': [{
'viewId': VIEW_ID,
'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}],
'metrics': [{'expression': 'ga:sessions'}],
'dimensions': [{'name': 'ga:country'}]
}]
}
data = api.reports().batchGet(body=body).execute()