質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3815閲覧

Pythonを使用してGoogle DriveからフォルダをローカルPCにダウンロードしたい

onioonioonio

総合スコア25

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/15 02:47

前提・実現したいこと

Google Driveの共有フォルダから、ファイルをフォルダ単位でダウンロードする事が目的です。

以下サイトを参考にPythonのPydriveを使用してコードを作成したのですが、ダウンロードを行うことが出来ませんでした。

OAuthについては、認証済です。
settings.yamlについても設定済です。

pydriveに詳しい方いらっしゃいましたら、是非ご教示をお願いいたします。

PyDriveでGoogle Driveの特定フォルダ配下のファイルをすべてダウンロードする
https://qiita.com/i8b4/items/322dc8d81427717a86e4

Python, PyDriveでGoogle Driveのダウンロード、アップロード、削除など
https://note.nkmk.me/python-pydrive-download-upload-delete/

Python, PyDriveでGoogle Driveのフォルダ作成、ファイル移動、一括処理
https://note.nkmk.me/python-pydrive-folder/

発生している問題・エラーメッセージ

qiitaを参考にしたコードにおいてエラーメッセージは、発生しておりません。 ローカルPCにフォルダは作成されますが、ダウンロードはされませんでした。

該当のソースコード

Qiita

Python

1import os 2from pydrive.drive import GoogleDrive 3 4drive = GoogleDrive(gauth) 5 6drive_folder_id = '{ダウンロード対象フォルダのID}' 7save_folder = '{保存先フォルダのパス(ローカル)}' 8 9 10def download_recursively(save_folder, drive_folder_id): 11 # 保存先フォルダがなければ作成 12 if not os.path.exists(save_folder): 13 os.makedirs(save_folder) 14 15 max_results = 100 16 query = "'{}' in parents and trashed=false".format(drive_folder_id) 17 18 for file_list in drive.ListFile({'q': query, 'maxResults': max_results}): 19 for file in file_list: 20 # mimeTypeでフォルダか判別 21 if file['mimeType'] == 'application/vnd.google-apps.folder': 22 download_recursively(os.path.join(save_folder, file['title']), file['id']) 23 else: 24 file.GetContentFile(os.path.join(save_folder, file['title'])) 25 26download_recursively(save_folder, drive_folder_id)

試したこと

アクセス先が、共有フォルダであるため、認証の問題等あるのかと思い、下記の情報を取得するコードを実行しましたが、それらは問題なく動作しました。

 ・指定フォルダ配下のファイルリスト取得
・指定フォルダのメタデータ取得
など

Python

1#指定フォルダ配下のファイルリスト取得 2dir1_id = drive.ListFile({'q': 'title = "{対象フォルダ名}"'}).GetList()[0]['id'] 3for f in drive.ListFile({'q': '"{}" in parents'.format(dir1_id)}).GetList(): 4 print(f['title'], ' \t', f['id'])

Python

1#指定フォルダのメタデータ取得 2import pprint 3file_id = drive.ListFile({'q': 'title = "{対象フォルダ名}"'}).GetList()[0]['id'] 4f = drive.CreateFile({'id': file_id}) 5f.FetchMetadata() 6pprint.pprint(f)

公式(pydrive)のドキュメントや参考に認証情報のやり直しもしてみましたがダウンロードはできませんでした。
https://pythonhosted.org/PyDrive/

google colaboratoryのドキュメントも参考にしてみましたが、共有フォルダを指定するとダウンロードできませんでした。
https://colab.research.google.com/notebooks/io.ipynb?hl=ja#scrollTo=hEzpzWYWsYKg

補足情報(FW/ツールのバージョンなど)

PC:mac
実行環境:Jupyter notebook

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

OAuth認証がうまくできていなかったのが原因でした。

そのため、GDCから再度認証を踏む手順を実行しました。
.yamlの設定ファイルも見直しました。
また、OAuth同意画面についても「公開ステータス」を本番環境へ変更する必要がありました。

下記URLを参考にしました。
先輩方に感謝です。

Google認証エラー 403: access_deniedを解決したい
https://teratail.com/questions/308789

投稿2021/04/17 05:02

onioonioonio

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問