やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

OAuthとFusionTablesAPIのPythonサンプルコードを試すも失敗

サンプルコードが見つかったので試してみた。が、失敗した。

目標

ラズパイのCPU温度を定期的にロギングしてアップロードしたい

小目標

PythonからFusionTablesAPIを使ってinsertする。

前回

GoogleApiClientライブラリにAPIKeyを渡すもエラー

対象環境

ググった

前回までに度重なる"Login Required"エラーに苦しめられてきた。

そこで、fusiontables apikey "Login Required"で検索してみたところ、こちらがヒットした。

どうやら、かつてGoogleClientLoginという仕組みを提供していたっぽい。でも廃止された。代わりにOAuth2.0認証をするようになった、ということだろう。

提示されているリンク先を参照してみた。ClientLoginSQL APIなどがあったが廃止予定とのことらしい。このやりとりはすでに3年前のものらしいから、すでに廃止になっているのだろう。どちらも見たことがないAPIだし。

サンプルコード発見

PythonにおけるOAuth2.0のサンプルコードへのリンクがあった。

OAuth2.0認証の最小コードどいうわりには随分と長い。しかも、ブラウザによる手入力操作が必須。サンプルのソースコードを見ると両方使うような感じ。APIキーだけで実行できるものだと思っていたが、勘違いなのか。

キー取得

とりあえず、clientId, clientSecret, APIKeyが必要そうなので取得した。Googleの認証キーを取得したときの方法で得た"OAuth Client Id"と"API Key"を使う。

tableidはFusionTablesでテーブルを作成したときのURLパラメータdocIdの値を使う。redirect_urihttp://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を叩く

やってみると、以下のようになった。

  1. {プロジェクト名}が次の許可をリクエストしています:と表示される。
  2. 許可をクリックする

f:id:ytyaru:20161129183947p:plain

すると、正常に接続できませんでしたエラーが表示された。

f:id:ytyaru:20161129184110p:plain

よくわからん。たぶんhttp://localhostのところが問題なのだろう。「許可したあとにリダイレクトする先をhttp://localhostにしたけど、http://localhostに接続できない」ということだろう。たぶんローカルサーバを立ち上げる必要があるのだろう。

ローカルサーバ

で、サーバってどうやって作るの?

Webサービスを利用しようとしたら、なぜか自分でWebサーバを立ち上げる必要に迫られた。

というか、本当にそんなことする必要あるの?たぶんある。codeとやらを受け取るために必要なのだろう。

所感

シンプルなコードってことで紹介されていたけど、これの一体どこがシンプルなんだ?必要な手続きは複雑だし、コードは206行もあるのだが?

危険なものにほど安全安全と言いたがるアレと一緒か?だまされた。

それとも、これでもシンプルってこと?もしやOAuth2.0はとてつもない魔境なのでは…。