Data Engineering/Python

[Python] 파이썬과 구글 드라이브 연동하고 파일 업로드/다운로드 하기 (Google Drive)

YSY^ 2022. 2. 13. 17:31

이번 포스팅에서는 파이썬과 구글드라이브를 연동하고 파일을 업로드/다운로드 하는 방법을 알아보겠습니다

 

사전작업

1. 아래링크로 들어갑니다.

https://console.cloud.google.com/

2. 새 프로젝트를 만듭니다

프로젝트 만들기를 클릭합니다.

프로젝트 이름을 입력하고 만들기를 누릅니다.

3. 사용자 인증정보에서 OAuth 동의 화면 구성

왼쪽 상단의 메뉴 아이콘을 누른 다음 API 및 서비스 탭의 사용자 인증 정보를 클릭합니다.

사용자 인증정보에서 동의 화면 구성을 클릭합니다.

User Type를 외부를 클릭하고 만들기를 누릅니다

이후 앱정보에서 앱이름을 클릭하고, 사용자의 이메일을 입력하고

개발자 연락처 이메일도 입력하고 저장 후 계속을 누릅니다.

아래 화면이 나올 때 까지 "저장 후 계속"을 클릭합니다.

4. OAuth 클라이언트 ID 만들기

사용자 인증 정보에서 "사용자 인증 정보 만들기"를 클릭 후 "OAuth 클라이언트 ID"를 클릭합니다

애플리케이션 유형과 이름을 입력하고 만들기를 누릅니다.

5. 클라이언트 ID JSON파일 다운로드

6. 업로드하고자 하는 구글드라이브 폴더의 ID 확인

folder/ 뒤에 빨간색 네모칸에 있는 것이 폴더의 ID입니다.

 

 

구글드라이브에 파일 업로드

# 라이브러리 import
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from httplib2 import Http
from oauth2client import file

# API 연결 및 사전정보 입력
store = file.Storage('storage.json') #위에서 받은 OAuth ID Json 파일
creds = store.get()

service = build('drive', 'v3', http=creds.authorize(Http()))

folder_id = "folder_id" #위에서 복사한 구글드라이브 폴더의 id
file_paths = "file.csv" # 업로드하고자 하는 파일

# 파일을 구글드라이브에 업로드하기
request_body = {'name': file_paths, 'parents': [folder_id], 'uploadType': 'multipart'} # 업로드할 파일의 정보 정의
media = MediaFileUpload(file_paths, mimetype='text/csv') # 업로드할 파일
file_info = service.files().create(body=request_body,media_body=media, fields='id,webViewLink').execute()

# 구글드라이브 링크 얻기
print("File webViewLink :",file_info.get('webViewLink'))
webviewlink = file_info.get('webViewLink')

구글 드라이브에 해당 파일이 성공적으로 업로드되었다.

 

구글드라이브에 파일 다운로드

# 필요한 라이브러리 import
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
from httplib2 import Http
from oauth2client import file
import io 

# 기본 정보 입력 및 API 열기
store = file.Storage('component/storage.json')
creds = store.get()
service = build('drive', 'v3', http=creds.authorize(Http()))

# 구글드라이브에 있는 파일&파일 id 출력
results = service.files().list(pageSize=100,fields="nextPageToken, files(id, name)").execute() 
items = results.get('files', [])
print(items)

# 파일관련 정보 입력
folder_id = "folder_id" #위에서 복사한 구글드라이브 폴더의 id
file_name = "asfd.csv"

# 파일 다운로드
request = service.files().get_media(fileId=folder_id)
fh = io.FileIO(file_name, 'wb') 

downloader = MediaIoBaseDownload(fh, request)
728x90
반응형