最初の 100 個のファイルを表示する &Google ドライブ内のフォルダ

1. Google Workspace API の使用

この Codelab では、Google Workspace(旧称 G Suite)の HTTP ベースの RESTful API の使用について説明します。この例では、簡潔さと可用性を考慮して Python を使用しますが、お好みの開発言語を使用することもできます。デベロッパー コンソールを使用してプロジェクトを作成/管理する方法、認証情報の取得方法、API クライアント ライブラリのインストール方法など、入門的なトピックについて説明します。手続きが完了したら、API を使用して Google ドライブにある最初の 100 個のファイルとフォルダを表示するアプリを作成します。

学習内容

  • Google/Cloud Developers Console を使用してプロジェクトを作成する
  • アプリで OAuth2 アプリケーション認証情報を取得して使用する
  • Google APIs クライアント ライブラリの使用について学習する
  • Google API と Google Workspace API を使用してアプリケーションを作成する
  • Google Drive API を使用してファイルとフォルダの情報を取得する

必要なもの

  • インターネット アクセスとウェブブラウザ
  • Google アカウント(Google Workspace アカウントの場合、管理者の承認が必要となる可能性があります)
  • Linux や Mac OS X などの POSIX 準拠システムに精通している
  • コードエディタまたはシェル コマンドを使用してソースファイルを作成する機能。
  • Python 2 または 3 の基本的なスキル(サポートされている任意の言語を使用することもできます)
  • Google ドライブ内のファイルやフォルダの一部

2. アンケート

この Codelab チュートリアルをどのように使用しますか?

通読するのみ 通読し、演習を行う

Google Workspace デベロッパー ツールと API のご利用経験について、いずれに該当されますか?

初心者 中級者 上級者

3. 概要

この Codelab では、以下の方法について学習します。

  1. Python 用 Google API クライアント ライブラリをダウンロードする
  2. Google/Cloud Developers Console で新しいプロジェクトを作成する
  3. アプリに必要な認証情報を取得する
  4. これらの認証情報を使用して Google Drive API にアクセスする

Python を使用しない場合は、使い慣れた開発ツールでコードラボを実装してください(サポートされている言語のクライアント ライブラリはこちらで入手できます)。Python の例は(実行可能な)疑似コードとして参照してください。

4. Python 環境について確認する

このコードラボでは、Python 言語を使用する必要があります(Google API クライアント ライブラリでは多くの言語がサポートされているため、使い慣れた開発ツールで同等の機能を作成して、Python を疑似コードとして使用することもできます)。このコードラボは Python 2 と Python 3 をサポートしていますが、できるだけ早く 3.x に移行することをおすすめします。

Cloud Shell は、Cloud Console から直接利用できる便利なツールです。ローカル開発環境を必要としないため、ウェブブラウザを使用して、クラウドでこのチュートリアルを完了できます。Cloud Shell は、GCP のプロダクトと API で開発を行う場合、または今後開発を行う場合に特に便利です。このコードラボに関しては、すでに両方のバージョンの Python が Cloud Shell にインストールされています。

また、Cloud Shell には IPython もインストールされています。これは、特にデータサイエンスや機械学習のコミュニティに参加しているユーザーにおすすめできる、高レベルのインタラクティブな Python インタープリタです。該当する場合は、IPython が Jupyter ノートブックおよび Google Research がホストする Jupyter ノートブック、Colab のデフォルト インタープリタになります。

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 クライアント ライブラリをインストールする

このコードラボには Python 用 Google API クライアント ライブラリが必要です。そのために、簡単なインストール プロセスを実行する必要がある場合がありますが、何もしなくても良い場合もあります。

便宜上、Cloud Shell の使用を検討することはすでに説明しました。このチュートリアルは、ウェブブラウザを使用して、クラウドで完了できます。Cloud Shell を使用するもう 1 つの理由は、多くの一般的な開発ツールと必要なライブラリがすでにプリインストールされているためです。

*クライアント ライブラリをインストールする

(省略可)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 つのモジュールをスキップし、「ドライブのファイルとフォルダのアプリケーションを表示する」に直接進むか、「デベロッパー コンソールの高度な使用方法」までスキップして、手順を簡単に確認してください。

6. Cloud コンソールでプロジェクトを指定する

Google API を使用するアプリケーションにはプロジェクトが必要です。これらは Google Cloud Developers Console(「devconsole」)で管理されます。この Codelab では Google Drive API のみを使用するため、次の処理を行うマジックリンク(ステップ 1 で後述)があります。

  • devconsole に移動します
  • 新しいプロジェクトの作成(または既存のプロジェクトの選択)の手順を説明します。
  • Drive API を自動的に有効にする

さあ、始めましょう。

  1. console.developers.google.com/start/api?id=drive に移動し、Google アカウントにログインします。
  2. まだプロジェクトがない場合は、次の画面が表示され、Google API 利用規約に同意するよう求められます。

e3b2076ba58a7cd7.png 利用規約に同意すると、「My Project」という名前の新しいプロジェクトが作成され、Drive API が自動的に有効になります。3. すでにプロジェクトを作成している場合(以前の Codelab など)は、代わりに次の画面が表示されます。50b3b8ace6721f1f.png [プロジェクトを作成] プルダウンをクリックして、既存のプロジェクトを選択するか、新しいプロジェクトを作成します。69db3867445ad9e5.png 選択(新規または既存のプロジェクト)を行うと、Drive API が自動的に有効になります。4. 次の確認メッセージが表示されたら、ドライブ API が有効になっています。365e7de1377493bb.png 5. [認証情報に進む] をクリックして、次のステップに進みます。

7. *API リクエストを承認する(ユーザーの承認)

ユーザー アカウント承認認証情報をすでに作成していて、プロセスに精通している場合は、このセクションをスキップできます。これは、手法が異なるサービス アカウント承認と異なるため、次に進んでください。

認可の概要(およびいくつかの認証)

API にリクエストを行うには、アプリケーションに適切な認可が必要です。同様の言葉である認証は、ログイン認証情報を表します。こちらの場合は、ログインとパスワードを使用して Google アカウントにログインするときに自分自身を認証します。認証の後の次のステップは、データ(Cloud Storage 上の blob ファイルや Google ドライブ上にあるユーザーの個人ファイルなど)へのアクセス権限がユーザー(コード)に付与されているかどうかです。

Google API はいくつかの認可の種類をサポートしていますが、このコードラボのサンプル アプリケーションはエンドユーザーに属するデータにアクセスするため、Google Workspace API ユーザーが最もよく使用する認可はユーザー認可です。エンドユーザーは、自身のデータにアクセスするための権限をアプリに付与する必要があります。つまり、コードでユーザー アカウント OAuth2 認証情報を取得する必要があります。

ユーザー認証用の OAuth2 認証情報を取得するには、API Manager に戻り、左側のナビゲーションで [認証情報] タブを選択します。

Y33PZ_rJC1y7NH7Rrvq1kN_WxZ9CppDGJK8tTSaha298Jlm5pMqgnyweIO4oX34fcLy0_VI4gihYu5wpEM_LeJg1iDAFoidhUVyfqJX3QTzODQ_OGjHLXYBxPpUvihCJi9JGwvMREw

ここでは、3 つの別々のセクションですべての認証情報が表示されます。

ComE4qh76dwZbIehkDUm1QawHGia_qVe7w7rkmgbeo_wjWS--kqXCt4_zvm55iy_RXA8dKYKvBxIKazkcYQ8871SA_kNslbvum_n1Ju4k9qJJSMtDhPAnofcvIlqlKm1nu7PBQhmEg

1 番目は API キー、2 番目は OAuth 2.0 クライアント ID、最後はOAuth2 サービス アカウントで、ここでは真ん中のものを使用します。

認証情報の作成

認証情報のページで、上部にある [+ 認証情報を作成] ボタンをクリックすると、[OAuth クライアント ID] を選択するためのダイアログが表示されます。

C7jTddfrczo3GewPGCxbxX13GawtFc6FGvAPFusPc_IW-tr5M6xgXd1OzOHOUTo86WDa9fXiCITogv9b3wAgOcYM7xS3AmVNaPdTxbAynIe_sia2_x3LEPsBrdbX8NjeI2WaHRioOA

次の画面には、アプリの認可の「同意画面」の構成とアプリケーション タイプの選択の 2 つのアクションが示されています。

El9_aqPQ6Q9hOsOp3JUC5qnCm_A_BVI-oCEfPk_MsvybnWBmC5lT6CtXSoZ7EQoFzrcBEzo4zF9s8CbhXyo0e-eSY3pZ1zg0BRvT0YssMMhbzEG-gP_jiO8v9q9HYTjg-QW5jJ0RDA

同意画面を設定していない場合は、コンソールに警告が表示されるので、すぐに設定する必要があります。(同意画面がすでに設定されている場合は、この手順を省略してください)。

[同意画面の構成] をクリックして、[外部] アプリ(Google Workspace [旧称「Google Workspace」] をご利用の場合は [内部])を選択します。

5w-9R6gPvUHFzODZxXy-0GEhL8ZGDGNea3QtMp1FFYDv5DJ_MIDD21NEh3CzI-GKNzy6bkhH7bohxOG8icQTegiWlavOQhQqhSy7K31Ma3YTI9aAP3P-LmTBanPslX1cnjKLVZBi8A

この演習では、コードラボのサンプルを公開しないため、どちらを選択してもかまいません。ほとんどの場合、[外部] を選択して複雑な画面に移動しますが、実際には、上部の「アプリケーション名」フィールドに入力するだけで済みます。

8e9z_RQz8lumYbDIcBvm57_Gpptn9uhrVQHoRzJ01AJNOFmXloDO7Eg3hhzJZZIU2F5rR0MxTCw-oXVFCq683xUwD4O33pXeuFsOMtM8EZhyjDoYc8Kv4hEoaG0Ztq9ePx6De7YmfA

現時点で必要なのはアプリケーション名だけです。実行しているコードラボを反映する人を選択して、[保存] をクリックします。

OAuth クライアント ID(user acct auth)の作成

[認証情報] タブに戻って、OAuth2 クライアント ID を作成します。次のようなさまざまな OAuth クライアント ID を作成できます。

f8reuhsxOUNLcVrEIyRVsmP_fX_ceIlLvEKql1YHwSPW9jk9Mm9fJ0UlfUoi8eRN3QQXar4xtpo071zj6LSczNN7TYY8zB96Dn6ICZuvCAtjIgJSKdMSlX-ZhMuSWFpxxv661aUemw

現在、Other というコマンドライン ツールを開発しているので、それを選択して、[作成] ボタンをクリックします。作成するアプリを反映したクライアント ID 名を選択するか、デフォルトの名前(通常は「Other client N」)を使用します。

認証情報の保存

  1. 新しい認証情報のダイアログが表示されます。[OK] をクリックして閉じます。

rAwekj_GNEuVwGbZOYYlGDQjlu4flE61OPEZIUmwMI5vGi3W365UwVCxi0mVNhg4WZSSczZywrZZ6NDM_U0FJ4b-TOIMEC189uybOJjgn8F_axesVMopel9RlehRBXdEFhN4d41WGQ

  1. [認証情報] ページに戻り、[OAuth2 クライアント ID] セクションまでスクロールして、新しく作成したクライアント ID の右下にあるダウンロード アイコン aAmje6kT_xSUM4BKIlPREpjosx7C_xxwpWqBgiGVfVWxQ8nnQOfxTPhuU0QwSnmbjykZffGrqyP1nnKrEQ7D7OqYaGw_Uzscs9gX2RwwP4AmvtHIiTFLa0gkprzJSjG9pQSx7HtmSQ をクリックします。x-vb-sKZy-X8a1X4uTsBWotSd4wn0PGt4mHMNv6DUrq5J5ihpujUyTiIVr5SHw0p2ZDy0KTP-zqOaFX-Az9BYDWG90KNFmsRLTUOo1mUVk7dYRJiK3VwYJNU0bbxjsbbpqcTr5_oLw
  2. ダイアログが開き、client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json という名前のファイルが通常であれば [ダウンロード] フォルダに保存されます。client_secret.json(サンプルアプリが使用する名前)のような簡単な名前に短縮してから、このコードラボでサンプルアプリを作成するディレクトリ / フォルダに保存することをおすすめします。

概要

認証情報を取得したら、アプリから Drive API にアクセスする準備が整いました。OAuth クライアント ID の目的は、ユーザーが Google ドライブのデータにアクセスする権限をアプリに付与することです。

NOTE: プロジェクトの作成、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 つのセクションがあります。

  1. ライブラリの機能を取り込むための Python インポート
  2. アプリケーションの認証情報の取得
  3. ユーザーの Google ドライブ内のファイル名、フォルダ名、MIME タイプを取得して表示する

NOTE: この 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 権限ダイアログが表示されると、コマンドライン スクリプトが一時停止されます。

c2648f37bcb7a0c1.png

ここで、アプリケーションはコードがリクエストしている権限(SCOPES 変数経由)をユーザーに要求します。この場合、これはユーザーの Google ドライブからファイル メタデータを表示する機能です。はい。コードでは、これらの権限スコープは URI として表示されますが、OAuth2 フローのダイアログ ウィンドウでロケールによって指定された言語に翻訳されます。ユーザーは、リクエストされた権限に対して明示的な認可を与える必要があります。そうしないと、コードの「run flow」部分で例外がスローされ、スクリプトはそれ以上続行されません。

NOTE: 複数のブラウザを使用しているユーザーもいます。承認リクエストが優先ブラウザ以外のブラウザでポップアップ表示されることがあります。その場合は、使用したくないブラウザ ウィンドウから 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 つ表示されることです。

f6da2c335fb7c6a.png

このコードを切り取ってターミナル ウィンドウに貼り付けます。

概要

ユーザーが [許可] をクリックするか、プロンプトに確認コードを貼り付けると、アプリが(引き続き)実行されるため、ドライブのファイル / フォルダとその 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
  . . .

連続して実行すると、認可を求めるプロンプトが表示されなくなり(認証ライブラリによってキャッシュに保存されているため)、出力に直接進むようになります。ターミナルでドキュメントを初めて表示するのは、わくわくする体験です。Google もそう確信しています。

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 の経験を積んだら、スキルをさらに高めるために次の演習を行うことをおすすめします。

  1. ZIP ファイル: 複数の ZIP アーカイブをドライブにバックアップするアプリケーションを作成します。このアプリケーションは、ZIP ファイルをその場で解凍し、各 ZIP ファイル名が、そのファイルが格納されるフォルダの名前になるようにします。追加のクレジット: 他のフォルダ内に埋め込まれたドライブ フォルダを含む、他の ZIP ファイル内の再帰的な ZIP アーカイブをサポートします。うまくいかない場合は、この Node.js サンプルアプリをご覧ください。
  2. フォトアルバム: 複数の画像を Google ドライブにアップロードし、タイムスタンプと位置情報で別々のフォルダに整理するフォトアルバム生成ツールの冒頭部分を作成します。追加課題: オープンソースの画像操作ライブラリを見つけて、各フォルダ内のすべての写真をステッチし、体験したイベント(旅行、食事など)を表します。
  3. GCP を使ってみる: Google Workspace と Google Cloud Platform(GCP)を接続するアプリを作成します。Google ドライブから Google Cloud Storage(GCS)という別の「クラウド ファイル ストレージ」ソリューションに画像ファイルをバックアップするツールを作成します。高度なクライアント ライブラリのおかげで、GCS の方が Google ドライブよりもシンプルに使用できます。
  4. 分析と記録: Google Cloud Vision API に渡して、API が画像内で認識した上位(3、5、10)の「ラベル」を取得することで、バックアップされた各画像を分析し、ソリューションを #3 に拡張します。各画像について、Cloud Vision の分析と GCS のバックアップの場所を含む行を Google スプレッドシートに書き込みます。行き詰まった場合は、こちらの Python Codelab をご覧ください。

10. 参考情報

ドキュメント

ニュースと最新情報

その他の Codelab

入門

中級

高度

リファレンス アプリ

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 つのインポートは、Google API クライアント ライブラリから必要なクラスと関数を取り込みます。これらはすべて、このアプリを作成するために必要です。簡単に説明すると、次のようになります。
  • 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:
  • 認証情報がない場合や有効期限が切れている場合は、ダウンロードした client_id.json ファイルの OAuth クライアント ID とシークレットから、新しい認可フローを [oauth2client.client.flow_from_clientsecrets() 経由で] 構築する必要があります。
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 個のドライブ ファイル/フォルダと MIME タイプを取得して表示します)

files = DRIVE.files().list().execute().get('files', [])
for f in files:
    print(f['name'], f['mimeType'])
  • 次のコード行は、Drive API の files() コレクションで list() メソッドを呼び出してリクエストを構築し、execute() で直ちに呼び出します。Python の dict が返されます。そこから 'files' キーをリクエストして、ユーザーの Google ドライブから 100 個のファイルとフォルダの名前を取得します(ファイル数が少ない場合はそれ以下)。
  • なぜ 100 なのでしょうか?これは DRIVE.files().list() のデフォルトです。この数を変更する場合(たとえば、10 個のファイルまたは 1,000 個のファイルのみにする場合)は、リクエストに pageSize パラメータ(DRIVE.files().list(pageSize=10))を追加します。その他のオプションについては、ドキュメントをご覧ください。
  • スクリプトの最後の部分では、各ファイルがループ処理され、名前とファイル MIME タイプが表示されます。

これで、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 を使用してスライド テンプレート デッキをコピーし、Slides API を使用してテキストと画像のプレースホルダを変更します。
  • スプレッドシートのデータからスライドを生成する(ブログ投稿と動画) - スプレッドシート(Sheets API)からデータを読み取り、そのデータに基づいてスライド(Slides API)を作成します。

課題: このアプリを構築してください。

12. *高度な devconsole の使用

この省略可能なセクションでは、Codelab の上記のようにウィザードを使用せずに、devconsole でプロジェクトを作成し、API を有効にして、認証情報を取得する方法について説明します。これは、手動で実行できるほど十分に慣れている中級ユーザーや、手動で実行する方法を学びたいユーザー向けです。

Cloud コンソールでプロジェクトを指定する

Google API を使用してアプリケーションを作成する場合は、プロジェクトが必要です。既存のプロジェクトを再利用することも、新しいプロジェクトを作成することもできます。これは Cloud コンソールで行います。一部の Codelab には、必要な手順の多くをスキップしてすぐに開始できるマジックリンク(設定ウィザードなど)が用意されています。ただし、すべてのプロジェクトでこの手順が適用されるわけではありません。この手順は、プロジェクトの作成方法に関する一般的な手順としてご利用ください。

Google 認証情報でログインし、コンソールの最上部にプロジェクトのプルダウンが表示されていれば、Cloud コンソールのほとんどの画面からプロジェクトを作成できます。なお、ここにあるほとんどのスクリーンショットは API Manager(デベロッパー コンソールとも呼ばれます)から取得したものです。API Manager には、左側のナビゲーションで [API Manager] をクリックするか、ブラウザで console.developers.google.com に直接アクセスすることで簡単にアクセスできます。

  1. まだプロジェクトがない場合は、次の画面が表示されることがあります。
  2. [ダッシュボード] ページ: Gwkk2zcSPOHlRzCGsmBDqfdsEMopOgJyJzh6TunpVFOP3R7bN0-iGt81mNueGxoAei6wCqgQBENsamw3v4ozZJtQgKva6v_90dYJ-rvQjUn9U89avlG1tepDYT9HHjZmYixLD0hACQ
  3. [ライブラリ] ページ: NqfejNuo6fJfiTXERiCNAFTnno1JGgudf7M2zVyM9DzXP4E6ruoVxHvFQOPW-HFL5SZvm-WohzPTf7njBS9VCwuu4XnwhQ7CB83tNkH0jsYEx31hO6UMBVHPJS1BMjidg5kh-c7MEw
  4. または完全に空白のページ: LcJ-wgOFlYa9uZm46fwUkfFTkXIcbhuk607KDaCz8_8NM09RHblz6T5JoWhH7uwSE2q6hKW9XnlutzUqd8yvRAEXFzQjqNNTuscj19yKGkMjbPixeUB8-F1y4Tz7eCpeOEzBUw70yw この 3 つ目のケースが発生した場合は、ブラウザを更新して [ライブラリ] ページに移動してください。
  5. [ダッシュボード] ページまたは [ライブラリ] ページで、ページの上部にあるプロジェクト セレクタ 3f5REVgveKDcJ8wG2C9gduFBftJb6RNtdQQJ79vwFmQCMU8_t_vxja8jPGIK-ZrpjSqGkRkY4k02xth-7FWNPj4GZUdcBmKQe97LporGaLvwIFzzR5wtH5mEEoA1a74_fnrh9YAqqg をクリックします。
  6. 次に、セレクタ ダイアログが表示されます。右側の [+] をクリックして、新しいプロジェクトを作成します。jNzs1bp1eWkpJT3S3AGTm9ejYT2mB3rEd1QajOhO0AR3YxcwaCcF4WlMzdmgOFtlIPQfGEMUysM6m7r89_Fc0Dyy--mjPhCEKdLRZjaozLOvoZOzKtIxdMoWFHCVc2N1K-2HES_k4Q
  7. [+] をクリックすると、[新しいプロジェクト] ページが表示されます。一般ユーザー アカウントには、デフォルトで 12 個のプロジェクトが割り当てられます。最初のプロジェクトを作成する前に、Google API 利用規約に同意する必要があります。bCB0sQ6k5nfrajlhc-S61MVzyYYBqu6XVNKeRDzXNvKZUNlSeVJSLbkP8sPNi5A-5hWIFzhsQ5R_ER9BBb2bE_B02c1neY2iO5SSe6XDFldppsXbkWm63-0l3ugtSDQS-TeM1d773w

この設定を行うと、今後のプロジェクトの作成時に、メールの勧誘と利用規約に関する質問が表示されなくなります。

Pj31ZKoAAnw_JiSz8io7e4yC2Xh3voETusvePf0DS64IMB4aVy9CtANg2r-2NgPxLjbqcfd-Vs33ZNdN7Diz7sZo3j-MKS83SuNXlhGT8ivdhpIvizP1dsYeK1MBQ4HlDZA5aQkIhg 5. 過去に 1 つ以上のプロジェクトを作成したことがある場合は、ログイン後に最後に作業したプロジェクトのダッシュボードが表示されます。そこから、[プロジェクトを選択] > [+] を選択して、新しいプロジェクトを作成します。6. 新しいプロジェクトが作成されると、[ダッシュボード] ページに戻ります。ana4q1H1Q8KNTBEVb62Cc6NVA8VZbxb6BLgf4-bLqLV-p7n8UWv3WW3FN-49CE0x1kARav3pelxOBwNuUDELmitMRFhUNXuaw9-CH9DO3Lek_ifnaI3ZsxSy67Z1UsBO95SPFqlf8Q

これでプロジェクトが正常に作成されました。プロジェクトで使用する 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 Console から API Manager に移動し、[ライブラリ] を選択します。

mg03by3QV6kco0rVVV_8IA6VobAoMG4Yoyl-PofNM0dHK8IcoDmpoLUwWeiKFFjpxHWlS1td5-0n7kNkfqHVhSsTSW_hUMvRu3D72g3LCFb7u4v4bla_Z4XyonTVK8PpigMLJcE01g

検索バーに「vision」と入力し、表示される Vision API を選択します。入力すると、次のようになります。

B6fWWsVhymufgQx6oGIq4sgukK6JQ1VoguVOrSNf_anQb6Cv6RTLtsjx5Qdeu3-uO8-8PyqwZLYdDDjYW5o56R47cnsd_88RKTMqNkpFeDESW2hmBM_7FK2UAMz1_216yXERYSp_JA

Cloud Vision API を選択して以下のダイアログを取得し、[有効にする] ボタンをクリックします。

D-MONPLi0UWH6Dp607Dod6JF-LJQZIiUQEPQNKM4Y0mSt09KfipbeeXRAE6cokArBYTfL9VQoONc4L0jlnsUYLsNytQIPfSKr9lCDrXmrrx-1w64LeWWa-byDxcyYWZdCI0mAcVzBw

料金

多くの Google API は無料でご利用いただけますが、GCP(プロダクトと API)の使用は有料です。(上記のように)Vision API を有効にすると、有効な請求先アカウントの入力を求められる場合があります。有効にする前に、Vision API の料金情報を確認してください。一部の Google Cloud Platform(GCP)プロダクトには、超過した場合のみに料金が発生する Always Free 枠が用意されています。このコードラボでは、Vision API のそれぞれの呼び出しが、その無料枠分に対してカウントされます。使用量の合計が上限(月ごと)を超えない限り、料金は発生しません。

一部の Google API(例: Google Workspace)は、月単位のサブスクリプションで利用されるため、Gmail、Google ドライブ、カレンダー、ドキュメント、スプレッドシート、スライドの API などの使用に伴う直接的な料金が発生することはありません。Google プロダクトごとに課金方法が異なるため、API ドキュメントで該当する情報を確認してください

概要

この Codelab では Google Drive API を有効にするだけでよいので、上記の手順に沿って「Drive」を検索します。有効にしたら、先に進みます。

API リクエストを承認する(ユーザーの承認)

認可の概要(およびいくつかの認証)

API にリクエストを行うには、アプリケーションに適切な認可が必要です。同様の言葉である認証は、ログイン認証情報を表します。こちらの場合は、ログインとパスワードを使用して Google アカウントにログインするときに自分自身を認証します。認証の後の次のステップは、データ(Cloud Storage 上の blob ファイルや Google ドライブ上にあるユーザーの個人ファイルなど)へのアクセス権限がユーザー(コード)に付与されているかどうかです。

Google API はいくつかの認可の種類をサポートしていますが、このコードラボのサンプル アプリケーションはエンドユーザーに属するデータにアクセスするため、Google Workspace API ユーザーが最もよく使用する認可はユーザー認可です。エンドユーザーは、自身のデータにアクセスするための権限をアプリに付与する必要があります。つまり、コードでユーザー アカウント OAuth2 認証情報を取得する必要があります。

ユーザー認証用の OAuth2 認証情報を取得するには、API Manager に戻り、左側のナビゲーションで [認証情報] タブを選択します。

Y33PZ_rJC1y7NH7Rrvq1kN_WxZ9CppDGJK8tTSaha298Jlm5pMqgnyweIO4oX34fcLy0_VI4gihYu5wpEM_LeJg1iDAFoidhUVyfqJX3QTzODQ_OGjHLXYBxPpUvihCJi9JGwvMREw

ここでは、3 つの別々のセクションですべての認証情報が表示されます。

ComE4qh76dwZbIehkDUm1QawHGia_qVe7w7rkmgbeo_wjWS--kqXCt4_zvm55iy_RXA8dKYKvBxIKazkcYQ8871SA_kNslbvum_n1Ju4k9qJJSMtDhPAnofcvIlqlKm1nu7PBQhmEg

1 番目は API キー、2 番目は OAuth 2.0 クライアント ID、最後はOAuth2 サービス アカウントで、ここでは真ん中のものを使用します。

認証情報の作成

認証情報のページで、上部にある [+ 認証情報を作成] ボタンをクリックすると、[OAuth クライアント ID] を選択するためのダイアログが表示されます。

C7jTddfrczo3GewPGCxbxX13GawtFc6FGvAPFusPc_IW-tr5M6xgXd1OzOHOUTo86WDa9fXiCITogv9b3wAgOcYM7xS3AmVNaPdTxbAynIe_sia2_x3LEPsBrdbX8NjeI2WaHRioOA

次の画面には、アプリの認可の「同意画面」の構成とアプリケーション タイプの選択の 2 つのアクションが示されています。

El9_aqPQ6Q9hOsOp3JUC5qnCm_A_BVI-oCEfPk_MsvybnWBmC5lT6CtXSoZ7EQoFzrcBEzo4zF9s8CbhXyo0e-eSY3pZ1zg0BRvT0YssMMhbzEG-gP_jiO8v9q9HYTjg-QW5jJ0RDA

同意画面を設定していない場合は、コンソールに警告が表示されるので、すぐに設定する必要があります。(同意画面がすでに設定されている場合は、この手順を省略してください)。

[同意画面の構成] をクリックして、[外部] アプリ(Google Workspace をご利用の場合は [内部])を選択します。

5w-9R6gPvUHFzODZxXy-0GEhL8ZGDGNea3QtMp1FFYDv5DJ_MIDD21NEh3CzI-GKNzy6bkhH7bohxOG8icQTegiWlavOQhQqhSy7K31Ma3YTI9aAP3P-LmTBanPslX1cnjKLVZBi8A

この演習では、コードラボのサンプルを公開しないため、どちらを選択してもかまいません。ほとんどの場合、[外部] を選択して複雑な画面に移動しますが、実際には、上部の「アプリケーション名」フィールドに入力するだけで済みます。

8e9z_RQz8lumYbDIcBvm57_Gpptn9uhrVQHoRzJ01AJNOFmXloDO7Eg3hhzJZZIU2F5rR0MxTCw-oXVFCq683xUwD4O33pXeuFsOMtM8EZhyjDoYc8Kv4hEoaG0Ztq9ePx6De7YmfA

現時点で必要なのはアプリケーション名だけです。実行しているコードラボを反映する人を選択して、[保存] をクリックします。

OAuth クライアント ID(user acct auth)の作成

[認証情報] タブに戻って、OAuth2 クライアント ID を作成します。次のようなさまざまな OAuth クライアント ID を作成できます。

f8reuhsxOUNLcVrEIyRVsmP_fX_ceIlLvEKql1YHwSPW9jk9Mm9fJ0UlfUoi8eRN3QQXar4xtpo071zj6LSczNN7TYY8zB96Dn6ICZuvCAtjIgJSKdMSlX-ZhMuSWFpxxv661aUemw

現在、Other というコマンドライン ツールを開発しているので、それを選択して、[作成] ボタンをクリックします。作成するアプリを反映したクライアント ID 名を選択するか、デフォルトの名前(通常は「Other client N」)を使用します。

認証情報の保存

  1. 新しい認証情報のダイアログが表示されます。[OK] をクリックして閉じます。

rAwekj_GNEuVwGbZOYYlGDQjlu4flE61OPEZIUmwMI5vGi3W365UwVCxi0mVNhg4WZSSczZywrZZ6NDM_U0FJ4b-TOIMEC189uybOJjgn8F_axesVMopel9RlehRBXdEFhN4d41WGQ

  1. [認証情報] ページに戻り、[OAuth2 クライアント ID] セクションまでスクロールして、新しく作成したクライアント ID の右下にあるダウンロード アイコン aAmje6kT_xSUM4BKIlPREpjosx7C_xxwpWqBgiGVfVWxQ8nnQOfxTPhuU0QwSnmbjykZffGrqyP1nnKrEQ7D7OqYaGw_Uzscs9gX2RwwP4AmvtHIiTFLa0gkprzJSjG9pQSx7HtmSQ をクリックします。x-vb-sKZy-X8a1X4uTsBWotSd4wn0PGt4mHMNv6DUrq5J5ihpujUyTiIVr5SHw0p2ZDy0KTP-zqOaFX-Az9BYDWG90KNFmsRLTUOo1mUVk7dYRJiK3VwYJNU0bbxjsbbpqcTr5_oLw
  2. ダイアログが開き、client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json という名前のファイルが通常であれば [ダウンロード] フォルダに保存されます。client_secret.json(サンプルアプリが使用する名前)のような簡単な名前に短縮してから、このコードラボでサンプルアプリを作成するディレクトリ / フォルダに保存することをおすすめします。