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 # --------------------------------------------------------------------------- BBOXEN = { "davos": (46.72, 9.70, 46.92, 10.00), "schweiz": (45.8, 5.9, 47.8, 10.5), } QUERY = {"bergbahn": BERGBAHN_QUERY} # --------------------------------------------------------------------------- # Hauptlogik # --------------------------------------------------------------------------- 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.get(query_name,""), bbox=bbox) except RuntimeError as e: logger.error(f"API-Fehler bei '{name}': {e}") continue except requests.Timeout: logger.error(f"Timeout bei '{name}' — bbox zu gross oder Server überlastet") continue elements = result.get("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__": main() # Was ist passiert? # * 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: # * 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