やってみる

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

GASのdoGet関数をPythonで叩く

失敗した失敗した失敗した失敗した失敗した。

目標

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

前回

GASのdoGet関数でFusionTablesAPIを叩く

今回

doGet(e)関数をブラウザでなくPythonからHTTP GETリクエストする。

結論

失敗。実行できなかった。ログイン画面が返ってきた。ログイン必須らしい。

Fusion Tables APIに触ってみたときもLogin Requiredのエラーだった。それと同じと思われる。何のためのAPIKeyなのかも不明。

詰んだ

どうすればcron実行から自動ログインできるかわからない。そんなことが可能なのかもわからない。

ログインや認証などの手入力を一切なしで実行したいのに…。詰んだ。

対象環境

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サービスを使いこなすにはどれほどの知識や技術が必要なのだろうか。"サービス"というが、奉仕どころか、こっちが使われている感じがする。はいそうです、無知で無能な私が悪いのです。ちくしょうめ、負けてたまるか!使ってやる!