Unauthorizedエラーの原因はClientSecretのコピペミスが原因だった
タイトルが前回の敗因…。まぬけすぎる。それに気づくまでに、いらぬ回り道をしてしまったのが今回。
目標
ラズパイのCPU温度を定期的にロギングしてアップロードしたい。
小目標
PythonからFusionTablesAPIを使ってinsertする。
前回
対象環境
- Firefox 50.0
- Google Account
- Google Developers Console
- Google Drive
- Google Fusion Tables
- Google Apps Script
- Python 2.7
HTTP Error 401: Unauthorized
このエラーでググってみるとこちらがヒット。
時刻
コメントを見ると日時の一致がかなりシビアらしい。Windows XPで以下のように日時を更新してみた。
- タスクバー右下の時刻部分を右クリックする
- メニューから
日時と時刻の調整
をクリックする
インターネット時刻
タブの今すぐ更新
ボタンを押下する
この直後に、ふたたび例の手順でサンプルコードを実行した。しかし、同様のエラー。時刻が狂っているわけではない、と思う。こちらのコメントによると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は内部電池で日付を記憶しているんだっけ?ラズパイには電池がないから遅れるのかな?