やってみる

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

コピペミスを直すもParse Error発生

前回の修正をして実行したが、Parse Errorになった。

目標

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

小目標

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

前回

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

対象環境

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の関数はすべて撤去しよう。

所感

あといくつエラーを越えたら成功するのだろうか。