PythonでDriveAPIを利用してGoogle Driveに接続する方法を紹介します。
Pythonのプログラムはそこまで難しくありません。ただ、Drive APIを有効化するためのGoogle Cloud Platformでの操作が少し厄介なので、画像付きで方法を紹介します。
この記事で紹介する方法は、Google Drive for Developers v3のPython Quickstartを参考にしています。
下記の順番で説明していきます。
- 事前準備
- Google Cloud Platform (GCP)でプロジェクトの作成
- Drive APIの有効化
- 認証情報(credentials)の作成
- 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を利用して画像のダウンロードやアップロードする方法を紹介したいと思います。
[…] プロジェクトの作成:http://takake-blog.com/python-driveapi/#Google_Cloud_PlatformGCP […]
[…] 参考情報https://tanuhack.com/library-gspread/https://takake-blog.com/python-driveapi/ […]