GASのdoGet関数をPythonで叩く
失敗した失敗した失敗した失敗した失敗した。
目標
ラズパイのCPU温度を定期的にロギングしてアップロードしたい。
前回
GASのdoGet関数でFusionTablesAPIを叩く。
今回
doGet(e)
関数をブラウザでなくPythonからHTTP GETリクエストする。
結論
失敗。実行できなかった。ログイン画面が返ってきた。ログイン必須らしい。
Fusion Tables APIに触ってみたときもLogin Required
のエラーだった。それと同じと思われる。何のためのAPIKeyなのかも不明。
詰んだ
どうすればcron実行から自動ログインできるかわからない。そんなことが可能なのかもわからない。
ログインや認証などの手入力を一切なしで実行したいのに…。詰んだ。
対象環境
- Firefox 50.0
- Google Account
- Google Developers Console
- Google Drive
- Google Fusion Tables
- Google Apps Script
- Python 3.4
PythonでHTTPリクエスト
PythonでHTTP GETリクエストする。ターゲットは前回作成したGASコード。
#!python3 #encoding:utf-8 import requests from furl import furl from datetime import datetime import urllib.parse appsScriptDevId = "01234567890123456789012345678901234567890" devUrl = "https://script.google.com/macros/s/{0}/dev".format(appsScriptDevId) url = devUrl f = furl(url) f.args['TimeStamp'] = '2000-01-01 00:11:22' f.args['CpuTemperature'] = '30000' print(f.url) res = requests.get(f.url) filename = "Response.txt" file = open(filename, 'w', encoding="UTF-8") file.write(res.text) file.close()
リクエスト結果はResponse.txt
に吐き出す。成功すれば、たぶんスクリプトが完了しましたが、何も返されませんでした。
というメッセージが返却されるだろう。
実行結果
約64KBの文書が返却された。Response.txt
をテキストエディタで開いてみるとHTMLだった。
Response.html
に拡張子を変更し、ブラウザで表示してみたら、ログイン画面だった。
つまり「ログインしろ」ということか。やはり、ブラウザで実行したときはすでにログイン済みだったから要求されなかっただけだったようだ。
残念ながら、プログラムからログインする方法を知らない。そんなことができるのかどうかもわからない。どうやって調べたらいいのかも分からない。
どうあっても手入力が必要な仕様なのか。それとも、何か手段があるのか。わからない。
OAuth2.0認証
たぶん先に進むためには、OAuth2.0認証とやらを調査することになるだろう。
でもこれがやたらめったら複雑っぽい。しかも、かならず手動の認証手続きが必要な気がする。それを省略するためのAPIKeyだと思っていたのだがログイン要求された。今回AppsScriptから実行しても同じだった。
もしかして、手動操作が必須なのだろうか。FusionTablesへのinsertはcronで自動実行できないという結論になってしまうのか。そんなばかな…。なにか手があるはず、と思いたいが…。
もうやだ!認証怖い!WebAPI辛い!!Webサービス苦しい!!!
所感
ここまで苦労して結局できなかった。疲れた…。AppsScriptは無駄に回り道しただけだったのか。
Googleサービスを使いこなすにはどれほどの知識や技術が必要なのだろうか。"サービス"というが、奉仕どころか、こっちが使われている感じがする。はいそうです、無知で無能な私が悪いのです。ちくしょうめ、負けてたまるか!使ってやる!