背景
pythonでgoogle driveにファイルを定期的にアップロードするジョブのスクリプトが欲しい。
検索すると、PyDriveを使った記事が多いが、PyDriveはメンテナンスがあまりされていないし、Google Drive APIのv2を使っていて今使うのは得策ではなさそう。
今回は GoogleDriveAPIを使って実装してみる。
参考リンク集
Python Quickstart
- GoogleDriveAPIの雰囲気が掴める掴む
- この例では一度コンソールでログインする必要がある
- 今回の仕様としては、コンソールログインなどのユーザーアクションなしで定期アップロードを行うようにしたいので別の認証を考える必要がある
Upload file data
- ファイルアップロードのサンプル
- Pythonのサンプルが少なくてしっくりこない
Lambda(Python)でGoogle Driveへファイルアップロード
- GCPのサービスアカウントを使用したサンプルが紹介されている
- このqiita記事が一番参考になった
実装サンプル
sample.py
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from oauth2client.service_account import ServiceAccountCredentials
import os
def uploadFileToGoogleDrive(fileName, localFilePath):
service = getGoogleService()
# "parents": ["****"]この部分はGoogle Driveに作成したフォルダのURLの後ろ側の文字列に置き換えてください。
file_metadata = {"name": fileName, "mimeType": "text/csv", "parents": ["****"] }
media = MediaFileUpload(localFilePath, mimetype="text/csv", resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
def getGoogleService():
scope = ['https://www.googleapis.com/auth/drive.file']
keyFile = 'credentials.json'
credentials = ServiceAccountCredentials.from_json_keyfile_name(keyFile, scopes=scope)
return build("drive", "v3", credentials=credentials, cache_discovery=False)
getGoogleService()
uploadFileToGoogleDrive("hoge", "hige.csv")