[Python] Google Driveからファイルをダウンロードする方法

PythonでGoogle Driveからファイルをダウンロードするには、Google Drive APIを使用します。

まず、Google Cloud Consoleでプロジェクトを作成し、Drive APIを有効化してOAuth 2.0認証情報を取得します。

次に、google-authgoogle-api-python-clientなどのライブラリをインストールし、認証を行います。

認証後、APIを通じてファイルIDを指定し、files().get_media()メソッドを使用してファイルをダウンロードします。

この記事でわかること
  • Google Drive APIの準備手順
  • 必要なPythonライブラリのインストール方法
  • 認証設定の具体的な手順
  • ファイルダウンロードの実装方法
  • 応用例を通じた活用法

目次から探す

Google Drive APIの準備

Google Driveからファイルをダウンロードするためには、まずGoogle Drive APIを利用するための準備が必要です。

以下の手順に従って、APIの設定を行います。

Google Cloud Consoleでプロジェクトを作成する

  1. Google Cloud Consoleにアクセスします。
  2. Googleアカウントでログインします。
  3. 左上の「プロジェクトを選択」をクリックし、「新しいプロジェクト」を選択します。
  4. プロジェクト名を入力し、「作成」をクリックします。

Google Drive APIを有効化する

  1. 作成したプロジェクトを選択した状態で、左側のメニューから「APIとサービス」→「ライブラリ」を選択します。
  2. 検索バーに Google Drive API と入力し、表示された結果から Google Drive API を選択します。
  3. 「有効にする」ボタンをクリックしてAPIを有効化します。

OAuth 2.0認証情報を作成する

  1. 「APIとサービス」→「認証情報」を選択します。
  2. 「認証情報を作成」ボタンをクリックし、「OAuth クライアント ID」を選択します。
  3. 「同意画面の設定」を行い、必要な情報を入力します。
  4. 「アプリケーションの種類」で「デスクトップアプリ」を選択し、名前を入力して「作成」をクリックします。
  5. 作成されたクライアントIDとクライアントシークレットが表示されます。

認証情報をダウンロードする

  1. 認証情報の一覧から、作成したOAuth 2.0クライアントIDを選択します。
  2. 「ダウンロード」アイコンをクリックして、credentials.jsonファイルをダウンロードします。
  3. このファイルは後でPythonプログラムで使用しますので、安全な場所に保存してください。

これでGoogle Drive APIを使用するための準備が整いました。

次のステップでは、必要なPythonライブラリのインストールを行います。

必要なPythonライブラリのインストール

Google Drive APIを利用するためには、いくつかのPythonライブラリをインストールする必要があります。

以下の手順に従って、必要なライブラリをインストールします。

google-authライブラリのインストール

google-authライブラリは、Googleの認証を行うためのライブラリです。

以下のコマンドを実行してインストールします。

pip install google-auth

google-api-python-clientライブラリのインストール

google-api-python-clientライブラリは、Google APIを操作するためのクライアントライブラリです。

次のコマンドを実行してインストールします。

pip install google-api-python-client

google-auth-httplib2とgoogle-auth-oauthlibのインストール

これらのライブラリは、HTTPリクエストを行うためのライブラリとOAuth 2.0認証をサポートするためのライブラリです。

以下のコマンドを実行して両方をインストールします。

pip install google-auth-httplib2 google-auth-oauthlib

これで、Google Drive APIを使用するために必要なPythonライブラリのインストールが完了しました。

次のステップでは、認証の設定を行います。

認証の設定

Google Drive APIを利用するためには、認証情報を正しく設定する必要があります。

以下の手順に従って、認証の設定を行います。

認証情報の読み込み

まず、ダウンロードしたcredentials.jsonファイルを読み込みます。

このファイルには、OAuth 2.0のクライアントIDやクライアントシークレットが含まれています。

以下のサンプルコードを参考にしてください。

from google.oauth2 import service_account
# 認証情報のファイルパス
credentials_file = 'path/to/credentials.json'
# 認証情報の読み込み
credentials = service_account.Credentials.from_service_account_file(credentials_file)

OAuth 2.0フローの実行

次に、OAuth 2.0フローを実行して、ユーザーの認証を行います。

以下のサンプルコードを使用して、認証を行い、トークンを取得します。

from google_auth_oauthlib.flow import InstalledAppFlow
# スコープの設定
scopes = ['https://www.googleapis.com/auth/drive.readonly']
# OAuth 2.0フローの実行
flow = InstalledAppFlow.from_client_secrets_file(credentials_file, scopes)
credentials = flow.run_local_server(port=0)

このコードを実行すると、ブラウザが開き、Googleアカウントへのアクセスを許可するよう求められます。

許可すると、認証トークンが取得されます。

認証トークンの保存と再利用

取得した認証トークンは、次回以降の実行で再利用できるように保存します。

以下のサンプルコードでは、トークンをファイルに保存し、次回の実行時に読み込む方法を示します。

import os
import pickle
# トークンの保存先
token_file = 'token.pickle'
# トークンの保存
with open(token_file, 'wb') as token:
    pickle.dump(credentials, token)
# トークンの読み込み
if os.path.exists(token_file):
    with open(token_file, 'rb') as token:
        credentials = pickle.load(token)

このようにして、認証トークンを保存し、次回の実行時に再利用することができます。

これで認証の設定が完了しました。

次のステップでは、Google Drive APIを使ったファイルのダウンロード方法を解説します。

Google Drive APIを使ったファイルのダウンロード

Google Drive APIを使用してファイルをダウンロードするための手順を解説します。

以下の内容に従って、ファイルのダウンロードを行います。

ファイルIDの取得方法

Google Drive上のファイルをダウンロードするには、まずそのファイルのIDを取得する必要があります。

ファイルIDは、Google DriveのURLに含まれています。

例えば、以下のURLの場合、ファイルIDは1A2B3C4D5E6F7G8H9I0Jです。

https://drive.google.com/file/d/1A2B3C4D5E6F7G8H9I0J/view?usp=sharing

files().get_media()メソッドの使用

ファイルIDを取得したら、次にfiles().get_media()メソッドを使用してファイルをダウンロードします。

以下のサンプルコードを参考にしてください。

from googleapiclient.discovery import build
# Google Drive APIのサービスを構築
service = build('drive', 'v3', credentials=credentials)
# ダウンロードするファイルのID
file_id = '1A2B3C4D5E6F7G8H9I0J'
# ファイルのメタデータを取得
file = service.files().get(fileId=file_id).execute()
file_name = file['name']
# ファイルをダウンロード
request = service.files().get_media(fileId=file_id)
with open(file_name, 'wb') as f:
    downloader = MediaIoBaseDownload(f, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print(f"ダウンロード進捗: {int(status.progress() * 100)}%")

ダウンロードしたファイルの保存方法

上記のコードでは、ダウンロードしたファイルを同じディレクトリに保存しています。

file_name変数には、Google Drive上のファイル名が格納されており、その名前でファイルが保存されます。

必要に応じて、保存先のパスを変更することもできます。

エラーハンドリング

ファイルのダウンロード中にエラーが発生する可能性があります。

エラーハンドリングを行うことで、問題を適切に処理できます。

以下のサンプルコードでは、エラーが発生した場合の処理を示しています。

try:
    # ファイルをダウンロードする処理
    request = service.files().get_media(fileId=file_id)
    with open(file_name, 'wb') as f:
        downloader = MediaIoBaseDownload(f, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print(f"ダウンロード進捗: {int(status.progress() * 100)}%")
except Exception as e:
    print(f"エラーが発生しました: {e}")

このようにして、Google Drive APIを使用してファイルをダウンロードすることができます。

次のステップでは、応用例を紹介します。

応用例

ここでは、Google Drive APIを使用したファイルのダウンロードに関する応用例をいくつか紹介します。

これらの例を参考にして、さまざまなシナリオに対応できるようにしましょう。

フォルダ内の全ファイルを一括ダウンロードする方法

特定のフォルダ内にある全てのファイルを一括でダウンロードするには、まずそのフォルダのIDを取得し、フォルダ内のファイルリストを取得します。

以下のサンプルコードを参考にしてください。

# フォルダのID
folder_id = '1A2B3C4D5E6F7G8H9I0J'
# フォルダ内のファイルを取得
results = service.files().list(
    q=f"'{folder_id}' in parents",
    fields="files(id, name)"
).execute()
items = results.get('files', [])
# 各ファイルをダウンロード
for item in items:
    file_id = item['id']
    file_name = item['name']
    request = service.files().get_media(fileId=file_id)
    with open(file_name, 'wb') as f:
        downloader = MediaIoBaseDownload(f, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print(f"{file_name}のダウンロード進捗: {int(status.progress() * 100)}%")

特定のファイル形式のみをダウンロードする方法

特定のファイル形式(例えば、PDFファイル)だけをダウンロードする場合は、クエリを変更してフィルタリングします。

以下のサンプルコードを参考にしてください。

# PDFファイルのみを取得
results = service.files().list(
    q="mimeType='application/pdf'",
    fields="files(id, name)"
).execute()
items = results.get('files', [])
# 各PDFファイルをダウンロード
for item in items:
    file_id = item['id']
    file_name = item['name']
    request = service.files().get_media(fileId=file_id)
    with open(file_name, 'wb') as f:
        downloader = MediaIoBaseDownload(f, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print(f"{file_name}のダウンロード進捗: {int(status.progress() * 100)}%")

ダウンロード進捗を表示する方法

ダウンロード進捗を表示するためには、MediaIoBaseDownloadクラスを使用します。

上記のサンプルコードでも進捗を表示していますが、進捗をより詳細に表示することも可能です。

以下のように、進捗をパーセンテージで表示することができます。

# ダウンロード進捗を表示する
done = False
while done is False:
    status, done = downloader.next_chunk()
    print(f"ダウンロード進捗: {int(status.progress() * 100)}%")

Google Driveの共有ファイルをダウンロードする方法

共有ファイルをダウンロードする場合も、基本的には同じ手順で行います。

ただし、共有ファイルにアクセスするためには、適切な権限が必要です。

以下のサンプルコードを参考にしてください。

# 共有ファイルのID
shared_file_id = '1A2B3C4D5E6F7G8H9I0J'
# 共有ファイルをダウンロード
request = service.files().get_media(fileId=shared_file_id)
with open('shared_file_name.ext', 'wb') as f:
    downloader = MediaIoBaseDownload(f, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print(f"共有ファイルのダウンロード進捗: {int(status.progress() * 100)}%")

これで、Google Drive APIを使用したファイルのダウンロードに関する応用例を紹介しました。

次のステップでは、よくある質問にお答えします。

よくある質問

ファイルIDはどこで確認できますか?

ファイルIDは、Google DriveのファイルのURLに含まれています。

具体的には、以下のようなURLの中にあります。

https://drive.google.com/file/d/1A2B3C4D5E6F7G8H9I0J/view?usp=sharing

この場合、1A2B3C4D5E6F7G8H9I0JがファイルIDです。

ファイルを右クリックして「リンクを取得」を選択することでも、ファイルIDを確認できます。

認証トークンが期限切れになった場合はどうすればいいですか?

認証トークンが期限切れになった場合、再度OAuth 2.0フローを実行して新しいトークンを取得する必要があります。

以下の手順で行います。

  1. token.pickleファイルを削除します。
  2. プログラムを再実行し、OAuth 2.0フローを実行します。
  3. ブラウザが開き、Googleアカウントへのアクセスを許可します。

これにより、新しい認証トークンが生成され、再利用できるようになります。

ダウンロードが途中で失敗した場合の対処法は?

ダウンロードが途中で失敗した場合、以下の対処法を試みてください。

  1. インターネット接続を確認: 接続が不安定な場合、再接続を試みてください。
  2. 再試行: ダウンロード処理を再実行します。

エラーハンドリングを実装している場合、エラー内容を確認し、適切に処理します。

  1. ファイルのサイズを確認: 大きなファイルの場合、時間がかかることがあります。

進捗を表示することで、ダウンロードが進んでいるか確認できます。

  1. APIの制限を確認: Google Drive APIには、リクエストの制限があります。

制限に達している場合は、時間をおいてから再試行してください。

これらの対処法を試すことで、ダウンロードの問題を解決できる可能性があります。

まとめ

この記事では、Google Drive APIを使用してファイルをダウンロードするための手順を詳しく解説しました。

具体的には、APIの準備から必要なPythonライブラリのインストール、認証の設定、ファイルのダウンロード方法、さらには応用例までをカバーしました。

これを機に、Google Drive APIを活用して自動化やデータ管理を行うことに挑戦してみてはいかがでしょうか。

  • URLをコピーしました!
目次から探す