この Codelab について
1. Google Workspace API の使用
この Codelab では、Google Workspace(旧 G Suite)の HTTP ベースの RESTful API の使い方を紹介します。ここでは、簡潔性と可用性を高めるために Python を使用していますが、好みの開発言語を選択することもできます。デベロッパー コンソールを使用してプロジェクトを作成/管理する方法、認証情報を取得する方法、API クライアント ライブラリをインストールする方法など、入門的なトピックを取り上げます。形式を確認したら、最初の 100 個のファイルを表示するアプリを作成し、API を使用して Google ドライブ内のフォルダを管理できます。
学習内容
- Google/Cloud Developers Console を使用してプロジェクトを作成する
- 取得とアプリで OAuth2 アプリケーション認証情報を使用する
- Google API クライアント ライブラリの使用方法について学習する
- Google とGoogle Workspace API
- Google Drive API を使用してファイルとフォルダの情報を取得する
必要なもの
- インターネット アクセスとウェブブラウザ
- Google アカウント(Google Workspace アカウントには管理者の承認が必要になる場合があります)
- Linux、Linux、Linux などの POSIX 準拠システムの基本知識Mac OS X
- コードエディタまたはシェルコマンドでソースファイルを作成できること。
- Python(2 または 3)の基本的なスキルがあるが、サポートされている任意の言語を使用できる
- Google ドライブ内の一部のファイルやフォルダ
2. アンケート
この Codelab チュートリアルをどのように使用しますか?
Google Workspace デベロッパー ツールと Google Workspace のAPI、
4. Python 環境について確認する
この Codelab では Python 言語を使用する必要があります(Google API クライアント ライブラリでは多くの言語がサポートされています。そのため、お好みの開発ツールで同等のものを作成して、Python を疑似コードとして使用することもできます)。このコードラボは Python 2 と Python 3 をサポートしていますが、できるだけ早く 3.x に移行することをおすすめします。
Cloud Shell は Cloud コンソールから直接利用できる便利で、ローカルの開発環境を必要としないため、このチュートリアルは、ウェブブラウザを使用してクラウド上で完結できます。Cloud Shell は、現在 GCP のプロダクトとAPIこのコードラボに関しては、すでに両方のバージョンの Python が Cloud Shell にインストールされています。
Cloud Shell には IPython もインストールされています。これは、高水準のインタラクティブな Python インタープリタです。特にデータ サイエンスや ML コミュニティに関与している場合は、この方法をおすすめします。使用している場合、IPython は Jupyter ノートブックおよび Colab(Google Research がホストする Jupyter ノートブック)のデフォルトのインタープリタです。
IPython は最初に Python 3 インタープリタを優先しますが、3.x が利用できない場合は Python 2 にフォールバックします。IPython は Cloud Shell からアクセスできますが、ローカル開発環境にインストールすることもできます。⌘D(Ctrl+D)で終了し、終了を確定させます。ipython
の開始の出力例は次のようになります。
$ ipython Python 3.7.3 (default, Mar 4 2020, 23:11:43) Type 'copyright', 'credits' or 'license' for more information IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
IPython を好まない場合は、標準の Python インタラクティブ インタープリタ(Cloud Shell または独自のローカル開発環境)を使用できます(⌘D で終了します)。
$ python Python 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> $ python3 Python 3.7.3 (default, Mar 10 2020, 02:33:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
このコードラボは、pip
インストール ツール(Python パッケージ マネージャーと依存関係リゾルバ)も所有していることを前提としています。バージョン 2.7.9 以降または 3.4 以降がバンドルされています。古いバージョンの Python をお使いの場合は、こちらのガイドでインストール手順をご確認ください。権限によっては、sudo
またはスーパーユーザー アクセスが必要になる場合がありますが、通常は必要ありません。pip2
または pip3
を明示的に使用して、特定の Python バージョンに対して pip
を実行することもできます。
このコードラボの残りの部分では、Python 3 を使用していることを前提とします。Python 2 が 3.x と大幅に異なる場合は、Python 2 向けの特定の手順を説明します。
*仮想環境を作成して使用する
このセクションはオプションであり、必須となるのは、このコードラボで仮想環境を使用する必要があるユーザー(上記の警告サイドバーのとおり)のみです。パソコンに Python 3 しかない場合、次のコマンドを実行して my_env
という virtualenv を作成できます(必要に応じて別の名前を指定することもできます)。
virtualenv my_env
ただし、パソコンに Python 2 と 3 の両方をインストールしている場合は、次のように -p flag
を使用して Python 3 virtualenv をインストールすることをおすすめします。
virtualenv -p python3 my_env
次のように「有効化」して、新しく作成した virtualenv を入力します。
source my_env/bin/activate
シェル プロンプトの前に環境名が付いていることを確認して、ユーザーが環境内にいることを確認します。
(my_env) $
これで、必要なパッケージを pip install
したり、この環境内でコードを実行したりできます。また、完全にごちゃ混ぜになってしまった場合や、Python インストールが破損した場合などに、システムの他の部分に影響を与えることなく、この環境全体を完全に消去することができます。
5. Python 用 Google API クライアント ライブラリをインストールする
この Codelab では Python 用 Google API クライアント ライブラリを使用する必要があるため、シンプルなインストール プロセスであるか、何もする必要がない可能性があります。
利便性のため、Cloud Shell の使用を検討することをおすすめします。このチュートリアルは、ウェブブラウザを使用して、クラウドで完了できます。Cloud Shell を使用するもう一つの理由は、多くの一般的な開発ツールと必要なライブラリがすでにプリインストールされていることです。
*クライアント ライブラリをインストールする
(省略可)Cloud Shell を使用する場合、またはクライアント ライブラリがインストール済みのローカル環境を使用する場合は、この手順を省略できます。この操作を行う必要があるのは、ローカルで開発する場合で、インストールしていない(またはインストールしたかわからない)場合のみです。最も簡単な方法は、pip
(または pip3
)を使用してインストールを実行する方法です(必要に応じて pip
自体も更新します)。
pip install -U pip google-api-python-client oauth2client
インストールを確認する
このコマンドを実行すると、クライアント ライブラリと依存するすべてのパッケージがインストールされます。Cloud Shell を使用する場合も、独自の環境で使用する場合も、必要なパッケージをインポートしてクライアント ライブラリがインストールされていることを確認し、インポート エラーがない(出力がない)ことを確認します。
python3 -c "import googleapiclient, httplib2, oauth2client"
(Cloud Shell から)Python 2 を使用すると、Python 2 のサポートが非推奨になったことを示す警告が表示されます。
******************************************************************************* Python 2 is deprecated. Upgrade to Python 3 as soon as possible. See https://cloud.google.com/python/docs/python2-sunset To suppress this warning, create an empty ~/.cloudshell/no-python-warning file. The command will automatically proceed in seconds or on any key. *******************************************************************************
この import "test" コマンドをエラーや出力なしで正常に実行できたのであれば、Google API とのやり取りを行うための準備ができています。
概要
この Codelab は入門編であるため、Google API と Google Workspace API を初めて使用する方を対象としています。すでにプロジェクトを作成し、ユーザー認証「OAuth クライアント ID」を作成した経験がある場合は、その場合は、既存のプロジェクトを作成または再利用するか、既存の OAuth クライアント ID を作成するか既存の OAuth クライアント ID を再利用してください。次の 2 つのモジュールをスキップして、「ドライブのファイルと"フォルダ アプリケーション"「devconsole の高度な使用方法」まで進み、手順を確認できます。
6. Cloud コンソールでプロジェクトを指定する
Google API を使用するアプリケーションにはプロジェクトが必要です。これらは Google Cloud Developers Console(単に「devconsole」)で管理されます。この Codelab では Google Drive API のみを使用するため、以下のステップ 1 にあるマジックリンクを使用します。
- Devconsole に移動します。
- 新しいプロジェクトを作成する手順(または既存のプロジェクトを選択する手順)について説明します。
- Drive API を自動的に有効にする
やってみよう!
- console.developers.google.com/start/api?id=drive に移動し、Google アカウントにログインします。
- まだプロジェクトがない場合は、次の画面が表示され、Google API の利用規約に同意するよう求められます。
利用規約に同意すると、「マイ プロジェクト」という名前の新しいプロジェクトが作成されますが作成され、Drive API が自動的に有効になります。3. すでにプロジェクトを作成している場合は(前の Codelab など)、代わりに次の画面が表示されます。
[プロジェクトを作成] プルダウンをクリックすると、既存のプロジェクトを選択するか、新しいプロジェクトを作成します。
選択すると(新規または既存のプロジェクト)、Drive API が自動的に有効になります。4. Drive API が有効になっていることは、次の確認で確認できます:
5.[認証情報に進む] をクリックして次のステップに進みます。
7. *API リクエストを承認する(ユーザーの承認)
ユーザー アカウント承認認証情報をすでに作成していて、プロセスに精通している場合は、このセクションをスキップできます。これは、手法が異なるサービス アカウント承認と異なるため、次に進んでください。
認可の概要(およびいくつかの認証)
API にリクエストを行うには、アプリケーションに適切な認可が必要です。同様の言葉である認証は、ログイン認証情報を表します。こちらの場合は、ログインとパスワードを使用して Google アカウントにログインするときに自分自身を認証します。認証の後の次のステップは、データ(Cloud Storage 上の blob ファイルや Google ドライブ上にあるユーザーの個人ファイルなど)へのアクセス権限がユーザー(コード)に付与されているかどうかです。
Google API では複数のタイプの承認がサポートされていますが、この Codelab のサンプル アプリケーションはエンドユーザーに属するデータにアクセスするため、Google Workspace API ユーザーに最も一般的なのはユーザー認証です。エンドユーザーは、自身のデータにアクセスするための権限をアプリに付与する必要があります。つまり、コードでユーザー アカウント OAuth2 認証情報を取得する必要があります。
ユーザー認証用の OAuth2 認証情報を取得するには、API Manager に戻り、左側のナビゲーションで [認証情報] タブを選択します。
ここでは、3 つの別々のセクションですべての認証情報が表示されます。
1 番目は API キー、2 番目は OAuth 2.0 クライアント ID、最後はOAuth2 サービス アカウントで、ここでは真ん中のものを使用します。
認証情報の作成
認証情報のページで、上部にある [+ 認証情報を作成] ボタンをクリックすると、[OAuth クライアント ID] を選択するためのダイアログが表示されます。
次の画面には、アプリの認可の「同意画面」の構成とアプリケーション タイプの選択の 2 つのアクションが示されています。
同意画面を設定していない場合は、コンソールに警告が表示されるので、すぐに設定する必要があります。(同意画面がすでに設定されている場合は、この手順を省略してください)。
OAuth 同意画面
[同意画面を設定] をクリックします「外部」を選択しますアプリ(または、Google Workspace(旧「Google Workspace」)のお客様の場合は「内部」):
この演習では、コードラボのサンプルを公開しないため、どちらを選択してもかまいません。ほとんどの場合、[外部] を選択して複雑な画面に移動しますが、実際には、上部の「アプリケーション名」フィールドに入力するだけで済みます。
現時点で必要なのはアプリケーション名だけです。実行しているコードラボを反映する人を選択して、[保存] をクリックします。
OAuth クライアント ID(user acct auth)の作成
[認証情報] タブに戻って、OAuth2 クライアント ID を作成します。次のようなさまざまな OAuth クライアント ID を作成できます。
現在、Other というコマンドライン ツールを開発しているので、それを選択して、[作成] ボタンをクリックします。作成するアプリを反映したクライアント ID 名を選択するか、デフォルトの名前(通常は「Other client N」)を使用します。
認証情報の保存
- 新しい認証情報のダイアログが表示されます。[OK] をクリックして閉じます。
- [認証情報] ページに戻り、[OAuth2 クライアント ID] まで下にスクロールします。セクションで、新しく作成したクライアント ID の右下にあるダウンロード アイコン
をクリックします。
- ダイアログが開き、
client_secret-
LONG-HASH-STRING
.apps.googleusercontent.com.json
という名前のファイルが通常であれば [ダウンロード] フォルダに保存されます。client_secret.json
(サンプルアプリが使用する名前)のような簡単な名前に短縮してから、このコードラボでサンプルアプリを作成するディレクトリ / フォルダに保存することをおすすめします。
概要
認証情報を用意したので、アプリから Drive API にアクセスする準備ができました。OAuth クライアント ID の目的は、ユーザーが Google ドライブ内の自分のデータにアクセスするための権限をアプリに付与することです。
注: 「ウィザード」を使わない手動でのプロジェクト作成、API の有効化、認証情報の取得に関する詳細は、この Codelab の終了後にさらに学習するために使用できます。
8. ドライブのファイルとフォルダ アプリケーション
ローカル開発環境または Cloud Shell で、client_id.json
認証情報ファイルと同じディレクトリに drive_list.py
という名前の新しい Python ファイルを作成し、以下のコード行を追加します。
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
アプリケーションの構造
このアプリケーションには主に 3 つのセクションがあります。
- Python のインポートによりライブラリ機能を取り込む
- アプリケーションの認証情報を取得する
- ファイルを取得し、フォルダ名とユーザーの Google ドライブとディスプレイ
注: この Codelab の終了後は、コードをさらに深く掘り下げ、行ごとの説明を確認して、さらに学習を進めることができます。
アプリケーションの実行
このファイルには drive_list.py
などの名前を付けます。スクリプトを初めて実行する場合、(自分の)ドライブ上にあるファイルにアクセスする権限は付与されていません。実行が一時停止されると、出力は次のようになります。
$ python3 ./drive_list.py /usr/local/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Your browser has been opened to visit: https://accounts.google.com/o/oauth2/auth?client_id=LONG-STRING.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
ローカル開発環境から
ブラウザ ウィンドウが開くとコマンドライン スクリプトが一時停止し、OAuth2 の権限ダイアログが表示されます。
ここでは、アプリケーションが(SCOPES
変数を介して)コードでリクエストしている権限をリクエストします。この場合は、ユーザーの Google ドライブにあるファイルのメタデータを表示できます。はい。コードでは、これらの権限スコープは URI として表示されますが、OAuth2 フロー ダイアログ ウィンドウでロケールで指定された言語に翻訳されます。ユーザーはリクエストされた権限に対して明示的な承認を行う必要があります。そうでなければ「実行フロー」が行われます。例外がスローされ、スクリプトは処理を続行しません。
注: ユーザーが複数のブラウザを使用している場合、承認リクエストが推奨ブラウザとしてポップアップされることがあります。使用したくないブラウザ ウィンドウの URL 全体をコピーして、使用したいブラウザのアドレスバーに貼り付けます。
Cloud Shell から
注意を怠って Cloud Shell でプログラムを実行した場合、ブラウザ ウィンドウは開かず、途中で止まったままになります。下部にある診断メッセージはあなた専用のメッセージであり、次のようになっています。
If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
この方法で実行すると、代わりに次の出力が得られます。
$ python3 drive_list.py --noauth_local_webserver /usr/local/lib/python3.7/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code Enter verification code:
手順に沿って、その URL で別のブラウザタブに移動すると、前述のローカル開発環境での説明とほぼ同じ結果が得られます。主な違いは、最後に、Cloud Shell に入力する確認コードがもう 1 つ表示される画面です。
このコードをコピーしてターミナル ウィンドウに貼り付けます。
概要
ユーザーが [許可] をクリックするか、確認コードがプロンプトに貼り付けられると、アプリは引き続き実行されます。そのため、ドライブのファイル / フォルダとその MIME タイプで構成される出力が表示されるはずです。テスト アカウントの例を次に示します。
$ python3 ./drive_list.py Travel expenses application/vnd.google-apps.spreadsheet Gmail Add-ons codelab application/vnd.google-apps.script Google Workspace Developer Intro application/vnd.google-apps.presentation Baseball Sheets application/vnd.google-apps.folder My Resume application/vnd.google-apps.document . . .
連続して実行すると、認可は求められなくなり(認証ライブラリによってキャッシュされているため)、すぐに出力が表示されます。初めてターミナルでドキュメントを見るのが楽しいと思いませんか?そう思う。
9. まとめ
これで、Drive API の機能についてさらに学習したり、他の Google Workspace(Gmail、Google ドキュメント、スプレッドシート、スライド、カレンダー)と他の Google API(マップ、アナリティクス、YouTube など)を試したりできるようになりました。最後までご覧いただきありがとうございました。
この Codelab で紹介するコードは、GitHub リポジトリ(github.com/googlecodelabs/gsuite-apis-intro)でも入手できます。(この Codelab はリポジトリの内容と一致させることを目的としています)。学習を進める準備はできていますか?以下に、この Codelab で取り上げた資料をさらに掘り下げたり、Google のテクノロジーにプログラムでアクセスするその他の方法を探したりするために利用できるさまざまなリソースを示します。
前述したように、通常の Python デベロッパーでない方は、好みの開発言語でこの Codelab の例をやり直すことをおすすめします。サポートされている言語のクライアント ライブラリはこちらから入手できます。
追加の演習
Drive API を身に付けたので、スキルをさらに磨くためにおすすめの演習をいくつかご紹介します。
- ZIP ファイル: 複数の ZIP アーカイブをドライブにバックアップし、その場で解凍するアプリケーションを作成して、各 ZIP ファイル名がそれらのファイルを格納するフォルダの名前になるようにします。追加のクレジット: 他の ZIP ファイル内の再帰的な ZIP アーカイブをサポートするとともに、Google ドライブのフォルダを他のフォルダ内に埋め込むことができます。中止する場合は、こちらの Node.js サンプルアプリをご覧ください。
- フォトアルバム: フォトアルバム生成ツールの冒頭部分を記述します。このツールは複数の画像を Google ドライブにアップロードするもので、タイムスタンプと画像を別々のフォルダに整理することができます。役立ちます追加のクレジット: オープンソースの画像操作ライブラリを見つけ、各フォルダ内のすべての写真を合成し、あなたが経験した可能性のあるイベント(旅行、ディナーなど)を表すことができます。
- GCP を詳しく見る: Google Workspace と Google Cloud Platform(GCP)を接続するアプリを作成します。Google ドライブから Google Cloud Storage(GCS)に画像ファイルをバックアップするツールを作成します。GCS は「クラウド上のファイル ストレージ」です。説明します。もちろん、GCS は高度なクライアント ライブラリを備えているため、ドライブよりも簡単に使用できます。
- 分析とレコード: バックアップした各画像を Google Cloud Vision API に渡して分析し、上位(3、5、10)の「ラベル」を取得することで、ソリューションを 3 に拡張します。API で認識される内容を表します画像ごとに、Cloud Vision の分析と GCS のバックアップの場所を含む行を Google スプレッドシートに書き込みます。中止する場合は、こちらの Python Codelab をご覧ください。
10. 参考情報
ドキュメント
- Google Drive API のドキュメント(REST API、Android ネイティブ SDK/API)
- その他の Google Workspace API に関するドキュメント
- その他の Google API に関するドキュメント
- Google API クライアント ライブラリ
- OAuth2 ドキュメント
関連動画と一般動画
- 新しい Google API プロジェクトの作成(ブログ投稿と動画)
- Python 認証ボイラープレート コードのレビュー(動画)
- Google ドライブのファイルを一覧表示する(動画、ブログ投稿)
- Google Drive API 動画ライブラリ
- Launchpad Online の動画シリーズ(...の前身)
- Google Workspace Dev Show の動画シリーズ
ニュースと最新情報
- Google Workspace デベロッパー ブログ
- Google Workspace デベロッパー Twitter(@GSuiteDevs)
- Google Workspace デベロッパー マンスリー ニュースレター
その他の Codelab
入門
- [Apps Script] Google Apps Script の概要
中級
- [Apps Script] CLASP Apps Script コマンドライン ツール
- [Apps Script] Gmail アドオン
- [Apps Script] ドキュメントのアドオンとGCP Natural Language API
- [Apps Script] ハングアウト Chat bot フレームワーク
- [REST API] カスタム レポート ツール(Sheets API)
- [REST API] GitHub ライセンスの BigQuery アナライザ用のカスタム スライド生成ツール(スライドと BigQuery API)
上級
- [REST API] Cloud の画像処理ワークフロー(ドライブ、Cloud Storage、Cloud Vision、Sheets API)
リファレンス アプリ
- Markdown から Google スライドへのコンバータ(Slides REST API)
11. *アプリケーションの詳細な説明
この任意のセクションは、セッション終了後に自習用に設けられており、不足している部分を補ったり、さらに調査したりするために使用できます。
ライブラリ機能を組み込む Python のインポート
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
- 最初の
import
ステートメントにより、このコードを Python 2 で実行できるようになります。Python 3 のみを使用している場合は、完全に削除できます。 - Python のスタイル ガイドラインの 1 つは、標準ライブラリとサードパーティ モジュールのインポートを分離することです。そのために、空白行を使用します。
- 次の 3 つの import では、必要なクラスと関数が用意されています。これらはすべて、このアプリを記述するうえで必要です。事業内容を簡単に説明します。
googleapiclient
は、Google API への接続に焦点を当てています。httplib2
は、アプリが使用する HTTP クライアントを提供します。oauth2client
は OAuth2 認証情報の管理に役立ちます
承認とアプリケーション認証情報の取得
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
- アプリ
SCOPES
は、アプリを実行するユーザーにアプリが求める権限です。ユーザーデータの安全性を維持するため、権限を付与しないとアプリは実行できません - アプリの動作に必要な最も制限の厳しい権限を使用することをおすすめします。理由
- アプリをインストールまたは実行する際に、アプリが大量の権限セットを要求するのは面倒ではありませんか?その結果、対抗策として、これらのすべての権限をユーザーに付与する必要があります。より制限の厳しいスコープを使用すると、アクセスが少なくなるため、ユーザーはアプリをインストールしやすくなります。
- ほとんどのスコープは長い URL のように見え、ドライブのメタデータ スコープも例外ではありません。
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
- トークンは、アプリが Google サーバーと通信するために必要です。Google から返される有効なトークンは、トークン ストレージ ファイル
storage.json
に保存されます。これらのトークンを保存しない場合は、実行するたびにアプリを再認証する必要があります。
store = file.Storage('storage.json')
- このアプリはまず、ストレージ内に有効な認証情報があるかどうかを確認します(条件
if
文を参照)。
creds = store.get()
if not creds or creds.invalid:
- 認証情報がないか、期限切れになっている場合は、OAuth クライアント ID から新しい認証フローを [
oauth2client.client.flow_from_clientsecrets()
を介して] 構築する必要があります。ダウンロードしたclient_id.json
ファイルにシークレットが含まれています]。
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
- アプリにフローを作成したら、上記で説明したように [
oauth2client.tools.run_flow()
を介して] OAuth2 権限画面をユーザーに表示するために、アプリを実行する必要があります。
creds = tools.run_flow(flow, store)
- [許可] をクリックすると、アプリが Google ドライブのファイル メタデータにアクセスすることに同意し、Google サーバーは API にアクセスするためのトークンを返します。これらは
creds
として返され、storage.json
ファイルのキャッシュに保存されます。 - この時点で、アプリに API 呼び出しを行うための有効な認証情報が用意されました。
googleapiclient.discovery.build()
を呼び出すと、使用する API に対するサービス エンドポイントが作成されます。 build()
を使用するには、API 名('drive'
)と必要なバージョン(現在は'v3'
)。- 最後のパラメータは、暗号化された API 呼び出しに使用する HTTP クライアントです。
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
取得して最初の 100 個のドライブ ファイル/フォルダを表示し、MIMEtypes)
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
- 次のコード行は、Drive API の
files()
コレクションのlist()
メソッドを呼び出してリクエストを作成します。このメソッドはすぐにexecute()
で呼び出されます。Pythondict
が返され、100 ファイルを取得するために'files'
キーを要求します。ユーザーの Google ドライブにあるフォルダ名(ファイル数が少ない場合は名前を省略することもできます)。 - なぜ 100 なのでしょうか?これが
DRIVE.files().list()
のデフォルトです。この数(10 ファイル、1,000 ファイルなど)を変更する場合は、リクエストにpageSize
パラメータを追加します(DRIVE.files().list(pageSize=10)
)。その他のオプションについては、こちらのドキュメントをご覧ください。 - スクリプトの最後の部分では、各ファイルをループして、ファイル名とファイルを表示します。使用されます。
これで、Google REST API を使用する最初のアプリケーションが作成されました。お疲れさまでした。インポートと認証コードを除けば、このスクリプトは実際にはほんの数行のコードです(上記を参照)。ほとんどの Google API も同じように動作し、使用する API ごとにサービス エンドポイントを作成するだけで済みます。
アプリで複数の Google API を使用する
はい。同じアプリで複数の API を使用できます。次に、同じ HTTP クライアントを再利用し、3 つの Google API(はい、3 つの異なる SCOPES
でも可能)のサービス エンドポイントを作成するアプリの Python コード スニペットを示します。
SCOPES = (
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/spreadsheets.readonly',
'https://www.googleapis.com/auth/presentations',
)
. . .
HTTP = creds.authorize(Http())
DRIVE = discovery.build('drive', 'v3', http=HTTP)
SHEETS = discovery.build('sheets', 'v4', http=HTTP)
SLIDES = discovery.build('slides', 'v1', http=HTTP)
このコードは、スプレッドシートのデータ(Sheets API)に基づいて複数のスライド資料(Slides API)を生成し、生成されたスライドごとにコピーされるスライド テンプレート(Drive API)を使用するアプリの一部となると考えられます。このようなアプリは存在しませんが、Google Workspace チームが構成要素として作成した既存の 2 つのサンプルを使用することで、同様のアプリを構築できるはずです。
- テキストの置換とスライド内の画像(ブログ投稿と動画)— Drive API を使用してスライド テンプレート資料をコピーし、そのテキストと画像のプレースホルダ
- スプレッドシート データからスライドを生成する(ブログ投稿と動画)— スプレッドシート(Sheets API)からデータを読み取り、そのデータに基づいてスライドを作成します(Slides API)
チャレンジ: アプリを作成しましょう。
12. *devconsole の高度な使用方法
このオプションのセクションでは、Codelab の上記のウィザードを使用することなく、devconsole でのプロジェクトの作成、API の有効化、認証情報の取得を行う方法について説明します。このガイドは、手動で行うのに十分に対応できる、またはこの方法を学びたい中級ユーザーを対象としています。
Cloud コンソールでプロジェクトを指定する
Google API を使用してアプリケーションを作成する場合は、常にプロジェクトが必要です。既存のプロジェクトを再利用することも、新しいプロジェクトを作成することもできます。これは Cloud コンソールで行われます。一部の Codelab には、設定ウィザードのようなマジックリンクが用意されており、必要な手順の多くをスキップしてすぐに利用できます。ただし、すべてのツールがサポートしているわけではないため、ここではプロジェクトの作成方法について一般的な手順を説明します。
Google 認証情報でログインし、コンソールの上部にプロジェクトのプルダウンが表示されている限り、Cloud コンソールのほとんどの画面からプロジェクトを作成できます。ここのスクリーンショットのほとんどは、API Manager(デベロッパー コンソール)から取得したものです(左側のナビゲーションで [API Manager] をクリックするか、ブラウザで console.developers.google.com を直接設定することで簡単にアクセスできます)。
- まだプロジェクトがない場合は、表示される場合があります。
- [ダッシュボード] ページ:
- [ライブラリ] ページ:
- または完全に空白のページ:
この 3 ページ目が表示された場合は、ブラウザを更新すると [ライブラリ] ページが表示されます。
- [ダッシュボード] ページまたは [ライブラリ] ページを開いているかにかかわらず、ページの上部にあるプロジェクト セレクタ(
)をクリックします。
- 次にセレクタ ダイアログが表示されます。[+] をクリックしてクリックして、新しいプロジェクト
を作成します。
- [+] をクリックすると、[New Project] ページが表示されます。デフォルトでは、すべての一般ユーザー向けアカウントに 12 個のプロジェクトが作成されます。最初のプロジェクトを作成する前に、Google API 利用規約に同意する必要があります:
これで、今後のプロジェクトを作成する際に、メールによる勧誘や利用規約に関する質問は表示されなくなります。
5.過去に少なくとも 1 つのプロジェクトを作成したことがある場合は、ログイン後、最後に作業したプロジェクトのダッシュボードが表示されます。[プロジェクトを選択] > [プロジェクトを選択] と同様に、新しいプロジェクトを作成します。+。6.新しいプロジェクトが作成されたら、[ダッシュボード] ページ(
)に戻ります。
これでプロジェクトが正常に作成されたので、プロジェクトで使用する API を選択して次に進む準備が整いました。
Google API を有効にする
Google API を使用するには、API を有効にする必要があります。以下の例は、Cloud Vision API を有効にするための方法を示しています。このコードラボでは 1 つ以上の API を使用しますが、同様の手順に従って使用前に有効にしてください。
Cloud Shell から
Cloud Shell で、次のコマンドを使用して API を有効にできます。
gcloud services enable vision.googleapis.com
Cloud Console から
API Manager で Vision API を有効にすることもできます。Cloud コンソールで [API Manager] に移動し、[ライブラリ] を選択します。
検索バーに「vision」と入力し、表示される Vision API を選択します。入力すると、次のようになります。
Cloud Vision API を選択して以下のダイアログを取得し、[有効にする] ボタンをクリックします。
料金
多くの Google API は無料でご利用いただけますが、GCP(プロダクトと API)の使用は有料です。(上記のように)Vision API を有効にすると、有効な請求先アカウントの入力を求められる場合があります。有効にする前に、ユーザーが Vision API の料金情報を参照する必要があります。なお、Google Cloud Platform(GCP)の一部のプロダクトでは、「無料枠」上限を超えないようにする必要があります。このコードラボでは、Vision API のそれぞれの呼び出しが、その無料枠分に対してカウントされます。使用量の合計が上限(月ごと)を超えない限り、料金は発生しません。
一部の Google API(例: Google Workspace は月間サブスクリプションで利用されるため、たとえば Gmail、Google ドライブ、カレンダー、ドキュメント、スプレッドシート、スライドの API の使用に対して直接請求されることはありません。Google プロダクトごとに課金方法が異なるため、API ドキュメントで該当する情報を確認してください
概要
この Codelab で必要な操作は Google Drive API をオンにすることだけです。上記の手順で「ドライブ」を検索します。有効にしたら次の手順に進んでください。
API リクエストの承認(ユーザー認証)
認可の概要(およびいくつかの認証)
API にリクエストを行うには、アプリケーションに適切な認可が必要です。同様の言葉である認証は、ログイン認証情報を表します。こちらの場合は、ログインとパスワードを使用して Google アカウントにログインするときに自分自身を認証します。認証の後の次のステップは、データ(Cloud Storage 上の blob ファイルや Google ドライブ上にあるユーザーの個人ファイルなど)へのアクセス権限がユーザー(コード)に付与されているかどうかです。
Google API では複数のタイプの承認がサポートされていますが、この Codelab のサンプル アプリケーションはエンドユーザーに属するデータにアクセスするため、Google Workspace API ユーザーに最も一般的なのはユーザー認証です。エンドユーザーは、自身のデータにアクセスするための権限をアプリに付与する必要があります。つまり、コードでユーザー アカウント OAuth2 認証情報を取得する必要があります。
ユーザー認証用の OAuth2 認証情報を取得するには、API Manager に戻り、左側のナビゲーションで [認証情報] タブを選択します。
ここでは、3 つの別々のセクションですべての認証情報が表示されます。
1 番目は API キー、2 番目は OAuth 2.0 クライアント ID、最後はOAuth2 サービス アカウントで、ここでは真ん中のものを使用します。
認証情報の作成
認証情報のページで、上部にある [+ 認証情報を作成] ボタンをクリックすると、[OAuth クライアント ID] を選択するためのダイアログが表示されます。
次の画面には、アプリの認可の「同意画面」の構成とアプリケーション タイプの選択の 2 つのアクションが示されています。
同意画面を設定していない場合は、コンソールに警告が表示されるので、すぐに設定する必要があります。(同意画面がすでに設定されている場合は、この手順を省略してください)。
OAuth 同意画面
[同意画面を設定] をクリックします「外部」を選択しますアプリ(Google Workspace をご利用の場合は「内部」):
この演習では、コードラボのサンプルを公開しないため、どちらを選択してもかまいません。ほとんどの場合、[外部] を選択して複雑な画面に移動しますが、実際には、上部の「アプリケーション名」フィールドに入力するだけで済みます。
現時点で必要なのはアプリケーション名だけです。実行しているコードラボを反映する人を選択して、[保存] をクリックします。
OAuth クライアント ID(user acct auth)の作成
[認証情報] タブに戻って、OAuth2 クライアント ID を作成します。次のようなさまざまな OAuth クライアント ID を作成できます。
現在、Other というコマンドライン ツールを開発しているので、それを選択して、[作成] ボタンをクリックします。作成するアプリを反映したクライアント ID 名を選択するか、デフォルトの名前(通常は「Other client N」)を使用します。
認証情報の保存
- 新しい認証情報のダイアログが表示されます。[OK] をクリックして閉じます。
- [認証情報] ページに戻り、[OAuth2 クライアント ID] まで下にスクロールします。セクションで、新しく作成したクライアント ID の右下にあるダウンロード アイコン
をクリックします。
- ダイアログが開き、
client_secret-
LONG-HASH-STRING
.apps.googleusercontent.com.json
という名前のファイルが通常であれば [ダウンロード] フォルダに保存されます。client_secret.json
(サンプルアプリが使用する名前)のような簡単な名前に短縮してから、このコードラボでサンプルアプリを作成するディレクトリ / フォルダに保存することをおすすめします。