import requests import bz2 import json from flask import Flask, render_template app = Flask(__name__) # DWD-Daten URL DWD_URL = "https://opendata.dwd.de/weather/weather_reports/synoptic/germany/json/Z__C_EDZW_latest_bda01%2Csynop_bufr_GER_999999_999999__MW_XXX.json.bz2" def load_weather_data(): # Hole die komprimierten Daten von der DWD-URL response = requests.get(DWD_URL) # Dekomprimieren der bz2-Daten decompressed_data = bz2.decompress(response.content) # Parsen der JSON-Daten data = json.loads(decompressed_data.decode('utf-8')) # Debug: Ausgabe der ersten Nachricht für Analysezwecke print(json.dumps(data["messages"][:1], indent=4)) # Extrahieren der relevanten Wetterdaten weather_data = [] # Verarbeite die Nachrichten for message in data["messages"]: # Debug: Nachricht anzeigen, um zu überprüfen, ob sie korrekt verarbeitet wird print(f"Processing message: {message}") # Prüfen, ob message eine Liste ist if isinstance(message, list): for station_data in message[1:]: # Die eigentlichen Wetterdaten scheinen ab dem zweiten Element zu sein station_info = {} if isinstance(station_data, list): for info in station_data: # Prüfe, ob info ein Dictionary ist if isinstance(info, dict): # Debug: Anzeigen, was info ist print(f"Processing station info: {info}") if "key" in info: if info["key"] == "stationNumber": station_info["stationNumber"] = info["value"] elif info["key"] == "stationOrSiteName": station_info["stationName"] = info["value"] elif info["key"] == "airTemperature": station_info["temperature"] = round(info["value"] - 273.15, 2) # Umwandlung von K in °C elif info["key"] == "windSpeed": station_info["windSpeed"] = info["value"] elif info["key"] == "pressureReducedToMeanSeaLevel": station_info["pressure"] = info["value"] # Nur vollständige Datensätze hinzufügen if "stationNumber" in station_info: weather_data.append(station_info) # Sortiere nach stationNumber weather_data.sort(key=lambda x: x["stationNumber"]) return weather_data # Flask Route für die Hauptseite @app.route('/') def index(): # Lade und verarbeite die Wetterdaten weather_data = load_weather_data() # Render die HTML-Seite mit den Wetterdaten return render_template('index.html', weather_data=weather_data) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)