Google APIライブラリを使用する

2018-12-02

旧ブログ

t f B! P L
アプリでGoogleのAPIを利用するにはGoogle Cloud PlatformでClientIDとClientSecretを取得しないといけません。ClientIDとClientSecretによって、そのアプリによるAPIの利用状況が把握され、利用制限や課金がされています。

Google APIライブラリとは


API ライブラリ - Google Cloud Platform

Googleアカウントでログインしてこのページを見るとGoogle APIの一覧をここで検索できます。

今回はGoogleフォトをアプリで操作したいので、Photoで検索します。


Photos Library APIがでてくるのでこれをクリックします。

課金されるAPI Libraryはチュートリアルとドキュメントの項目のLearn moreリンクの下にPricingへのリンクが表示されていますが、Photos Library APIはこの記事を書いている時点ではPricingへのリンクがないので、課金される条件はまだないようです。

Learn moreをクリックするとGoogle Photos APIs  |  Google Developersが開きます。

上の横並びのメニューの中からガイドをクリックして開くページの左のメニューのUsing the Library APIの下にあるLimits and quatasに利用制限の条件が書いてあります。

それによる1プロジェクトあたり(つまりClientIDとClientSecretで特定されるプロジェクト)によるリクエストは1日10,000回までになっていて、データ転送量による制限はないそうです。

この制限を超えるとエラーコード429がでてきます。

「リクエスト」というのは、何を指すのかを書いてあるところは今のところ見つけていませんが、HTTPでの呼び出しのことかと思います。

Photos Library APIで1ファイルをアップロードするには1時間に1回リフレッシュトークンの取得に1リクエスト、ファイルをアップロードするのに1リクエスト、Googleフォトに登録するのに1リクエスト、なので3リクエスト消費することになります。

アルバム作成などしないとすると、24時間にわたってアップロードする場合、リフレッシュトークンの取得に1日24回消費して、残り9976回なので、1日4988枚のファイルをアップロードできることになります。

だけど、Google APIでアップロードした画像ファイルはGoogleアカウントの容量を消費するのっで15GBまでしかアップロードできないので、4988枚のファイルの1ファイルの容量はだいたい3MB以下にしないといけません。

静止画像の場合はGoogleフォトにログインして「容量を解放」すれば圧縮が終わると、圧縮された画像分の容量を空けることができますが、いまのところAPIでは容量を解放できないようです。

ClientIDとClientSecretを取得する


GoogleアカウントにログインしてGoogle Cloud Platformのページに移動します。

ログインするGoogleアカウントはGoogle APIを利用するプロジェクトを登録するためのものなので、Googleフォトのアカウントと同じでも異なっていてもよいです。

API とサービス - Google Cloud Platform


利用規約にチェックをつけて「承諾」をクリック。


利用するGoogle APIのページに移動して「有効にする」をクリックします。

次に「認証情報」のページに移動します。

API とサービス - Google Cloud Platform


まずプロジェクトの作成を求められるので「作成」ボタンをクリック。


無料で作成できるプロジェクト数は全部で13個までのようです。

プロジェクト名を変更すると自動的にプロジェクトIDが生成されます。


「認証情報を作成」をクリック。


「APIキー」か「OAuthクライアントID」、「サービスアカウントキー」のいずれを作成するか聞かれるので、「OAuthクライアントID」を選択します。

まず「同意画面の設定」をするように言われるので、OAuth同意画面の作成を行います。

OAuth同意画面の作成ではアプリケーション名とサポートメールの項目だけ入力すればよいようです。

ここで入力したメールアドレスは同意画面に表示されます。

アプリケーション名は、自分で使うだけのツールなら自分がわかる名前にしておけばよいです。

「保存」をクリック。

再度「認証情報を作成」をクリック。


「その他」を選択し、この名前もなんでもよいのですが、先ほど入力したアプリケーション名とにしました。

「作成」ボタンをクリックして、これでようやく、ClientIDとClientSecretが表示されました。

ClientIDとClientSecretは他のアプリで利用されないように秘密にしておかないといけません(Using OAuth 2.0 for Installed Applications  |  API Client Library for Python  |  Google Developers)。

ClientIDとClientSecretを利用する


Google Photos APIsの場合は、アクセスするGoogleフォトのアカウントごとのリフレッシュトークンを取得するためにClientIDとClientSecretを利用します。

リフレッシュトークンを一旦取得すると以後は、このリフレッシュトークンを利用して、アクセストークンを取得します。

アクセストークンでGoogleフォトにアクセスするのですが、アクセストークンには有効期限があるので、期限が切れたらリフレッシュトークンを使って、アクセストークンを更新します。

リフレッシュトークンを取得するときにGoogleフォトへのアカウントへのアクセスのリクエストが表示されます。

OAuth同意画面の作成で入力したメールアドレスが表示されます。

ここで「許可」すると「認証用コード」が発行され、その「認証用コード」を使って、リフレッシュトークンとアクセストークンを取得します。

以後はリフレッシュトークンを保存しておけば、それを使ってアクセストークンを更新できます。

このOAuth同意画面は必ずユーザーの操作が必要なのでブラウザを利用しないといけませんが、自動的にブラウザに表示させるか、ユーザーにURLだけ示してアクセスしてもらうかは、アプリの実装によります。

Google Cloud Platformでサービスアカウントを取得すればユーザーの同意画面は必要なくなりますが、Google Photos APIsはサービスアカウントに対応していません(Authentication and authorization scopes  |  Google Photos APIs  |  Google Developers)。

参考にしたサイト


API ライブラリ - Google Cloud Platform
Google APIを利用するにはここから登録します。

Using OAuth 2.0 for Installed Applications  |  API Client Library for Python  |  Google Developers
ClientIDとClientSecretをGitHubの公開リポジトリに入れないように注意されています。

Google Photos APIs  |  Google Developers
Googleフォトを操作するAPIのページ。

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ