サービスアカウントの場合の初期化
https://cloud.google.com/iam/docs/creating-managing-service-account-keys?hl=ja
こちらを参考にjsonファイルをを取得しておきます
from google.oauth2 import service_account
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/drive']
credentials = service_account.Credentials.from_service_account_file(JSON_FILE_PATH, scopes=SCOPE)
self.service = build('drive', 'v3', credentials=credentials)
指定したディレクトリにファイルをアップロードしたい
ファイルIDは配列で渡しましょう(忘れがち)
from apiclient.http import MediaFileUpload
# ディレクトリのファイルIDはパスの一番後ろ
# https://drive.google.com/drive/folders/FILE_ID
file_metadata = {'name': 'photo.jpg', 'parents': [FILE_ID]}
media = MediaFileUpload('files/photo.jpg', mimetype='image/jpeg')
file = self.service.files().create(body=file_metadata,
media_body=media,
fields='id').execute()
アップロードする際のmimetypeって何を指定したらいい?
このあたりを参考
https://developers.google.com/drive/api/v3/mime-types
https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
ファイルのいろんな情報が見たい
*
で全情報が返ります
必要な項目をカンマ区切りで渡しましょう
self.service.files().get(fileId=FILE_ID, fields="*").execute()
ファイルアップロードしたのにアクセスできない
多分権限がありません、つけてあげましょう
あらかじめ権限のあるディレクトリを作っておいて、そこにアップロードすればいちいち権限をつける必要はありません
user_permission = {
'type': 'user',
'role': 'writer',
'domain': 'hoge@gmail.com'
}
self.service.permissions().create(
fileId=FILE_ID,
body=user_permission,
fields='id',
)
ダウンロードしたファイルを指定したパスに保存する
getbuffer
で書き込みましょう
import io
from apiclient.http import MediaIoBaseDownload
request = self.service.files().get_media(fileId=FILE_ID)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print("Download %d%%." % int(status.progress() * 100))
with open(SAVE_FILE_PATH, "wb") as f:
f.write(fh.getbuffer())