OAuthとFusionTablesAPIのPythonサンプルコードを試すも失敗
サンプルコードが見つかったので試してみた。が、失敗した。
目標
ラズパイのCPU温度を定期的にロギングしてアップロードしたい。
小目標
PythonからFusionTablesAPIを使ってinsertする。
前回
GoogleApiClientライブラリにAPIKeyを渡すもエラー
対象環境
- Firefox 50.0
- Google Account
- Google Developers Console
- Google Drive
- Google Fusion Tables
- Google Apps Script
- Python 2.7
ググった
前回までに度重なる"Login Required"エラーに苦しめられてきた。
そこで、fusiontables apikey "Login Required"
で検索してみたところ、こちらがヒットした。
どうやら、かつてGoogleはClientLogin
という仕組みを提供していたっぽい。でも廃止された。代わりにOAuth2.0認証をするようになった、ということだろう。
提示されているリンク先を参照してみた。ClientLogin
、SQL API
などがあったが廃止予定とのことらしい。このやりとりはすでに3年前のものらしいから、すでに廃止になっているのだろう。どちらも見たことがないAPIだし。
サンプルコード発見
PythonにおけるOAuth2.0のサンプルコードへのリンクがあった。
OAuth2.0認証の最小コードどいうわりには随分と長い。しかも、ブラウザによる手入力操作が必須。サンプルのソースコードを見ると両方使うような感じ。APIキーだけで実行できるものだと思っていたが、勘違いなのか。
キー取得
とりあえず、clientId, clientSecret, APIKeyが必要そうなので取得した。Googleの認証キーを取得したときの方法で得た"OAuth Client Id"と"API Key"を使う。
tableidはFusionTablesでテーブルを作成したときのURLパラメータdocId
の値を使う。redirect_uriはhttp://localhost
を使うようにソースコードのコメントにあったので、そのままコピペした。
コード修正
client_id = "0123456789012345678901234567890123456789.apps.googleusercontent.com" client_secret = "012345678901234567890123456789" redirect_uri = "http://localhost" api_key = "0123456789012345678901234567890123456789" tableid = "0123456789012345678901234567890123456789"
サンプルコードの上記の部分を変更した。
実行
pythonコードを実行した。コンソールで以下のような表示がでた。
copy and paste the url below into browser address bar and hit enter https://accounts.google.com/o/oauth2/auth?client_id=0123456789012345678901234567890123456789.apps.googleusercontent.com&redirect_uri=http://localhost&scope=https://www.googleapis.com/auth/fusiontables&response_type=code Enter code (parameter of URL):
コンソールに表示されたURLをブラウザにコピペして実行しろ、ということらしい。
ブラウザでURLを叩く
やってみると、以下のようになった。
{プロジェクト名}が次の許可をリクエストしています:
と表示される。許可
をクリックする
すると、正常に接続できませんでした
エラーが表示された。
よくわからん。たぶんhttp://localhost
のところが問題なのだろう。「許可
したあとにリダイレクトする先をhttp://localhost
にしたけど、http://localhost
に接続できない」ということだろう。たぶんローカルサーバを立ち上げる必要があるのだろう。
ローカルサーバ
で、サーバってどうやって作るの?
…Webサービスを利用しようとしたら、なぜか自分でWebサーバを立ち上げる必要に迫られた。
というか、本当にそんなことする必要あるの?たぶんある。code
とやらを受け取るために必要なのだろう。
所感
シンプルなコードってことで紹介されていたけど、これの一体どこがシンプルなんだ?必要な手続きは複雑だし、コードは206行もあるのだが?
危険なものにほど安全安全と言いたがるアレと一緒か?だまされた。
それとも、これでもシンプルってこと?もしやOAuth2.0はとてつもない魔境なのでは…。