Pythonでpydriveを使用しGoogleドライブの特定フォルダにファイルをアップロードする方法について解説します。
なお、この記事は「PythonでGoogle Driveにファイルをアップロードする」の続きとなります(また、pydriveを使用する場合はGoogle認証情報の設定などが必要となりますので、そちらについても設定の参考を記載しています。)
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows11)
■Googleドライブで新規フォルダを作成する
まずはGoogleドライブで新規フォルダを作成します。作成のため、Webブラウザを開き、お持ちのGoogleアカウントでGoogleドライブ(https://www.google.com/intl/ja_jp/drive/)にログインを行います。
ログインを行うと左側にメニューが表示されますので「新規」ボタンをクリックします。
クリックするとさらにメニューが表示され「新しいフォルダ」をクリックします。
クリックすると「新しいフォルダ」ウインドウが表示されますので、今回は「test_a01」と入力し「作成」ボタンをクリックします。
クリックするとGoogドライブ内に「test_a01」というフォルダが作成されます。
作成後、このフォルダを開きます。開くとWebブラウザのアドレスバーにURLが表示されます。URLは「https://drive.google.com/drive/u/0/folders/*******(フォルダのID)」という形になっていますので「*******(フォルダのID)」をコピーし保存しておきます。
保存後、今回は「C:\Users\user_\」内に「test」というフォルダを作成します。
作成後、フォルダ内(C:\Users\user_\test)に画像を配置します。これはGoogleドライブにアップロードするファイル(jpg形式)です。なお、アップロードする画像ファイルは、著作権フリーのものを使用しています。
これでGoogleドライブの特定フォルダにファイルをアップロードする準備は完了となります。
■pydriveを使用しGoogleドライブの特定フォルダにファイルをアップロードする
次にpydriveを使用しGoogleドライブの特定フォルダにファイルをアップロードするスクリプトを書いていきます。
■コード
- from pydrive.drive import GoogleDrive
- from pydrive.auth import GoogleAuth
- import os
- #認証
- gauth = GoogleAuth()
- #ローカルWebサーバとautoを作成
- #Googleドライブの認証処理
- gauth.LocalWebserverAuth()
- drive = GoogleDrive(gauth)
- #アップロードするフォルダパス指定
- path = r”C:\Users\user\test”
- #for文によるループ処理(繰り返し処理)
- for x in os.listdir(path):
- #GoogleDriveFileオブジェクト作成,フォルダIDを設定
- f = drive.CreateFile({‘parents’: [{‘id’: ‘フォルダのID’}]})
- #ローカルのファイルをセットしてアップロード
- f.SetContentFile(os.path.join(path,x))
- #Googleドライブにアップロード
- f.Upload()
- f = None
■処理手順
モジュールのインポート:
スクリプトの最初の行で、pydrive.driveとpydrive.authモジュールをインポートしています。これらのモジュールはGoogle Drive APIとのやり取りを容易にするために使用されます。
Google認証:
GoogleAuth()を使用してGoogleの認証オブジェクトを作成します。これはGoogle Driveへのアクセス許可を取得するために使用されます。
ローカルWebサーバとの認証:
gauth.LocalWebserverAuth()を呼び出すことで、ローカルWebサーバを起動し、Googleアカウントの認証フローを開始します。このフローにより、ユーザーはGoogleアカウントにログインし、アクセス許可を与えることができます。認証が成功すると、ローカルWebサーバは認証トークンを取得し、スクリプトに返します。
Google Driveオブジェクトの作成:
drive = GoogleDrive(gauth)を使用して、Google Drive APIを使用するためのGoogle Driveオブジェクトを作成します。このオブジェクトを使用して、ファイルのアップロードなどの操作を行います。
アップロードするフォルダの指定:
path変数にアップロードするローカルフォルダのパスを指定します。このフォルダ内のファイルがGoogle Driveにアップロードされます。
ファイルのアップロード:
os.listdir(path)を使用して、指定したパスのフォルダ内のファイルのリストを取得します。forループを使用して、フォルダ内の各ファイルに対して以下の処理を行います。
1. GoogleDriveFileオブジェクトの作成:
drive.CreateFile()を使用して、新しいGoogleDriveFileオブジェクトを作成します。このオブジェクトは、アップロードするファイルに関する情報を保持します。
2. ファイルの設定とアップロード:
f.SetContentFile()を使用して、ローカルファイルのパスをGoogleDriveFileオブジェクトに設定します。f.Upload()を呼び出すことで、ファイルをGoogle Driveにアップロードします。
3. GoogleDriveFileオブジェクトの解放:
f = Noneを使用して、メモリを解放し、次のファイルの処理に移ります。
なお、コード内の「フォルダのID」という箇所は、アップロード先のGoogle Driveフォルダの実際のIDに置き換える必要があります。
■実行・検証
今回書いたスクリプトを「test_d.py」という名前でPythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行すると「Your browser has been opened to visit:」と「https://accounts.google.com/o/oauth2/auth?client_id=***」のURLが表示されます。そしてWebブラウザが自動的に起動し、「https://accounts.google.com/o/oauth2/auth?client_id=***」のURLにアクセスし表示されます。
表示後、アカウントの選択でアカウントを選択します。
選択すると「このアプリはGoogleで確認されていません」と表示されますが慌てず「詳細」のリンクをクリックします。
クリックすると追加の文章が表示されますので「安全ではないページに移動」のリンクをクリックします。
クリックすると、Googleアカウントへのアクセスを求めていますと表示されますのでアクセス権を付与するために「続行」ボタンをクリックします。
クリックすると「The authentication flow has completed.(認証フローが完了しました。)」と表示されますので表示されたページは閉じます。
閉じた後にコマンドプロンプトを確認すると「Authentication successful.(認証に成功しました。)」と表示されます。これで認証が完了しアップロードが行われ完了となります。
完了後、今回Googドライブ内に作成した新規フォルダである「test_a01」を確認します。確認するとpydriveを使用しフォルダにファイルがアップロードされていることを確認できました。
コメント