17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

現在出ている気象警報・注意報を取得する

17
Last updated at Posted at 2021-08-07

追記:2026年5月29日気象庁の変更に対応するため一部コードを変更しました(氾濫警報には現在対応していません)

初めに

現在出ている注意報・警報を取得したいと思うことは無いでしょうか?
現状、それらの情報を取得できるAPIはたいてい有料なことが多いです。
そこで今回は気象庁のWebAPI(?)を利用して取得しようかと思います。

事前準備

このページから地方エリアのコードと市町村区のコードを取得しておきます。
例えば東京都千代田区の場合、関東甲信地方の東京都東京地方を選択した後、千代田区を選択した際URLのclass20s&area_code=""の部分が市町村区のコードとなります。

実装

warninginfo.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import json
import urllib.request



CLASS_AREA_CODE = "1310100" #市町村区のコード
AREA_URL = "https://www.jma.go.jp/bosai/common/const/area.json"
url = "https://www.jma.go.jp/bosai/warning/data/r8/%s.json"

def warnings():
        #コードと名称の変換
        trans_warning = {
                "02":"暴風雪警報",
                "03":"大雨警報",
                "04":"洪水警報",
                "05":"暴風警報",
                "06":"大雪警報",
                "07":"波浪警報",
                "08":"高潮警報",
                "09":"土砂災害警報",
                "10":"大雨注意報",
                "12":"大雪注意報",
                "13":"風雪注意報",
                "14":"雷注意報",
                "15":"強風注意報",
                "16":"波浪注意報",
                "17":"融雪注意報",
                "18":"洪水注意報",
                "19":"高潮注意報",
                "20":"濃霧注意報",
                "21":"乾燥注意報",
                "22":"なだれ注意報",
                "23":"低温注意報",
                "24":"霜注意報",
                "25":"着氷注意報",
                "26":"着雪注意報",
                "29":"土砂災害注意報",
                "32":"暴風雪特別警報",
                "33":"大雨特別警報",
                "35":"暴風特別警報",
                "36":"大雪特別警報",
                "37":"波浪特別警報",
                "38":"高潮特別警報",
                "39":"土砂災害特別警報",
                "43":"大雨危険警報",
                "48":"高潮危険警報",
                "49":"土砂災害危険警報"}

        #情報の取得
        area_data = urllib.request.urlopen(url=AREA_URL)
        area_data = json.loads(area_data.read())
        area = area_data["class20s"][CLASS_AREA_CODE]["name"]
        class15s_area_code = area_data['class20s'][CLASS_AREA_CODE]['parent']
        class10s_area_code = area_data['class15s'][class15s_area_code]['parent']
        offices_area_code = area_data['class10s'][class10s_area_code]['parent']
        warning_info = urllib.request.urlopen(url=url % (offices_area_code))
        warning_info = json.loads(warning_info.read())
        warning_codes = [warning["code"]
                        for dataTypeCode in warning_info
                        for class_area in dataTypeCode["warning"]['class20Items']
                        if class_area['areaCode'] == CLASS_AREA_CODE
                        for warning in class_area["kinds"]
                        if warning["status"] != "解除" and warning["status"] != "発表警報・注意報はなし"]
        warning_texts = [trans_warning[code] for code in warning_codes]
        return (warning_texts,area)

def main():
        warning_texts,area = warnings()
        print("https://www.jma.go.jp/bosai/warning/#area_type=class20s&area_code=%s&lang=ja" % (CLASS_AREA_CODE))
        print("%sの気象警報・注意報" % area)
        if warning_texts:
                print("\n".join(warning_texts))
        else:
                print("現在発表警報・注意報はありません。")

if __name__ == "__main__":
        main()

前回作ったこれと組み合わせたり、新たに警報・注意報が発表されたときLine等に送信するようにすれば有効活用できるかと思います。
#参考文献
JSONファイルにデータを追加する方法は?
新しい気象庁サイトからJSONデータが取得できる件
気象庁 全国の警報・注意報
「新たな防災気象情報」で提供されるデータはどう変わるのか

17
19
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?