Perl入学式 in 東京のピザ会でみた@xtetsujiさんの超絶ライフログシステムや、家電価格の定点観測を Google スプレッドシートで行うなんかを見て、俺もいっちょやってみたい!と思って購入したのがこの本
詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~
- 作者: 高橋宣成
- 出版社/メーカー: 秀和システム
- 発売日: 2017/12/23
- メディア: 単行本
- この商品を含むブログを見る
土日ごとにやっていたこの本も終盤。なんというか、いままで「ホスティング借りて、スクリプト置いて、cronで動かさんとなぁ・・・」って思ってたことが、GASだけで完結でそうで、Google様すげぇ・・・ってなってます。
で、そんな中で詰まったところがあったので、おすそ分け。
17章 外部サイトへのアクセス サンプル 17−3−3 「お天気Webサービス」から天気情報を取得する , 第1版 423pのスクリプトです。
function myFunction() { var cityId = 130010; var url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city='; var response = UrlFetchApp.fetch(url + cityId); var json = JSON.parse(response.getContentText()); Logger.log('%sエリア -%s-%s 地方の天気:', json.location.area, json.location.prefecture, json.location.city ); Logger.log(json.description.text); json.forecasts.forEach(function(forecast,i,array){ Logger.log( '%s %s の天気 : %s / 最高気温 :%s', forecast.dateLabel, forecast.date, forecast.telop, forecast.temperature.max.celsius # ここ ); }); }
これは、GASからlivedooreの天気用法APIを叩き、返って来たJSONをパースしてログに出す、というもの。ここでエラーが出たのは最後の方にある行、 forecast.temperature.max.celsius
現在は2018年2月25日15時過ぎですが、実行すると以下のエラーが出ます。
TypeError: null からプロパティ「celsius」を読み取れません。(行 15、ファイル「WebAPI活用」)
で、生JSONとか見たんですが、ちゃんとオブジェクトあるし、綴りも間違ってないし・・・と悩んだのでした。
しかし、よくよく見てみると・・・画像の一番下です。
あ、forecastに格納されている配列の3つ目、添え字でいうと[2]のtemperature.max
がnull
だ!ってことに気づいたのでした。おそらく、時間が進むとここに値が入ったりするのかなぁ、と思ってます(未確認)
ということで、雑にif文で回避したりするなどして先に進んだのでした。後半のforEach直後にif文で抜けるようにかいてます。
json.forecasts.forEach(function(forecast,i,array){ if (!forecast.temperature.max){return} Logger.log( '%s %s の天気 : %s / 最高気温 :%s', forecast.dateLabel, forecast.date, forecast.telop, forecast.temperature.max.celsius ); });
この本も残りわずか、頑張りまする