今年はじめに注目されていたAPIなんですが, ショートカットレシピとして作るのをすっかり忘れていました.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS15.1
スポンサーリンク
これまでに作ったレシピ
先日紹介したこのレシピは, サービス終了したlivedoor天気の代わりとして作られたAPIを利用したものでした.
ショートカットのアクションでも天気情報を取得するアクションはありますが, 天気予報の質の点で他を使いたいという人は当然存在します.
今回使うAPI
今回使うAPIは, 気象庁による各観測地のアメダス観測値を取得します.
ただし気象庁が公開するデータはCSV形式であり, もちろんこれをそのまま引っ張ってきて欲しいデータを取り出せないことはないですが, とても面倒な作業です.
JJWDではそれをJSONに変換することで扱いやすくなっています.
レシピ
ではレシピを見ていきます.
対象の観測値データは
https://jjwd.info/api/v2/station/[観測所番号]
にアクセスします(画像では観測「値」と誤字ってます).
https://www.jma.go.jp/jma/kishou/know/amedas/ame_master_20211005.pdf
観測所番号は上のリンクから探してください, 因みに52586は岐阜地方気象台の観測所番号です.
PDFでも触れられていますが, 観測所によって観測対象が降水量だけだったり降水量、気温、風光、風速まで観測したり…と異なります.
最寄りの観測所を選んでも降水量しかデータがない…なんてことがあるのでそこは他の観測所を選ぶなど妥協する必要があります.
(この投稿で僕の地元である一宮市でなく岐阜市の観測所を選んでいるのではそのせいです)
このURLを「Webの内容を取得」で中身を取り出し, 「入力から辞書を取得」で辞書として取り込みます.
因みに以前紹介しましたが, 「辞書」アクションではより深い階層の値を取り出す際の記法があります.
例えば画像にある"station"をキーとする辞書"pref_ja"キーの値「岐阜」を取り出したい場合, いちいち"station"の値を辞書にして"pref_ja"の値を取得…という面倒なことをせず,
station.pref_ja
と, 間にドットを挟むことで値「岐阜」を取り出せます.
むしろこれを使わないと全体のアクションがどんどん膨れ上がってしまうので必須のテクニックです.
以降は公式サイトにあるAPIドキュメントに従って欲しいデータを辞書dictからひたすら引っ張ってきます.
まずは都道府県名と観測所名を取得します.
それぞれstationキーのpref_jaおよびstn_name_jaなので「辞書の値を取得」でそれぞれ
station.pref_ja
station.stn_name_ja
をキーとすれば取り出せます.
これを「テキスト」アクションで体裁を整えておきます.
次は降水量です.
まずは観測データを記録した現在時刻から.
APIドキュメントに従った, 「辞書」アクションに当てはめるキーは以下になります.
キー | 詳細 |
---|---|
station.preall.year | 年 |
station.preall.month | 月 |
station.preall.day | 日 |
station.preall.hour | 時 |
station.preall.minute | 分 |
時刻の各々の単位がバラバラなので「テキスト」アクションで繋げます.
全部はいらない…という場合は必要な値だけでももちろん大丈夫です.
上のように「テキスト」アクションなどに直接辞書の値を置くには画像のように行います.
まず「テキスト」アクションに対象の辞書(変数)を追加し, それをタップして画面下に出てきたメニューを下にスワイプすると, 一番下に灰色で「キーの値を取得」という入力枠があるので, そこに上に書いたようなキーを入力します.
この調子でどんどんデータを取り出していきます.
1時間降水量はキーstation.preall.precip_1hで得られます.
似たデータがここではたくさんあるので必要な分だけ使います.
キー | 詳細 |
---|---|
station.preall.precip_1h | 1時間降水量 |
station.preall.precip_3h | 3時間降水量 |
station.preall.precip_6h | 6時間降水量 |
station.preall.precip_12h | 12時間降水量 |
station.preall.precip_24h | 24時間降水量 |
station.preall.precip_48h | 48時間降水量 |
station.preall.precip_72h | 72時間降水量 |
station.preall.precip_day | 日時間降水量 |
あとは「テキスト」アクションで体裁を整えて適当な変数で置いておきます.
次は最大風速です.
これもやはり以下のキーを使って観測時刻を取得できます(観測情報によって各々の観測時刻は一致しないため各々の時刻を取得しておいた方がいいです).
キー | 詳細 |
---|---|
station.max_wind.year | 年 |
station.max_wind.month | 月 |
station.max_wind.day | 日 |
station.max_wind.hour | 時 |
station.max_wind.minute | 分 |
風速最大値はキーstation.max_wind.max_wind_dailyで得られます.
次は風速最大値の風向です.
取得した時点で風向の値は東西南北をそれぞれアルファベットのEWSNによって与えられているため, キーstation.max_wind.max_wind_daily_dirで得た結果を読みやすくするために「テキストを置き換え」で東西南北の言葉で置き換えたものを使います.
観測データによっては, 観測時刻とは別に, 実際に発生した時刻である「起時」があります.
風速最大の起時は以下によって得られます.
キー | 詳細 |
---|---|
station.max_wind.max_wind_daily_hour | 時 |
station.max_wind.max_wind_daily_minute | 分 |
以上これらの値を「テキスト」アクションで体裁を整えて変数に置きます.
続く「最大瞬間風速」は「最大風速」と中身はまったく同じでキーの文字列が異なるだけです.
まずは観測時刻.
キー | 詳細 |
---|---|
station.max_gust.year | 年 |
station.max_gust.month | 月 |
station.max_gust.day | 日 |
station.max_gust.hour | 時 |
station.max_gust.minute | 分 |
そして最大瞬間風速の最大値のキーはstation.max_gust.max_gust_dailyです.
最大瞬間風速最大値の風向はキーstation.max_gust.max_gust_daily_dirで取得し, 最大風速の風向と同じく東西南北で置き換えます.
最大瞬間風速にも最大値起時があります.
次は最高気温です.
観測時刻を得るキーは以下になります.
キー | 詳細 |
---|---|
station.max_temp.year | 年 |
station.max_temp.month | 月 |
station.max_temp.day | 日 |
station.max_temp.hour | 時 |
station.max_temp.minute | 分 |
最高気温のキーはstation.max_temp.temp_daily_maxになります.
最高気温きも起時があり, 以下のキーで得られます.
キー | 詳細 |
---|---|
station.max_temp.temp_daily_max_time_hour | 時 |
station.max_temp.temp_daiky_max_time_minute | 分 |
最高気温のデータ群には「前日比」のキーがあり, station.max_temp.temp_daily_max_diff_to_yesterdayで得られます.
今回は使っていませんが平年差もあります.
最後に「テキスト」アクションで体裁を整えます.
今回は前日比が時間帯によって値がない場合があるため,
- 値がない
- 前日比が非負
- 前日比が負
の場合で体裁を変え, 値がある場合は最高気温の表示の後ろに表記するようにしています.
最低気温については最高気温の場合でキーの"max"を"min"に変えるだけなので省略します.
最後にすべての結果を表示させて終わりです.
実行
結果は画像の通りです.
〆
毎度変数に置くのが煩わしいですが, ここまでの数をマジック変数のまま扱う方がもっとややこしいので仕方ないですね.
このサービス(アメダス)は更新時点での記録であり、天気予報ではないので注意です.