PythonからGoogleDriveに接続する方法を画像付きで説明

PythonからGoogle Driveに接続する方法を画像付きで説明

PythonでDriveAPIを利用してGoogle Driveに接続する方法を紹介します。

Pythonのプログラムはそこまで難しくありません。ただ、Drive APIを有効化するためのGoogle Cloud Platformでの操作が少し厄介なので、画像付きで方法を紹介します。

この記事で紹介する方法は、Google Drive for Developers v3のPython Quickstartを参考にしています。

下記の順番で説明していきます。

  1. 事前準備
  2. Google Cloud Platform (GCP)でプロジェクトの作成
  3. Drive APIの有効化
  4. 認証情報(credentials)の作成
  5. pythonプログラムの作成

自分はGoogleDriveに保存している画像をPythonで処理するためにDrive APIを利用しています!みなさんがどのような用途でDriveAPIを利用されているのでしょうか。

事前準備

事前に準備しておくべきことは下記になります。

  • pythonは2.6以上
  • pipをインストール済み
  • Googleアカウントを作成済み

このあたりは特に問題ないですね。

Google Cloud Platform(GCP)でのプロジェクトの作成

Drive APIを利用するためには、Drive APIを利用するためのプロジェクトをGCP上で作成する必要があります。

プロジェクトとは

APIの管理や課金の有効化、Googleのリソースに対する権限などをまとめて設定できる単位のことです。

プロジェクトに対してDrive APIやGmail API, Places APIなどを有効化することで、プロジェクトに属するユーザがそれらのAPIを利用することが可能になります。

今回はGoogle Driveに接続することが目的なので、Drive APIを有効化しているプロジェクトを作成します。

それでは、Google Cloud Platformへアクセスしてプロジェクトを作成していきます。

ページ上部にある「プロジェクトの選択」をクリックしたあと、「新しいプロジェクト」をクリックします。

GCPプロジェクトの作成1

1.
GCPのページ上部にある「プロジェクトの選択」をクリックします。

GCPプロジェクトの作成

2.
「新しいプロジェクト」をクリックします。

GCPプロジェクトの作成3

3.
プロジェクト名を入力し、作成ボタンをクリックします。

これでしばらく待つと、プロジェクトが作成されます。

Drive APIの有効化

作成したプロジェクトに対して、Drive APIを有効化します。

GCPのDriveAPI有効化

1 .
プロジェクトが選択されていることを確認し、上部の「プロダクトとリソースの検索」窓に”api”と入力します。検索結果にでてくる「APIとサービス」をクリックします。

GCPのDriveAPI有効化

2.
APIとサービスのページの上部にある「+APIとサービスの有効化」をクリックします。

GCPのDriveAPI有効化

3.
APIのライブラリ画面において、”drive”と検索すると、Google Drive APIが検索結果に出てくるので、クリックします。

GCPのDriveAPI有効化

4.
「有効にする」をクリックしたら完了です。

APIの認証情報の作成

APIを有効化したら、次に認証情報(credentials)の作成を行います。

認証情報について

認証情報は、アプリケーションの識別に利用されます。

GoogleのAPIは、登録されたアプリケーションからのリクエストのみ受け付けます。

アプリケーションはリクエストの際に認証情報を提示し、その認証情報をもとにAPI側で登録されているアプリケーションかを確認します。ここで、認証情報を持たない匿名のアプリケーションや、不適切なアプリケーションからのリクエストは拒否されます。

認証情報は、web-server用やデスクトップアプリケーション用、Androidアプリ用など用途に応じて作成方法が異なるので、用途にあった認証情報を作る必要があります。

今回作成する認証情報は、上記のGoogleのチュートリアルで案内があるように、OAuth2.0を利用したデスクトップアプリケーション用の認証情報です。

下記で作成方法を説明しますが、方法が変更されている可能性もあるので、公式チュートリアル(Create Desktop application credentials)も一度ご覧ください。

認証情報の作成

OAuth同意画面でアプリ登録、OAuthクライアントIDの認証情報作成という順番で説明していきます。最後に作成した認証情報のjsonファイルをダウンロードするのを忘れないでください。

GCP認証設定の作成

1.
「APIとサービス」のページにいき、左タブからOAuth同意画面をクリックします。User Typeを外部にして、作成をクリックします。
UserTypeの”内部”は、Google Workspaceユーザーで所属組織があるときのみ選択できるので、個人利用では外部になります。

GCP認証設定の作成

2.
アプリ名とユーザーサポートメールアドレスを適当に入力します。

GCP認証設定の作成

3.
画面下部にいき、デベロッパーの連絡先情報(メールアドレス)を入力し、保存して次へをクリックします。

GCP認証設定の作成

4.
スコープの設定は特に何もしなくてOKです。保存して次へをクリックしてください。

GCP認証設定の作成

5.
テストユーザも設定する必要はありません。そのまま保存して次へをクリックしてください。
これでOAuthのアプリ登録は完了です。

GCP認証設定の作成

6.
次に認証情報を作成します。左タブの「認証情報」をクリックし、「認証情報を作成」→「OAuthクライアントID」をクリックします。

GCP認証設定の作成

7.
名前を適当に入力し、作成します。これで認証情報が作成されます。

GCP認証設定の作成

8.
上記操作の後、認証情報の一覧画面に推移します。OAuth2.0クライアントIDの欄に作成した認証情報が出てくるので、右側のダウンロードボタンからjsonファイルをダウンロードします。

GCP認証設定の作成

9.
最後です。再びOAuth同意画面に移動し、公開ステータスから、「アプリを公開」ボタンをクリックしてください。確認画面が出てくるので、確認して公開してください。

Pythonプログラムの作成

それではダウンロードした認証情報のjsonファイルを利用して、pythonからDrive APIに接続してみましょう。

プログラムは、Googleの公式チュートリアルのプログラムをそのまま利用します。

パッケージのインストール

$ pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

pythonプログラム

サンプルプログラムをそのまま載せています。説明は省略しますが、そこまで難しくないと思います。

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

# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']

def main():
    """Shows basic usage of the Drive v3 API.
    Prints the names and ids of the first 10 files the user has access to.
    """
    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    service = build('drive', 'v3', credentials=creds)

    # Call the Drive v3 API
    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']))

if __name__ == '__main__':
    main()

プログラムの実行

上記のquickstart.pyが置いてあるディレクトリに、上記でダウンロードしたjsonファイルをcredentials.jsonという名前で配置してください。

# credentials.jsonを同じディレクトリに配置
$ ls
quickstart.py  credentials.json

# 初回実行時のみブラウザが立ち上がり、アクセスの確認が行われます。
$ python quickstart.py
Files:
...

GoogleDriveに保存しているファイル名が出力されていれば、成功です。

まとめ

pythonでDrive APIを利用してGoogleDriveに接続する方法を紹介しました。

GCP上での操作や認証周りに関しては、初めてだと手間取りますよね。。。

次回、DriveAPIを利用して画像のダウンロードやアップロードする方法を紹介したいと思います。

2 COMMENTS

Python

[…] 参考情報https://tanuhack.com/library-gspread/https://takake-blog.com/python-driveapi/ […]

現在コメントは受け付けておりません。