web-dev-qa-db-fra.com

Accès à Google Sheets Api avec Python

J'essaie actuellement de mettre à jour les feuilles de Google via python et je rencontre des problèmes avec les autorisations.

J'ai suivi les instructions de ce guide Twilio: https://www.twilio.com/blog/2017/02/an-easy-way-to-read-and-write-to-a- google-spreadsheet-in-python.html

Je fais tout cela dans Jupyter, et j'ai enregistré le fichier JSON dans le répertoire de code approprié. Je n'ai eu aucun problème pour définir la portée, les crédits et le client.

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_id.json', scope)
client = gspread.authorize(creds)

sheet = client.open("MixIQ Tracker").sheet1

J'ai suivi toutes les étapes pour lier les deux, mais j'obtiens cette erreur API avec la dernière ligne.

APIError: {
"error": {
  "errors": [{
      "domain": "global",
      "reason": "insufficientPermissions",
      "message": "Insufficient Permission: Request had insufficient authentication scopes."
    }],
  "code": 403,
  "message": "Insufficient Permission: Request had insufficient authentication scopes."
 }
}

Je ne sais pas exactement comment résoudre ce problème. Toute direction serait grandement appréciée!

10
KirklandShawty

Je pense que le point de terminaison de l'API Google Drive doit être inclus dans votre champ d'application. J'écrivais des données de l'API Mailchimp dans Google Sheet.

Vérifiez ceci: https://www.youtube.com/watch?v=7I2s81TsCnc > Cela m'a été utile.

scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
15
Michael deVry

Si vous regardez la documentation des étendues de l'API Google , l'URL de portée que vous utilisez n'est référencée nulle part. C'est peut-être le problème. Essayez de changer l'URL de l'étendue en https://www.googleapis.com/auth/spreadsheets.

Assurez-vous également que l'API de feuille de calcul est correctement activée dans votre projet dans la console de développeur Google.

Alternativement, vous pouvez essayer la bibliothèque Sheetf (je suis l'auteur), qui gère les portées pour vous.

3
Philippe Oger

Utilisez ceci comme portée:

scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']

Avant d'appeler les "ServiceAccountCredentials"

Vous devrez activer l'API Google Drive dans "console.cloud.google" ainsi que l'API des feuilles.

2
Iddos

Vous avez seulement besoin de cette portée

scope = ["https://www.googleapis.com/auth/drive"]
0
Jack