やってみる

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

Unauthorizedエラーの原因はClientSecretのコピペミスが原因だった

タイトルが前回の敗因…。まぬけすぎる。それに気づくまでに、いらぬ回り道をしてしまったのが今回。

目標

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

小目標

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

前回

ローカルサーバを立ち上げてOAuth2.0認証に挑むも失敗

対象環境

HTTP Error 401: Unauthorized

このエラーでググってみるとこちらがヒット。

時刻

コメントを見ると日時の一致がかなりシビアらしい。Windows XPで以下のように日時を更新してみた。

  1. タスクバー右下の時刻部分を右クリックする
    f:id:ytyaru:20161129193730p:plain
  2. メニューから日時と時刻の調整をクリックする
    f:id:ytyaru:20161129194009p:plain
  3. インターネット時刻タブの今すぐ更新ボタンを押下する
    f:id:ytyaru:20161129194055p:plain

この直後に、ふたたび例の手順でサンプルコードを実行した。しかし、同様のエラー。時刻が狂っているわけではない、と思う。こちらのコメントによると0.6秒程度の狂いでもダメらしい。どうやってそれを確認すればいいのかもわからん。

CallbackURL

おそらくGoogle Developer Consoleで認証データを作成するときの話だろう。以前Googleの認証キーを取得するときに少し触れた。

Client IDを作成するとき、アプリケーションの種類をウェブ アプリケーションにすると、承認済みの JavaScript 生成元承認済みのリダイレクト URIを設定できる。こちらでいっているCallbackURLとはこれのことだろう。

でも、私がやりたいのはWebアプリではないと思う。ローカルからアクセスしたい。だからアプリケーションの種類をその他にしてClient IDを作成した。そうすると、承認済みの JavaScript 生成元承認済みのリダイレクト URIの指定をせずともClient IDを作成できる。

しかも、こちらではダミーでもいいから入力するというように書いてある。たぶんGoogleの場合、ローカルならアプリケーションの種類をその他にすればいいと思う。

clientId, clientSecret

これは間違っているわけがない。なにせGoogle Developers Consoleの画面からコピペしたのだから。

と思って改めてソースコードを見てみると、間違っていた…。

clientSecretの末尾にスペースが入っていた。おそらくGoogleページからコピーしてきたときについたのだろう。私が間違っておりました。ごめんなさい。

所感

ソースコードを見直せば早かったのに…。

どうでもいいけど、Windows XPの時刻あわせ、こんな風にできたのか。知らなかった。デフォルトだと一週間に一度サーバに問い合わせるらしい。ちなみにラズパイは起動時にはすでにずれているから一週間おきではダメ。PCは内部電池で日付を記憶しているんだっけ?ラズパイには電池がないから遅れるのかな?