PythonからGoogleDriveにファイルをアップロードするときの手順です。
事前準備
認証情報の作成
GoogleDriveのAPIを利用するために、GCP上から認証情報を作成しダウンロードする必要がある。
認証情報の作成のため、下記のURLからGCPにアクセスする。
認証情報は、ポータルの「GCP > 認証情報」から作成する。
認証情報画面上部の「認証情報を作成」を押下し、「OauthクライアントID」を選択する。
次の画面で、「アプリケーションの種類」に「ディスクトップアプリ」を選択する。「名前」は任意の名称を入力し、「作成」ボタンを押下する。
作成が完了すると下記のような画面が表示されるので、「JSONをダウンロード」よりJsonファイルをダウンロードする。
これで認証情報の準備が完了。ダウンロードした認証情報は、client_secrets.json
の名称で保存しておく。
実装
必要ライブラリのインストール
GoogleDriveに接続するためのライブラリとして、PyDrive2
を利用する。PyDrive2
の名称の通りPyDrive
も存在するが、そちらはもう更新されていない様子。これから新規で利用するのであれば、基本的にPyDrive2
を使うのが良いだろう。
PyDrive2
のインストールのために下記のコマンドを実行する。
pip install PyDrive2
settings.yaml
の準備
認証情報に関する情報をsettings.yaml
に記載する。
client_config_file: client_secrets.json
save_credentials: True
save_credentials_backend: file
save_credentials_file: saved_credentials.json
get_refresh_token: True
アップロードスクリプトの作成
import os
from pydrive2.auth import GoogleAuth
from pydrive2.drive import GoogleDrive
class GoogleDriveFacade:
def __init__(self, setting_path: str='settings.yaml'):
gauth = GoogleAuth(setting_path)
gauth.LocalWebserverAuth()
self.drive = GoogleDrive(gauth)
def create_folder(self, folder_name):
ret = self.check_files(folder_name)
if ret:
folder = ret
print(f"{folder['title']}: exists")
else:
folder = self.drive.CreateFile(
{
'title': folder_name,
'mimeType': 'application/vnd.google-apps.folder'
}
)
folder.Upload()
return folder
def check_files(self, folder_name,):
query = f'title = "{os.path.basename(folder_name)}"'
list = self.drive.ListFile({'q': query}).GetList()
if len(list)> 0:
return list[0]
return False
def upload(self,
local_file_path: str,
save_folder_name: str = 'sample',
is_convert : bool=True,
):
if save_folder_name:
folder = self.create_folder(save_folder_name)
file = self.drive.CreateFile(
{
'title':os.path.basename(local_file_path),
'parents': [
{'id': folder["id"]}
]
}
)
file.SetContentFile(local_file_path)
file.Upload({'convert': is_convert})
drive_url = f"https://drive.google.com/uc?id={str( file['id'] )}"
return drive_url
if __name__ == "__main__":
g = GoogleDriveFacade()
g.upload(
local_file_path='hoge.txt',
save_folder_name="test",
is_convert=True,
)
動作確認
アップロード用にhoge.txt
を作成し、マイドライブのtest
フォルダにアップロードしてみる。
echo "Hello World" > hoge.txt
python main.py
初回実行時は下記のようなOAuth認証画面が表示されるので、画面に従って進めていく。はじめに利用するアカウントを選択する。
その後確認画面が表示されるので、内容を確認し「続行」を押下する。
認証が完了し、アップロード処理が完了する。
GoogleDriveにアクセスして確認すると、「test」フォルダが作成されていることが確認できる。
その中に「hoge」というファイルがアップロードされていることが確認でき、内容も先ほど入力した内容が記載されている。
初回実行時に、OAuth2の認証情報がsaved_credential.json
の名称でローカルに保存される。そのため、2回目以降はOAuth2の認証画面を表示することなくGoogleDriveにファイルをアップロードできる。