見出し画像

ノーコード・プログラミング(⑤天気予報の取得)

今回はプログラムなしで天気予報を取得して表示までを作成していきたいと思います。
Node-REDを使っていきましょう。(準備まだの人は①から)

はじめに

天気予報のデータは「気象庁ホームページ」からひっぱってくるので
気象庁ホームページ利用規約」をご確認ください。

作成

まずはやってみましょう!

Inject を用意。変更なしで「タイムスタンプ」となったままでOK

次に「http request」というインターネットからデータを取得するノードを用意してURLに気象庁のURLを設定します

https://www.jma.go.jp/bosai/common/const/area.json

次にデバッグを用意してつなぎ合わせます

実行してみるとデバッグに呪文のようなものが表示されます

これは各地の気象センターの情報をインターネットから取得して表示したものになります。

次に「json」を間に追加します

出力が変わりました。呪文がデータっぽくなりました。

「json」は先程の呪文(文字)をコンピューターで認識しやすい形(オブジェクト)に変換してくれます。

次に「change」を用意して、都道府県名から気象センターのオフィス番号を探し出します

値の代入:payload.office_keys

$keys(payload.offices)

JSONata式

値の代入:payload

$filter(payload.office_keys, function ($key) {
    $lookup(payload.offices, $key).name = "東京都"
})

JSONata式

↑「東京都」の箇所に取得したい都市の都道府県を指定してください。

↑東京都の気象庁のオフィス番号になります

次に新たに「http request」を用意してURLに都市の天気のURL設定します

https://www.jma.go.jp/bosai/forecast/data/forecast/{{{payload}}}.json

ここで{{{paylolad}}}となっている部分に手前で取得した"130000"(東京都)のオフィス番号がはいるようになります。

また呪文なので「json」に変換

接続して実行

なにやら天気予報が取れています!

次に再度「change」を用意して
取得した膨大なデータから、area.name=地域名とweatherCodes=天気番号にしぼります

値の代入:payload

$map(payload[0].timeSeries[0].areas, function($item, $key){
    [
        $item.area.name,
        $item.weatherCodes
    ]
})

JSONata式

つなげて実行。膨大なデータからスッキリしました

次に再再度「change」を用意して
"340", "101" … などのお天気コードを日本語に変換します

値の代入:payload(JSONata式)
(↓もっといいやり方があるかもしれません。。。)

[
    [
        "都道府県", "天候"
    ],
    payload.(
        [
            [
                $.(
                    $replace("100", "晴") ~>
                    $replace("101", "晴時々曇") ~>
                    $replace("102", "晴一時雨") ~>
                    $replace("103", "晴時々雨") ~>
                    $replace("104", "晴一時雪") ~>
                    $replace("105", "晴時々雪") ~>
                    $replace("106", "晴一時雨か雪") ~>
                    $replace("107", "晴時々雨か雪") ~>
                    $replace("108", "晴一時雨か雷雨") ~>
                    $replace("110", "晴後時々曇") ~>
                    $replace("111", "晴後曇") ~>
                    $replace("112", "晴後一時雨") ~>
                    $replace("113", "晴後時々雨") ~>
                    $replace("114", "晴後雨") ~>
                    $replace("115", "晴後一時雪") ~>
                    $replace("116", "晴後時々雪") ~>
                    $replace("117", "晴後雪") ~>
                    $replace("118", "晴後雨か雪") ~>
                    $replace("119", "晴後雨か雷雨") ~>
                    $replace("120", "晴朝夕一時雨") ~>
                    $replace("121", "晴朝の内一時雨") ~>
                    $replace("122", "晴夕方一時雨") ~>
                    $replace("123", "晴山沿い雷雨") ~>
                    $replace("124", "晴山沿い雪") ~>
                    $replace("125", "晴午後は雷雨") ~>
                    $replace("126", "晴昼頃から雨") ~>
                    $replace("127", "晴夕方から雨") ~>
                    $replace("128", "晴夜は雨") ~>
                    $replace("130", "朝の内霧後晴") ~>
                    $replace("131", "晴明け方霧") ~>
                    $replace("132", "晴朝夕曇") ~>
                    $replace("140", "晴時々雨で雷を伴う") ~>
                    $replace("160", "晴一時雪か雨") ~>
                    $replace("170", "晴時々雪か雨") ~>
                    $replace("181", "晴後雪か雨") ~>
                    $replace("200", "曇") ~>
                    $replace("201", "曇時々晴") ~>
                    $replace("202", "曇一時雨") ~>
                    $replace("203", "曇時々雨") ~>
                    $replace("204", "曇一時雪") ~>
                    $replace("205", "曇時々雪") ~>
                    $replace("206", "曇一時雨か雪") ~>
                    $replace("207", "曇時々雨か雪") ~>
                    $replace("208", "曇一時雨か雷雨") ~>
                    $replace("209", "霧") ~>
                    $replace("210", "曇後時々晴") ~>
                    $replace("211", "曇後晴") ~>
                    $replace("212", "曇後一時雨") ~>
                    $replace("213", "曇後時々雨") ~>
                    $replace("214", "曇後雨") ~>
                    $replace("215", "曇後一時雪") ~>
                    $replace("216", "曇後時々雪") ~>
                    $replace("217", "曇後雪") ~>
                    $replace("218", "曇後雨か雪") ~>
                    $replace("219", "曇後雨か雷雨") ~>
                    $replace("220", "曇朝夕一時雨") ~>
                    $replace("221", "曇朝の内一時雨") ~>
                    $replace("222", "曇夕方一時雨") ~>
                    $replace("223", "曇日中時々晴") ~>
                    $replace("224", "曇昼頃から雨") ~>
                    $replace("225", "曇夕方から雨") ~>
                    $replace("226", "曇夜は雨") ~>
                    $replace("228", "曇昼頃から雪") ~>
                    $replace("229", "曇夕方から雪") ~>
                    $replace("230", "曇夜は雪") ~>
                    $replace("231", "曇海上海岸は霧か霧雨") ~>
                    $replace("240", "曇時々雨で雷を伴う") ~>
                    $replace("250", "曇時々雪で雷を伴う") ~>
                    $replace("260", "曇一時雪か雨") ~>
                    $replace("270", "曇時々雪か雨") ~>
                    $replace("281", "曇後雪か雨") ~>
                    $replace("300", "雨") ~>
                    $replace("301", "雨時々晴") ~>
                    $replace("302", "雨時々止む") ~>
                    $replace("303", "雨時々雪") ~>
                    $replace("304", "雨か雪") ~>
                    $replace("306", "大雨") ~>
                    $replace("308", "雨で暴風を伴う") ~>
                    $replace("309", "雨一時雪") ~>
                    $replace("311", "雨後晴") ~>
                    $replace("313", "雨後曇") ~>
                    $replace("314", "雨後時々雪") ~>
                    $replace("315", "雨後雪") ~>
                    $replace("316", "雨か雪後晴") ~>
                    $replace("317", "雨か雪後曇") ~>
                    $replace("320", "朝の内雨後晴") ~>
                    $replace("321", "朝の内雨後曇") ~>
                    $replace("322", "雨朝晩一時雪") ~>
                    $replace("323", "雨昼頃から晴") ~>
                    $replace("324", "雨夕方から晴") ~>
                    $replace("325", "雨夜は晴") ~>
                    $replace("326", "雨夕方から雪") ~>
                    $replace("327", "雨夜は雪") ~>
                    $replace("328", "雨一時強く降る") ~>
                    $replace("329", "雨一時みぞれ") ~>
                    $replace("340", "雪か雨") ~>
                    $replace("350", "雨で雷を伴う") ~>
                    $replace("361", "雪か雨後晴") ~>
                    $replace("371", "雪か雨後曇") ~>
                    $replace("400", "雪") ~>
                    $replace("401", "雪時々晴") ~>
                    $replace("402", "雪時々止む") ~>
                    $replace("403", "雪時々雨") ~>
                    $replace("405", "大雪") ~>
                    $replace("406", "風雪強い") ~>
                    $replace("407", "暴風雪") ~>
                    $replace("409", "雪一時雨") ~>
                    $replace("411", "雪後晴") ~>
                    $replace("413", "雪後曇") ~>
                    $replace("414", "雪後雨") ~>
                    $replace("420", "朝の内雪後晴") ~>
                    $replace("421", "朝の内雪後曇") ~>
                    $replace("422", "雪昼頃から雨") ~>
                    $replace("423", "雪夕方から雨") ~>
                    $replace("425", "雪一時強く降る") ~>
                    $replace("426", "雪後みぞれ") ~>
                    $replace("427", "雪一時みぞれ") ~>
                    $replace("450", "雪で雷を伴う")
                )
            ]
        ]
    )
]

つなげて実行

都市名と天気がいい具合に並んでいます

これを「table - viewer」でつなげて

実行すると完成!

今回作成したデータは↓からダウンロードできます。

↑ダウンロード後に node-redのウインドウにドラッグ&ドロップして読み込みできます。

応用

定期的に実行しGoogle Workspaceにチャットでお天気情報を流すサービスを作ってみましょう

ヒント

Google Workspaceのチャットにメッセージを投げる方法は以下で解説しています。
実践編:Google Workspace:GAS(App Script)で当番通知

定期実行は「Inject」ノードで設定できます

送信は 「http request」を使用します

メッセージ文は inject の payload に {'text': msg} いれます。

ヒントは終わりやってみましょう!


この記事が気に入ったらサポートをしてみませんか?