J'essaye d'obtenir un simple Python uploader Google Drive fonctionne. J'ai créé un projet dans la console développeur, activé l'API Drive et ajouté un OAuth 2.0 ID client (type d'application Autre).
Je peux voir l'application répertoriée dans les paramètres de Google Drive -> Gérer les applications et je peux exécuter avec succès de nombreuses opérations fournies par le client API Python Drive de Google. Files () .insert () mais échoue avec:
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&convert=false&useContentAsIndexableText=false&alt=json returned "Insufficient Permission">
C'est pour une insertion dans un répertoire que j'ai rendu accessible en écriture à tout le monde, comme vu ci-dessous:
credentials = get_credentials ()
http = credentials.authorize (httplib2.Http ())
service = discovery.build ('drive', 'v2', http=http)
PARENT_ID="0B1gLgXwTiUzlfmo0UGVsZ1NWdW1nZG9OcENNYkJua2E1d0pqWE14TjFyc2hVMHdEU1h5czQ"
perms = service.permissions().list(fileId=PARENT_ID).execute()
print ("PERMISSIONS:")
for perm in perms["items"]:
for p in perm:
print (p, perm[p])
print
parent = {
"isRoot": False,
"kind": "drive#parentReference",
"id": PARENT_ID
}
service.files ().insert (
body = {"parents" : [parent]},
media_body='./test.txt',
convert=False,
useContentAsIndexableText=False
).execute ()
Qui répertorie l'autorisation comme:
(u'withLink', True)
(u'kind', u'drive#permission')
(u'etag', u'"F-w0rsCIWtQP8RGyv_V1DlKfcRk/icwHkDdfUYuMzqZrUsVIyvu85K8"')
(u'role', u'writer')
(u'type', u'anyone')
(u'id', u'anyoneWithLink')
(u'selfLink', u'https://www.googleapis.com/drive/v2/files/0B1gLgXwTiUzlfmo0UGVsZ1NWdW1nZG9OcENNYkJua2E1d0pqWE14TjFyc2hVMHdEU1h5czQ/permissions/anyoneWithLink')
Quelqu'un peut-il m'indiquer à quelle autorisation je manque, s'il vous plaît?
Fichiers: insérer nécessite une autorisation avec au moins une des étendues suivantes
https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/drive.filehttps: // www.googleapis.com/auth/drive.appdatahttps://www.googleapis.com/auth/drive.apps.readonly
Vérifiez la portée avec laquelle vous vous authentifiez.
Si vous modifiez ces étendues ou autorisations, essayez de supprimer le fichier associé aux informations d'identification précédemment enregistrées ou le cache du navigateur, le cas échéant.
Comme conseillé par @DalmTo, le problème était une portée Auth
incorrecte dans:
flow_from_clientsecrets()