File: update_warncell_list.py

package info (click to toggle)
python-dwdwfsapi 1.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 776 kB
  • sloc: python: 739; makefile: 3
file content (54 lines) | stat: -rw-r--r-- 1,588 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""DWD WFS API - Utility module to update warncells.md."""

from __future__ import annotations

import urllib.parse

import requests

AREAS = {
    "Gemeinden": "dwd:Warngebiete_Gemeinden",
    "Landkreise": "dwd:Warngebiete_Kreise",
    "Binnenseen": "dwd:Warngebiete_Binnenseen",
    "Küste": "dwd:Warngebiete_Kueste",
}


def fetch_json(layer: str) -> dict:
    """Fetch data via json."""
    url = (
        "https://maps.dwd.de/geoserver/dwd/ows?service=WFS"
        + "&version=2.0.0&request=GetFeature&typeName="
        + urllib.parse.quote(layer)
        + "&OutputFormat=application/json"
    )
    response = requests.get(url=url, timeout=10.0)
    return response.json()


def parse_json(section: str, data: dict) -> tuple[str, str, str]:
    """Parse json data."""
    stations = []
    for x in data["features"]:
        cellid = str(x["properties"]["WARNCELLID"])
        name = x["properties"]["NAME"]
        stations.append((cellid, section, name))
    return stations


# Fetch and sort all available stations
all_stations = []
for category, area in AREAS.items():
    print(f"Fetching {category}")
    all_stations.extend(parse_json(category, fetch_json(area)))
all_stations.sort(key=lambda x: x[0])

print("Updating warncells.md")
with open("warncells.md", "w", encoding="utf-8") as f:
    print("| Warncell ID | Gebietstyp | Name |", file=f)
    print("|-------------|------------|------|", file=f)
    for warncell in all_stations:
        output = "| " + warncell[0] + " | " + warncell[1] + " | " + warncell[2] + " |"
        print(output, file=f)

    f.close()