Je suis en train d'exécuter le code d'exemple QuickStart.py Sous Python QuickStart et je reçois l'erreur suivante:
ValueError: Les secrets des clients doivent être pour une application Web ou installée.
J'ai créé un credentials.json
Dossier avec les droits du propriétaire du projet.
L'erreur se produit dans la pièce de code suivante:
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server()
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
Je remarque également que le fichier Token.Pickle n'est pas créé. Ceci est la sortie d'erreur:
File "updateSlidev01.py", line 51, in <module>
main()
File "updateSlidev01.py", line 31, in main
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
File "/Library/Python/2.7/site-packages/google_auth_oauthlib/flow.py", line 174, in from_client_secrets_file
return cls.from_client_config(client_config, scopes=scopes, **kwargs)
File "/Library/Python/2.7/site-packages/google_auth_oauthlib/flow.py", line 147, in from_client_config
'Client secrets must be for a web or installed app.')
ValueError: Client secrets must be for a web or installed app.
Pour que quiconque vienne ici parce qu'ils souhaitent se connecter à l'API du calendrier GCP via un compte de service et non cet ID client OAUTH2, créez l'objet creds
dans l'exemple original comme suit:
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
En supposant que le compte de service est configuré avec l'accès correct, cela accédera au calendrier sans demander à l'utilisateur de confirmation.