もう一人のY君

主にiPhoneのショートカットアプリのレシピやTipsなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU  MENU

【iPhoneショートカット】気象データAPI「JJWD」を使ったアメダス観測値レシピ

f:id:thetheorier:20211011103852p:plain

 今年はじめに注目されていたAPIなんですが, ショートカットレシピとして作るのをすっかり忘れていました.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS15.1

 

 

スポンサーリンク

 


 

 

これまでに作ったレシピ

blog.thetheorier.com

 先日紹介したこのレシピは, サービス終了したlivedoor天気の代わりとして作られたAPIを利用したものでした.

 ショートカットのアクションでも天気情報を取得するアクションはありますが, 天気予報の質の点で他を使いたいという人は当然存在します.

 

 

今回使うAPI

jjwd.info

 今回使うAPIは, 気象庁による各観測地のアメダス観測値を取得します.

 ただし気象庁が公開するデータはCSV形式であり, もちろんこれをそのまま引っ張ってきて欲しいデータを取り出せないことはないですが, とても面倒な作業です.

 JJWDではそれをJSONに変換することで扱いやすくなっています.

 

 

レシピ

 ではレシピを見ていきます.

 

 

f:id:thetheorier:20211011110606p:plain

 対象の観測値データは

https://jjwd.info/api/v2/station/[観測所番号]

 

にアクセスします(画像では観測「値」と誤字ってます).

 

https://www.jma.go.jp/jma/kishou/know/amedas/ame_master_20211005.pdf

 

 観測所番号は上のリンクから探してください, 因みに52586は岐阜地方気象台の観測所番号です.

 PDFでも触れられていますが, 観測所によって観測対象が降水量だけだったり降水量、気温、風光、風速まで観測したり…と異なります.

 最寄りの観測所を選んでも降水量しかデータがない…なんてことがあるのでそこは他の観測所を選ぶなど妥協する必要があります.

(この投稿で僕の地元である一宮市でなく岐阜市の観測所を選んでいるのではそのせいです)

 

 このURLを「Webの内容を取得」で中身を取り出し, 「入力から辞書を取得」で辞書として取り込みます.

 

 

f:id:thetheorier:20211011111216p:plain

  因みに以前紹介しましたが, 「辞書」アクションではより深い階層の値を取り出す際の記法があります.

 例えば画像にある"station"をキーとする辞書"pref_ja"キーの値「岐阜」を取り出したい場合, いちいち"station"の値を辞書にして"pref_ja"の値を取得…という面倒なことをせず,

station.pref_ja

 

と, 間にドットを挟むことで値「岐阜」を取り出せます.

 むしろこれを使わないと全体のアクションがどんどん膨れ上がってしまうので必須のテクニックです.

 

 

 以降は公式サイトにあるAPIドキュメントに従って欲しいデータを辞書dictからひたすら引っ張ってきます.

 

 

f:id:thetheorier:20211011112831p:plain

 まずは都道府県名と観測所名を取得します.

 それぞれstationキーのpref_jaおよびstn_name_jaなので「辞書の値を取得」でそれぞれ

 

station.pref_ja
station.stn_name_ja

 

をキーとすれば取り出せます.

 

 これを「テキスト」アクションで体裁を整えておきます.

 

 

 

f:id:thetheorier:20211011113304p:plain

 次は降水量です.

 まずは観測データを記録した現在時刻から.

 APIドキュメントに従った, 「辞書」アクションに当てはめるキーは以下になります.

 

キー 詳細
station.preall.year
station.preall.month
station.preall.day
station.preall.hour
station.preall.minute

 

 時刻の各々の単位がバラバラなので「テキスト」アクションで繋げます.

 全部はいらない…という場合は必要な値だけでももちろん大丈夫です.

 

 

f:id:thetheorier:20211011114037p:plain

 上のように「テキスト」アクションなどに直接辞書の値を置くには画像のように行います.

 まず「テキスト」アクションに対象の辞書(変数)を追加し, それをタップして画面下に出てきたメニューを下にスワイプすると, 一番下に灰色で「キーの値を取得」という入力枠があるので, そこに上に書いたようなキーを入力します.

 

 

f:id:thetheorier:20211011114319p:plain

 この調子でどんどんデータを取り出していきます.

 1時間降水量はキーstation.preall.precip_1hで得られます.

 

 

f:id:thetheorier:20211011114444p:plain

 似たデータがここではたくさんあるので必要な分だけ使います.

 

キー 詳細
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 日時間降水量

 

 

f:id:thetheorier:20211011114846p:plain

 あとは「テキスト」アクションで体裁を整えて適当な変数で置いておきます.

 

 

 

f:id:thetheorier:20211011114956p:plain

 次は最大風速です.

 これもやはり以下のキーを使って観測時刻を取得できます(観測情報によって各々の観測時刻は一致しないため各々の時刻を取得しておいた方がいいです).

 

キー 詳細
station.max_wind.year
station.max_wind.month
station.max_wind.day
station.max_wind.hour
station.max_wind.minute

 

 

f:id:thetheorier:20211011115244p:plain

 風速最大値はキーstation.max_wind.max_wind_dailyで得られます.

 

 

f:id:thetheorier:20211011115405p:plain

 次は風速最大値の風向です.

 取得した時点で風向の値は東西南北をそれぞれアルファベットのEWSNによって与えられているため, キーstation.max_wind.max_wind_daily_dirで得た結果を読みやすくするために「テキストを置き換え」で東西南北の言葉で置き換えたものを使います.

 

 

f:id:thetheorier:20211011115803p:plain

 観測データによっては, 観測時刻とは別に, 実際に発生した時刻である「起時」があります.

 風速最大の起時は以下によって得られます.

 

キー 詳細
station.max_wind.max_wind_daily_hour
station.max_wind.max_wind_daily_minute

 

 以上これらの値を「テキスト」アクションで体裁を整えて変数に置きます.

 

 

 

f:id:thetheorier:20211011120313p:plain

 続く「最大瞬間風速」は「最大風速」と中身はまったく同じでキーの文字列が異なるだけです.

 まずは観測時刻.

 

キー 詳細
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です.

 

 

f:id:thetheorier:20211011120615p:plain

 最大瞬間風速最大値の風向はキーstation.max_gust.max_gust_daily_dirで取得し, 最大風速の風向と同じく東西南北で置き換えます.

 

f:id:thetheorier:20211011130646p:plain

 最大瞬間風速にも最大値起時があります.

 

 

f:id:thetheorier:20211011130814p:plain

 次は最高気温です.

 観測時刻を得るキーは以下になります.

 

キー 詳細
station.max_temp.year
station.max_temp.month
station.max_temp.day
station.max_temp.hour
station.max_temp.minute

 

 

f:id:thetheorier:20211011131002p:plain

 最高気温のキーはstation.max_temp.temp_daily_maxになります.

 

 

f:id:thetheorier:20211011131119p:plain

 最高気温きも起時があり, 以下のキーで得られます.

 

キー 詳細
station.max_temp.temp_daily_max_time_hour
station.max_temp.temp_daiky_max_time_minute

 

 

f:id:thetheorier:20211011131347p:plain

 最高気温のデータ群には「前日比」のキーがあり, station.max_temp.temp_daily_max_diff_to_yesterdayで得られます.

 今回は使っていませんが平年差もあります.

 

 

f:id:thetheorier:20211011131705p:plain

 最後に「テキスト」アクションで体裁を整えます.

 今回は前日比が時間帯によって値がない場合があるため,

 

  • 値がない
  • 前日比が非負
  • 前日比が負

 

の場合で体裁を変え, 値がある場合は最高気温の表示の後ろに表記するようにしています.

 

 

 最低気温については最高気温の場合でキーの"max"を"min"に変えるだけなので省略します.

 

 

f:id:thetheorier:20211011132035p:plain

 最後にすべての結果を表示させて終わりです.

 

 

実行

f:id:thetheorier:20211105140029p:plain

  結果は画像の通りです.

 

 

 毎度変数に置くのが煩わしいですが, ここまでの数をマジック変数のまま扱う方がもっとややこしいので仕方ないですね.

 

 

 このサービス(アメダス)は更新時点での記録であり、天気予報ではないので注意です.