PythonでGoogle Driveを操作する。


pythonを実行し、Google Driveにファイルをアップロードする方法を試してみた。

環境

Python version:3.9.7
OS: windows 10.0
Anaconda:conda 4.11.0

Google Cloud Platformについて

今回、 Google Cloud Platformを使用する。Google Cloud Platform(GCP)とは、Google がクラウド上で提供するサービスの総称で、その中にあるGoogle Drive APIを利用し、Google Driveを操作する。

プログラムの実行イメージ

自分のPCで実行するプログラムからgoogle driveまでに行われるイメージをまとめてみた。
Google Driveを操作するには、Google Cloud Platform(GCP)上にプロジェクトを作成し、Google Drive APIの有効化、OAuth認証アプリの設定をする必要がある。この設定を行うと、クライアントIDが発行される。
今回試したプログラムは、setting.yamlにそのIDを記述してpython実行することで、アプリにアクセスできるようになる。このアプリを経由して、Google Driveを操作する。
※OAuth認証とは、Google Cloud PlatformにあるAPIを使い、google driveを操作するためのアクセストークンを発行することで、google drive操作の権限認可を行っている。

1.1 Google Drive APIの有効化

  1. Google Cloud Platformを開く。
  2. プロジェクトの選択 -> 新しいプロジェクトを選択する。
  3. プロジェクト名を入力し、作成をクリックする。
  4. ライブラリ-> Google Drive APIを選択し、「有効にする」をクリック。

1.2 OAuth認証アプリの設定

1.2.1 OAuth認証画面の作成

  1. OAuth同意認証 -> User Type 外部 を選択。
  2. アプリ名とユーザーサポートメール、ディベロッパーの連絡先情報を入力し、保存して次へを選択。
  3. スコープは何も選択せず、保存して次へを選択。
  4. テストユーザーも何も選択せず、保存して次へを選択。

1.2.2 認証情報の作成

  1. APIとサービス -> 認証情報 ->上部にある+認証情報を作成 -> OAuth クライアント ID を選択。
  2. アプリケーションの種類 デスクトップアプリ -> 名前 を入力し、作成を選択。
     ※クライアントID、クライアントシークレットをメモしておく。
  3. JSONをダウンロードする。

1.2.3 アプリの公開

  1. 再びOAuth同意画面に移動し、「アプリを公開」を選択。

2. プログラムの作成とGoogle Driveの操作

2.1.1 yamlの設定

  1. yamlファイルを作成する。ここでは、上記で作成したOAuth認証アプリへのアクセスと1回目のプログラムを走行させたときに、credentials.jsonというファイルを生成させるための設定をしている。このファイルを生成することで、2回目以降の認証画面の省略ができる。上記で取得した、クライアントID、クライアントシークレットを入力する。
settings.yaml
client_config_backend: settings
client_config:
  client_id: <クライアントID>
  client_secret: <クライアントシークレット>

save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json

get_refresh_token: True

oauth_scope:
  - https://www.googleapis.com/auth/drive.file
  - https://www.googleapis.com/auth/drive.install

2.1.2 pythonプログラムの作成

pydriveをインストールし、下記のようにpythonのプログラムを作成する。
 (このプログラムは、Google drive上に新規フォルダの作成をしている。)

create_folder.py
import pprint

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

#Googleサービスの認証
gauth = GoogleAuth()

#ユーザーから認証コードを自動的に受信しローカルWebサーバーを設定
gauth.LocalWebserverAuth()

drive = GoogleDrive(gauth)

#フォルダの作成
f_folder = drive.CreateFile({'title': 'new_folder',
                             'mimeType': 'application/vnd.google-apps.folder'})
#作成したフォルダの情報を表示
print(f_folder)

#フォルダのアップロード(google driveの最上位のディレクトリにファイルが置かれます。)
f_folder.Upload()

2.1.3 pythonプログラムの実行

  1. 上記で作成したthonsettings.yamlとcreate_folder.pyを同じディレクトリに置き、プログラムを実行する。

  2. webサーバー上に認証画面が出てくる。作成したアプリがアクセスを求めてくるので、チェックを入れ、続行を選択する。
     - 4の操作は、一度だけ行う。実行後、credentials.jsonというファイルが生成、省略できる。
     - webサーバー上は、The authentication flow has completed.と表示される。
     - google driveには、new_folderという名前のフォルダが作られる。

link

今回参照したリンク。
OAuth認証
Python, PyDriveでGoogle Driveのダウンロード、アップロード、削除など