-
[Google Api] 구글 드라이브에서 파일 다운로드 하기programming 공부/Python 2022. 1. 24. 23:07
# -*- coding: utf-8 -*- import hashlib import io import os.path from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError from googleapiclient.http import MediaIoBaseDownload def download_file(fileid): """ Google Drive에 올라가 있는 특정 파일을 다운로드 합니다. :param fileid: Google Drive FileId :return: Boolean """ SCOPES = ['https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/drive.metadata.readonly'] creds = None if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) # 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.json', 'w') as token: token.write(creds.to_json()) try: service = build('drive', 'v3', credentials=creds) fileName = service.files().get(fileId=fileid).execute().get('name') if os.path.exists(fileName): with open(fileName, 'rb') as f: checksum = hashlib.md5(f.read()).hexdigest() md5Checksum = service.files().get(fileId=fileid, fields='md5Checksum').execute() # 구글 드라이브에 업로드되어있는 파일의 md5Checksum if checksum == md5Checksum['md5Checksum']: return False req = service.files().get_media(fileId= fileid) fh = io.FileIO(fileName,'wb') downloader = MediaIoBaseDownload(fh, req) done = False while done is False: status, done = downloader.next_chunk() print('Download %d%%' %int(status.progress() * 100)) return True except HttpError as error: print(f'An error occurred: {error}')
구글 드라이브의 특정 파일의 ID를 입력하여 다운로드 하고, 만약 동일한 파일이 경로상에 이미 있는경우에는 False를 리턴한다.
'programming 공부 > Python' 카테고리의 다른 글
[Python] 파이썬 딕셔너리의 저장 순서는? (0) 2022.01.25 [Google Api] 구글 드라이브에 올라가있는 파일 업데이트하기 (0) 2022.01.23 [Google Api] 특정 구글 드라이브 폴더에 파일 업로드하기 (0) 2022.01.23 [Python] 다른 프로세스의 window title 가져오기 (0) 2021.08.18 [Python] 파이썬으로 batch 파일을 다른 창으로 실행하기 (0) 2021.08.18