Je crée un script basé sur le guide étape par étape de Google Analytics à partir de cette page:
https://developers.google.com/analytics/resources/tutorials/hello-analytics-api
L'autorisation est faite sans problème, jusqu'à ce qu'il tente d'accéder aux données. Le code de retour est 403 et le message d'erreur est:
L'utilisateur n'a pas de compte Google Analytics
Ce message n'a aucun sens: mon compte contient des données Google Analytics, suivi de plusieurs sites Web, et je peux y accéder sans problème depuis un navigateur Web. J'ai autorisé l'API Analytics via la console Google API, et l'accès à l'API me donne les bonnes données.
J'ai eu ce problème également. Je l'ai résolu en ajoutant l'adresse e-mail de mon compte de service au profil Google Analytics auquel je voulais accéder.
J'ai reçu l'adresse e-mail (quelque chose comme [email protected]) du compte de service en consultant l'onglet "Accès API" de la console API Google.
Ensuite, j'ai suivi les instructions de Google pour ajouter une adresse e-mail à un profil Google Analytics . Maintenant tout fonctionne comme prévu.
Bonne chance!
Je faisais face au même problème. Le problème a été résolu en ajoutant l'ID de messagerie de l'utilisateur du compte de service (votre [email protected]) aux utilisateurs de votre compte Google Analytics.
Page d'accueil Analytics -> Admin (volet de gauche) -> Gestion des utilisateurs -> Ajouter (cliquez sur le signe plus situé à droite du menu) -> Ajouter un nouvel utilisateur -> Ajouter l'identifiant de messagerie dans la saisie des adresses électroniques.
Maintenant, cela va résoudre le problème.
Vous obtiendrez également cette erreur si vous ne vous êtes jamais connecté avec le compte Google avec lequel vous essayez de vous authentifier.
J'obtenais l'erreur 403 jusqu'à ce que je modifie les autorisations du compte de messagerie de Google Analytics de «Lire et analyser» vers un autre, que je l'enregistre, puis que je les rétablisse en «Lire et analyser».
Je frappais l'erreur 403. Ces étapes m'ont fait tourner autour. Pour être clair, je cherchais à utiliser l'exemple de Hello "HelloAnalytics.php" de Google avec OAuth (sans interaction de l'utilisateur, approprié pour le travail cron, etc.).
Après avoir activé l'API Analytics, j'ai créé un nouveau "Compte de service" sous API & Auth/Credentials; et enregistré la paire de clés .p12. Je me suis ensuite rendu dans la console de gestion des utilisateurs Analytics et j'ai ajouté l'adresse électronique de cet utilisateur de service.
L’autorisation .p12 utilisant l’API PHP fonctionne si je coche seulement "Lire et analyser" seulement dans la liste des autorisations. Si j'ajoute "Gérer les utilisateurs" et/ou "Modifier", je reçois le 403. J'espère que cela est utile. Je travaillais là-dessus pendant deux heures ...
J'ai eu ce problème aussi, et j'ai trouvé que le problème était que j'avais demandé trop d'autorisations. La console de développeur demande à demander les deux autorisations http://www.googleapis.com/auth/analytics
et http://www.googleapis.com/auth/analytics.readonly
. Cela n’a pas fonctionné lorsque j’utilisais également la revendication sub
. Une réclamation sub
indique à Google d'émettre un jeton d'accès qui exploite pour le compte d'un autre utilisateur - dans mon cas, le compte Google propriétaire du compte de service. J'ai retiré l'autorisation analytics
et collé avec analytics.readonly
avec la revendication secondaire:
{
"iss":"123123123123123-xxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
"sub":"[email protected]"
"scope":"http://www.googleapis.com/auth/analytics",
...
}
Le jeton porteur émis me permet d'effectuer (au moins certaines) requêtes Google Analytics sur des profils appartenant à des comptes Google totalement différents, mais partagés (en lecture seule) avec mon utilisateur gmail ([email protected]). .
J'ai eu la même erreur, car je ne me suis pas connecté à Google Analytics. Donc, je l'avais résolu en me connectant au compte d'analyse.
L'utilisateur pour lequel vous essayez d'utiliser l'API n'a pas activé son service GA.
Il ne suffit pas d’avoir un compte Google .
... Cependant, le fait d'avoir un compte Google ne vous accorde pas automatiquement accès à Analytics. Tout d'abord, vous devez vous inscrire à Google Analytics, un Une fois, processus simple ...
J'ai réussi à résoudre ce problème en m'assurant que le
client = Google :: APIClient.new (: nom_application => 'X',: version_application => '1')
la variable de nom d'application 'X ci-dessus était le nom de COMPTE sur le tableau de bord GA, et non le nom de la propriété, qui dans mon cas était l'URL réelle du site auquel je veux accéder.
Déroutant, mais heureusement résolu (sans merci à Google!)
Le problème survient car nous ne fournissons pas d'argument "sub". À moins que nous ne fournissions cela, l'appel est passé au nom du courrier électronique de ce compte de service long.
Il suffit donc de fournir un sous-argument, avec un email auquel vous avez déjà donné accès dans le rapport et tout devrait bien fonctionner!
Au lieu d'utiliser un compte de service, vous pouvez éviter la nécessité d'ajouter de nouvelles autorisations utilisateur (selon les réponses les plus fréquentes dans ce fil) en utilisant des informations d'identification OAuth client ID
.
Accédez au tableau de bord des informations d'identification de l'API , puis cliquez sur "Créer les informations d'identification" -> "ID client OAuth". Ensuite, vous devriez obtenir un ID client et un secret client dont vous aurez besoin pour authentifier l'API.
Vous pouvez maintenant utiliser OAuth2WebServerFlow
pour vous authentifier à chaque utilisation. Voici un exemple de python3:
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()