見出し画像

[Python] Googleドライブにファイルをアップロードする

はじめに

以前、Pythonで、Googleドライブ上の指定フォルダ内にあるファイルをダウンロードする処理を実装しました。

今回は、Googleドライブにローカルにあるファイルをアップロードする処理を実装します。

手順は、下記となります。

  1. Google Cloud Platformにて、プロジェクトを作成、秘密鍵を生成する

  2. 参照するGoogle Driveのフォルダを共有設定する

  3. ライブラリをインストールする

  4. Pythonスクリプトを実装する

1~3については、前回の記事で記載しておりますので、ご参照ください。

使用するライブラリ

  • google-api-python-client

  • google-auth-httplib2

  • google-auth-oauthlib

動作環境

・windows11
・Jupyter Notebook 6.4.5
・Python 3.9.7

実装

全体の処理は、下記です。

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
from httplib2 import Http
from googleapiclient.http import MediaFileUpload

SCOPES = ['https://www.googleapis.com/auth/drive']


credentials = ServiceAccountCredentials.from_json_keyfile_name(
    'service_account.json', SCOPES
)
http_auth = credentials.authorize(Http())

drive_service = build('drive', 'v3', http=http_auth)

upload_file_path = "./test.csv"
upload_file_name = os.path.basename(upload_f_path)
mine_type = 'text/csv'
folder_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

media = MediaFileUpload(upload_file_path, mimetype=mine_type, resumable=True)

file_metadata = {
    'name': upload_file_name,
    'mimeType': mine_type,
    'parents': [folder_id]
}
file = drive_service.files().create(
        body=file_metadata, 
        media_body=media 
		    ).execute()

print(file['id'])

順番に処理の内容を説明します。

①OAuthの認証

SCOPES = ['https://www.googleapis.com/auth/drive']

credentials = ServiceAccountCredentials.from_json_keyfile_name(
    'service_account.json', SCOPES
)

APIで使用する権限を指定します。今回は、ドライブ上のファイル操作の権限を指定しています。
ServiceAccountCredentials.from_json_keyfile_nameメソッドの第1引数には、ダウンロードしたJSONファイルのファイルパスを指定します。

②GoogleDriveAPIを使用するためのインスタンスを生成

drive_service = build('drive', 'v3', http=http_auth)

③アップロードするファイルオブジェクトを準備

media = MediaFileUpload(upload_file_path, mimetype=mine_type, resumable=True)

file_metadata = {
    'name': upload_file_name,
    'mimeType': mine_type,
    'parents': [folder_id]
}
file = drive_service.files().create(
        body=file_metadata, 
        media_body=media ).execute()

アップロードするファイルを準備するため、MediaFileUploadクラスを生成します。

次に、drive_service.files().createメソッドで、ファイルをアップロードします。ここで、bodyキーワードで指定する引数には、下記の情報を辞書型で設定します。

・ファイル名(name)
・ファイル種別(mimeType)
・配置するフォルダID(parents)

ここで、配置するフォルダを指定する、parentsキーの値は、配列で指定する必要があります。

処理は以上です!

まとめ

今回は、Pythonスクリプトから、Googleドライブにローカルにあるファイルをアップロードする処理についてお伝えしました。

参考サイト


この記事が気に入ったらサポートをしてみませんか?