PythonでGoogle Driveを触る

PythonとGoogleのAPIを使って、Google Driveにアクセスします。

環境

  • Windows10
  • Python 3.8.6

環境構築

Python標準のvenvを使って仮想環境を構築し、そこに必要なパッケージをインストールしました。

$ cd "~/Google Drive Viewer"
$ python -m venv .venv
$ source .venv/Scripts/activate
(.venv) $ python -m pip install --upgrade pip
(.venv) $ pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

GCPプロジェクトの作成と認証情報のダウンロード

Google Developer Consoleでプロジェクトを作成して、認証情報をclient_id.jsonとしてダウンロードしてください。

Pythonスクリプト

公式チュートリアルを参考にPythonスクリプトを書きます。

from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# アプリに必要な権限を設定
SCOPES = [
    # Google Driveの全ファイル読み込み専用
    'https://www.googleapis.com/auth/drive.readonly'
]

credentials = None
# 認証トークンがあれば読み込む
if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        credentials = pickle.load(token)

# 認証情報が有効でなければGoogleのログイン画面を開いて新たに生成
if not credentials or not credentials.valid:
    if credentials and credentials.expired and credentials.refresh_token:
        credentials.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            'client_id.json', SCOPES)
        credentials = flow.run_local_server(port=0)
    # Save the credentials for the next run
    with open('token.pickle', 'wb') as token:
        pickle.dump(credentials, token)

# Google Drive API v3のオブジェクトを生成
service = build('drive', 'v3', credentials=credentials)

# APIを使う(ファイルの一覧を10件取得)
results = service.files().list(
    pageSize=10, fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])

# 結果を表示
if not items:
    print('No files found.')
else:
    print('Files:')
    for item in items:
        print(u'{0} ({1})'.format(item['name'], item['id']))

実行

実行時に有効なユーザーの認証情報がtoken.pickleに保存されていない場合は、Googleのアプリ認証ページがブラウザで開かれます。

もしくは、以下のような形でアプリ認証ページのURLがターミナルに表示されます。

# 実行
(.venv) $ python main.py
# 表示されたURLで自分のGoogleアカウントにログインする
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=...

Googleによって確認されていないアプリの場合は警告が出ます。
詳細からアプリのページに移動します。

必要な権限(プログラムではSCOPESで指定)が表示されるので、許可を選びます。

画面が自動的に閉じて、ユーザーの認証情報がtoken.pickleに保存されます。

例のプログラムではGoogle Driveのファイルの一覧を10件取得して表示するので、
この後ターミナルにファイルの一覧が表示されます。

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です