Ich erhalte die folgende Fehlermeldung zum Download:Keine Erlaubnis meiner Datei von Google Drive
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/XXXXXXXXXXXX?alt=media returned "The user has not granted the app 123456789 read access to the file XXXXXXXXXXXX.">
Das ist ziemlich seltsam, da ich wie ich die OAuth Web-Authentifizierungsmethode unter Verwendung authentifiziert haben. Ich kann meine Dateien auch auflisten.
Google listet diesen Fehler hier auf: https://developers.google.com/drive/v3/web/handle-errors#403_the_user_has_not_granted_the_app_appid_verb_access_to_the_file_fileid und schlägt vor, dass ich den Benutzer auffordere, die Datei zu öffnen. Nun, der Benutzer ist ich und ich habe diese Datei etwa 20 mal ganz in Ordnung geöffnet. Der Fehler geht nicht weg ...
hier mein komplettes Beispiel ist:
import os
import httplib2
import io
from oauth2client.file import Storage
from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow
from googleapiclient.http import MediaIoBaseDownload
location import Location
CLIENT_ID = 'CLIENT ID XYXXYX'
CLIENT_SECRET = 'YYYYYYYYYYYYYYY'
OAUTH_SCOPE = 'https://www.googleapis.com/auth/drive'
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'
OUT_PATH = Location.folder_path + "media/dumps/"
CREDS_FILE ='this_file_is_somewhere.json'
storage = Storage(CREDS_FILE)
credentials = storage.get()
if credentials is None:
# Run through the OAuth flow and retrieve credentials
flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)
authorize_url = flow.step1_get_authorize_url()
print('Go to the following link in your browser: ' + authorize_url)
code = raw_input('Enter verification code: ').strip()
credentials = flow.step2_exchange(code)
storage.put(credentials)
# Create an httplib2.Http object and authorize it with our credentials
http = httplib2.Http()
http = credentials.authorize(http)
drive_service = build('drive', 'v3', http=http)
def list_files(service):
page_token = None
while True:
param = {}
if page_token:
param['pageToken'] = page_token
files = service.files().list(**param).execute()
for item in files['items']:
yield item
page_token = files.get('nextPageToken')
if not page_token:
break
def download(file_id, path=OUT_PATH):
request = drive_service.files().get_media(fileId=file_id)
file_meta = drive_service.files().get(fileId=file_id).execute()
name = file_to_get['name']
print(file_meta)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print(int(status.progress() * 100))
f = open(path + '/' + name, 'wb')
f.write(fh.getvalue())
print('File downloaded at', path)
f.close()
download('XXXXXXXXXXXX')
Obwohl ich nicht weiß, ob dies eine Lösung für Ihr Problem ist, wie wäre es mit dem Entfernen der Anmeldeinformationsdatei von '' this_file_is_somewhere.json'' und neu erstellen? – Tanaike
Versuchen Sie [Öffnen Sie eine Auswahl] (https://developers.google.com/drive/v3/web/integrate-open#open_files_using_the_google_picker) und fordern Sie den Benutzer auf, die Datei zu öffnen, oder weisen Sie den Benutzer zu Drive, um die Datei zu öffnen mit der App. Sie können auch versuchen, [Berechtigungen bearbeiten] (https://developers.google.com/drive/v3/web/manage-sharing#manipulating_permissions) für diese Datei zu bearbeiten. – noogui
@noogui Es scheint nicht so einfach zu verstehen, was ein "Picker" ist. Das habe ich schon verwirrend gefunden, als ich das in der Google-Dokumentation gelesen habe. Ich kann die Datei öffnen, es ist meine Datei. Es öffnet sich gut. Ich habe es auch anderen Personen in der Organisation zugänglich gemacht. – dengar81