7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Drive Api Tips(Python)

Last updated at Posted at 2020-05-30

サービスアカウントの場合の初期化

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())
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?