diff --git a/main.py b/main.py index aab2504..ff74058 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,24 @@ -from main_start import QUERY +import logging from overpass import fetch_overpass +from queries.bergbahn import BERGBAHN_QUERY +from queries.restaurant import RESTAURANT_QUERY import requests +# --------------------------------------------------------------------------- +# Logging konfigurieren +# --------------------------------------------------------------------------- + +# Erinnerung: Log-Levels -> DEBUG, INFO, WARNING, ERROR, CRITICAL + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s", + datefmt="%H:%M:%S", +) +logger = logging.getLogger(__name__) + + # --------------------------------------------------------------------------- # Konfiguration # --------------------------------------------------------------------------- @@ -12,17 +28,7 @@ BBOXEN = { "schweiz": (45.8, 5.9, 47.8, 10.5), } -QUERY = """ - [out:json][timeout:2][maxsize:500000]; - ( - node["aerialway"="station"]({bbox}); - way["aerialway"="station"]({bbox}); - node["railway"="funicular"]({bbox}); - way["railway"="funicular"]({bbox}); - node["railway"="station"]["funicular"="yes"]({bbox}); - ); - out center body; - """ +QUERY = {"bergbahn": BERGBAHN_QUERY} # --------------------------------------------------------------------------- @@ -30,18 +36,29 @@ QUERY = """ # --------------------------------------------------------------------------- def main() -> None: + query_name = list(QUERY.keys())[0] + for name, bbox in BBOXEN.items(): + logger.info(f"Starte Abfrage für Query: {query_name}, '{name}' mit bbox={bbox}") try: - result = fetch_overpass(overpass_query=QUERY, bbox=bbox) + result = fetch_overpass(overpass_query=QUERY.get(query_name,""), bbox=bbox) except RuntimeError as e: - print(f"API-Fehler bei '{name}': {e}") + logger.error(f"API-Fehler bei '{name}': {e}") continue except requests.Timeout: - print(f"Timeout bei '{name}' — bbox zu gross oder Server überlastet") + logger.error(f"Timeout bei '{name}' — bbox zu gross oder Server überlastet") continue elements = result.get("elements", []) - print(elements) + logger.info(f"'{name}': {len(elements)} Elemente gefunden") + + for el in elements: + el_type = el.get("type", "?") + tags = el.get("tags", {}) + el_name = tags.get("name", "–") + logger.debug(f" [{el_type}] {el_name}") + + logger.info("Fertig.") if __name__ == "__main__": @@ -49,24 +66,17 @@ if __name__ == "__main__": # Was ist passiert? - # * Wir haben die Logik in ein eigenes Modul 'overpass' verfrachtet - # * Wir haben die Funktion von einer reinen Bergbahn-Logik befreit und für alle möglichen Overpass-Queries bereit - # gemacht (generalisiert) + # * Wir haben den Logger eingebaut und können auf verschiedenen Levels loggen + # * Wir haben ein neues Model 'queries' erstellt und darin die Queries für bergbahn und restaurant abgelegt. + # -> Prinzip der Trennung von Daten und Logik! # TASK: - # * Jetzt wäre doch ein guter Zeitpunkt um anstelle der print-Statements das Logging einzubauen -> verwendet das - # Logging-Modul in Python und ersetzt die print-statements! - # * Hier haben wir einen weiteren Query für restaurants -> bildet ein neues Modul 'queries' und baut dort sowohl den - # Bergbahn- als auch den Restaurant-Query ein: - # - # RESTAURANT_QUERY = """ - # [out:json][timeout:15][maxsize:500000]; - # ( - # node["amenity"="restaurant"]({bbox}); - # way["amenity"="restaurant"]({bbox}); - # node["amenity"="cafe"]({bbox}); - # way["amenity"="cafe"]({bbox}); - # ); - # out center body; - # """ \ No newline at end of file + # * bbox für Schweiz scheint zu gross und wirft einen error ... Lösungsmöglichkeiten? + # -> Wir können die Schweiz (Koordinaten) in Unterregionen aufsplitten. Macht das bitte. + # -> entfernt dazu die bbox für 'davos', nehmt die 'schweiz' und splittet sie in 4, 9 oder 16 + # Koordinaten-Tuples auf. + # * Speichert und loggt in welchen Koordinaten-Tuples ein Fehler auftritt (gebt am Schluss eine Zusammenfassung + # dieser fehlerhaften Queries aus) + # * Baut eine neue Liste für die erfolgreichen Resultate und speichert diese Liste am Schluss als .json auf + # eurer Festplatte \ No newline at end of file diff --git a/queries/__init__.py b/queries/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/queries/__pycache__/__init__.cpython-313.pyc b/queries/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..f53a165 Binary files /dev/null and b/queries/__pycache__/__init__.cpython-313.pyc differ diff --git a/queries/__pycache__/bergbahn.cpython-313.pyc b/queries/__pycache__/bergbahn.cpython-313.pyc new file mode 100644 index 0000000..337ad29 Binary files /dev/null and b/queries/__pycache__/bergbahn.cpython-313.pyc differ diff --git a/queries/__pycache__/restaurant.cpython-313.pyc b/queries/__pycache__/restaurant.cpython-313.pyc new file mode 100644 index 0000000..203dfbb Binary files /dev/null and b/queries/__pycache__/restaurant.cpython-313.pyc differ diff --git a/queries/bergbahn.py b/queries/bergbahn.py new file mode 100644 index 0000000..0f1cc87 --- /dev/null +++ b/queries/bergbahn.py @@ -0,0 +1,12 @@ + +BERGBAHN_QUERY = """ +[out:json][timeout:10][maxsize:500000]; +( + node["aerialway"="station"]({bbox}); + way["aerialway"="station"]({bbox}); + node["railway"="funicular"]({bbox}); + way["railway"="funicular"]({bbox}); + node["railway"="station"]["funicular"="yes"]({bbox}); +); +out center body; +""" \ No newline at end of file diff --git a/queries/restaurant.py b/queries/restaurant.py new file mode 100644 index 0000000..1167778 --- /dev/null +++ b/queries/restaurant.py @@ -0,0 +1,11 @@ + +RESTAURANT_QUERY = """ +[out:json][timeout:10][maxsize:500000]; +( + node["amenity"="restaurant"]({bbox}); + way["amenity"="restaurant"]({bbox}); + node["amenity"="cafe"]({bbox}); + way["amenity"="cafe"]({bbox}); +); +out center body; +""" \ No newline at end of file