[英]Google drive api python - How to download all the files inside a folder or the folder to a specific local destination path
I need to download all the files inside a drive folder or the folder itself and save them in a specific local destination, my actual code is here:我需要下载驱动器文件夹或文件夹本身中的所有文件并将它们保存在特定的本地目标中,我的实际代码在这里:
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import io
from googleapiclient.http import MediaIoBaseDownload
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/drive.file','https://www.googleapis.com/auth/drive.folder']
def main():
"""Shows basic usage of the Drive v3 API.
Prints the names and ids of the first 10 files the user has access to.
"""
creds = None
# The file token.pickle stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
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(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('drive', 'v3', credentials=creds)
# Call the Drive v3 API
file_id = '1qQ8hOSudoo7ISwqSAOeqsuBdsh-ZFCqm'
request = service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print ("Download %d%%." % int(status.progress() * 100))
if __name__ == '__main__':
main()
but it is throwing the following error, also i dont know how to set a specific local destination但它抛出以下错误,我也不知道如何设置特定的本地目的地
"HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/1qQ8hOSudoo7ISwqSAOeqsuBdsh-ZFCqm?alt=media returned "Only files with binary content can be downloaded. Use Export with Docs Editors files.". Details: "Only files with binary content can be downloaded. Use Export with Docs Editors files.">"
Do afile.list setting parent to the file id of the directory you are looking for.将file.list设置为您要查找的目录的文件 ID。
Then loop through each file returned and download it using the code you have now.然后遍历返回的每个文件并使用您现在拥有的代码下载它。
file_id = [File id from first call]
request = service.files().get_media(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print ("Download %d%%." % int(status.progress() * 100))
If you are looking for a method which will do it for you you wont find one.如果您正在寻找一种可以为您完成的方法,您将找不到。 You will need to download them one at a time.
您需要一次下载一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.