728x90
반응형
구글 드라이브에 파일을 자동으로 업로드 할 일이 생겨 만들어봤습니다.
0. 콘솔 링크
console.developers.google.com/flows/enableapi?apiid=drive
1. 링크로 이동, 계속 클릭
2. 사용자 인증 정보로 이동
3. 호출 위치 선택 이후 '어떤 사용자 정보가 필요한가요?' 클릭
4. 동의 화면 설정
5. 외부 -> 만들기
- 내부는 G-suite 사용자만 사용가능
6. 어플리케이션 이름 설정 후 계속 확인
7. 사용자 인증 정보 -> 사용자 인증 정보 만들기
8. OAuth 클라이언트 ID 클릭
9. 기타 -> 생성
10. OAuth 클라이언트 ID 맨 오른쪽 다운로드
11. 구글드라이브에 실험 폴더 만들기
12. 폴더 ID 확인 - 위 파란 줄 친 부분이 폴더 ID
13. 코드 작성
각 필요할 것 같은 인자를 구분해뒀습니다.
쉘에서 실행시키거나 인자를 전달해 실행하실 분들은 커스텀해서 사용하시면 될 것 같습니다.
저는 시험삼아 데이터베이스를 업로드 하는 것이 목적이었으므로 database_path에 데이터베이스의 경로가 들어있지만 참고하시는 분의 경우에는 업로드 하실 파일의 경로를 database_path에 넣어주시면 됩니다.
import shutil
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
import sys
# argv[1] = json 경로
# argv[2] = 데이터베이스 경로
# argv[3] = 파일 아이디 경로
# argv[4] = 구글 드라이브에 올렸을 때의 파일명
# argv[5] = db_version
# argv[2]
# 압축할 파일의 경로
database_path = 'C:\\Program Files\\MariaDB 10.4\\data'
shutil.make_archive('database', 'zip', database_path, verbose=True)
try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None
SCOPES = 'https://www.googleapis.com/auth/drive.file'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
print("make new database file ")
# argv[1]
flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
creds = tools.run_flow(flow, store, flags) if flags else tools.run_flow(flow, store)
DRIVE = build('drive', 'v3', http=creds.authorize(Http()))
FILES = (
'database.zip',
)
# argv[3]
folder_id = "1NfREhKjTAq_wTT9Hkqzg6z-cVRG5Xldz"
for file_title in FILES:
file_name = file_title
# argv[4], argv[5] -> 'database' + db_version + '.zip'
metadata = {'name': 'database.zip',
'parents': [folder_id],
'mimeType': None
}
res = DRIVE.files().create(body=metadata, media_body=file_name).execute()
if res:
print('Uploaded "%s" (%s)' % (file_name, res['mimeType']))
위 사진과 코드는 아래의 게시글을 참고했습니다.
참고 사진 및 출처: pbj0812.tistory.com/193
728x90
반응형
'Language > Python' 카테고리의 다른 글
Python 객체의 모든 속성의 키를 가져오는 방법 - dir (0) | 2024.03.19 |
---|---|
Python os.path 함수 정리 (0) | 2024.03.16 |
파이썬에서 2중 리스트를 flatten하게 만들기 (0) | 2024.03.13 |
[라즈베리파이] 라즈베리파이와 윈도우 PC 소켓 통신 하기 (0) | 2020.11.23 |