PC

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

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へアクセスしてプロジェクトを作成していきます。

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

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

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

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

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

Drive APIの有効化

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

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

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

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

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

APIの認証情報の作成

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

認証情報について

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

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

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

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

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

認証情報の作成

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

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

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

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

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

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

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

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

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

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を利用して画像のダウンロードやアップロードする方法を紹介したいと思います。

  • この記事を書いた人

たかけの夫。IT系コンサルティング会社に勤務し、主にクラウドや機械学習に関するコンサルティング業務を行う三十路男。IT技術・投資に興味を持ち、家族と楽に人生を楽しみたい人。

-PC
-