前回の修正をして実行したが、Parse Error
になった。
目標
ラズパイのCPU温度を定期的にロギングしてアップロードしたい。
小目標
PythonからFusionTablesAPIを使ってinsertする。
前回
Unauthorizedエラーの原因はClientSecretのコピペミスが原因だった
対象環境
- Firefox 50.0
- Google Account
- Google Developers Console
- Google Drive
- Google Fusion Tables
- Google Apps Script
- Python 2.7
Parse Error
前回のミスを直したあと、改めて実行してみた。以下のように別のエラーが出た。なお、実行の手順はローカルサーバを立ち上げてOAuth2.0認証に挑むも失敗したときの記事を参照。
python test.py copy and paste the url below into browser address bar and hit enter https://accounts.google.com/o/oauth2/auth?client_id={*.apps.googleusercontent.com}&redirect_uri=http://localhost:8000&scope=https://www.googleapis.com/auth/fusiontables&response_type=code Enter code (parameter of URL): 4/WT_u251uyZ60zONNqx3dD9Kicx9xC4jqoN30s8QjWgM GET STYLES 200 OK { "kind": "fusiontables#styleSettingList", "totalItems": 0 } INSERT STYLE 400 Bad Request { "error": { "errors": [ { "domain": "global", "reason": "parseError", "message": "Parse Error" } ], "code": 400, "message": "Parse Error" } } Traceback (most recent call last): File "test.py", line 196, in <module> styleId = api_test.insertStyle("large_red") File "test.py", line 99, in insertStyle return json_response["styleId"] KeyError: 'styleId' exit status 1
エラー内容の分析
"message": "Parse Error"
、KeyError: 'styleId'
ということらしい。なるほどわからん。
じつはサンプルソースコードの中身はまったく把握していない。
サンプルコードの所在
OAuthとFusionTablesAPIのPythonサンプルコードを試すも失敗したときにも書いたが、サンプルコードをベースにしている。
version1 の API を使っていた
改めてサンプルコードをみてみると、"/fusiontables/v1/tables/%s/styles%s"
のように、v1
時代のFusion Tables APIを使ったサンプルコードらしい。2016/11/29時点の最新はv2
だと思う。このコードが古くて、レスポンスの中にstyleId
なんてないからエラーになったのか?
サンプルコードの分析
if __name__ == "__main__":
のところがメインっぽい。
api_test.main()
のところでcode
をわたして認証しているっぽい。
で、次のapi_test.getStyles()
は成功。HTTP 200 OK
応答が返ってきている。中身はFusion Tables APIっぽい。v1でも成功していた。次のstyleId = api_test.insertStyle("large_red")
のところで400 Bad Request
エラーになったらしい。
Fusion Tables API v1 の仕様について知らないからgetStyles()
とやらが一体何なのかわからん。v2のQuery.sql()
しか使ったことない。
サンプルコード内にたくさんあるdef ...:
は全部class内の関数。main
以外のほとんどがAPIを個別に実行するための関数らしい。ならば、これを手本にv2のQuery.sql()
を実行するような関数を作ってやろう。そして、ほかのv1の関数はすべて撤去しよう。
所感
あといくつエラーを越えたら成功するのだろうか。