Google Drive에 있는 구글 스프레드 시트(Google Sheets)를 엑셀 파일로 다운받는 Python 스크립트이다.
대부분은 Google Drive API 공식 사이트에서 가져온 코드이며, Credential 경로를 스크립트를 실행하는 디렉토리로 변경하였고, 파일 내용을 읽기 위해 Scope를 metadata.readonly에서 readonly로 변경하였다. (Scope에 대한 자세한 정보는 여기에서 확인할 수 있다.)
Ubuntu 16.04, Python 3.5.2 환경에서 테스트하였다.
사용방법
스크립트의 인증절차를 진행하기 위해 여기에 나와있는 Step 1을 완료한다.
아래 코드에서 FILE_ID
값(27번 줄)을 다운받고자 하는 파일의 실제 file id 값으로 바꿔준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#! /usr/bin/env python3
from __future__ import print_function
import httplib2
import os
from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage
import io
from apiclient.http import MediaIoBaseDownload
try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None
CREDENTIAL_DIR = './credentials'
CREDENTIAL_FILENAME = 'drive-python-quickstart.json'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Drive File Export Example'
SCOPES = 'https://www.googleapis.com/auth/drive.readonly'
FILE_ID = 'your file id'
EXCEL = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
EXPORTED_FILE_NAME = 'exported_file.xlsx'
def get_credentials():
credential_dir = CREDENTIAL_DIR
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir, CREDENTIAL_FILENAME)
store = Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
if flags:
credentials = tools.run_flow(flow, store, flags)
else:
credentials = tools.run(flow, store)
print('Storing credentials to ' + credential_path)
return credentials
def main():
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v3', http=http)
request = service.files().export_media(fileId=FILE_ID, mimeType=EXCEL)
fh = io.FileIO(EXPORTED_FILE_NAME, 'wb')
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()
이 스크립트를 터미널을 통해 원격 서버에서 실행해야하는 경우에는 처음 인증을 할 때 아래와 같이 --noauth_local_webserver
옵션을 지정해서 실행해야한다.
$ ./export_example.py --noauth_local_webserver
클라이언트의 웹브라우저를 통해 인증 절차를 진행할 수 있는 URL이 표시되는데, 터미널에서 보통은 URL을 인식해서 마우스 클릭을 지원하므로 주소를 클릭해서 인증을 진행한다. 권한 요청을 허용하고나면 승인 코드가 나오는데 이 코드를 다시 터미널에 붙여넣는다.
인증이 완료되면 파일 다운로드가 진행된다.