modified: app.py

This commit is contained in:
SimolZimol
2024-09-10 09:25:45 +02:00
parent 4eb2f395d5
commit 32ee77af8b

67
app.py
View File

@@ -23,45 +23,50 @@ def fetch_weather_data():
else:
return {"error": "Fehler beim Abrufen der Wetterdaten"}
def process_weather_data(data):
# Hier filtern wir relevante Daten aus den 16 Elementen des JSON
processed_data = []
def extract_relevant_data(weather_data):
# Extrahiere die Stationen-Daten aus dem JSON
stations_data = []
# "messages" enthält eine Liste von 16 Elementen (Stationen)
for message in weather_data['messages']:
station_info = {}
# Extrahiere allgemeine Stationsinformationen
station_info['Station_Name'] = None
station_info['Temperatur'] = None
station_info['Luftdruck (Pa)'] = None
station_info['Windgeschwindigkeit (m/s)'] = None
station_info['Windrichtung (Grad)'] = None
for entry in data["messages"]:
for subset in entry:
station_name = next((item["value"] for item in subset if item["key"] == "stationOrSiteName"), None)
temperature = next((item["value"] for item in subset if item["key"] == "airTemperature"), None)
wind_speed = next((item["value"] for item in subset if item["key"] == "windSpeed"), None)
pressure = next((item["value"] for item in subset if item["key"] == "pressureReducedToMeanSeaLevel"), None)
humidity = next((item["value"] for item in subset if item["key"] == "relativeHumidity"), None)
visibility = next((item["value"] for item in subset if item["key"] == "horizontalVisibility"), None)
# Erstelle ein lesbares Format
station_data = {
"station": station_name,
"temperature": round(temperature - 273.15, 2) if temperature else None, # Konvertiere von Kelvin zu Celsius
"wind_speed": wind_speed,
"pressure": pressure,
"humidity": humidity,
"visibility": visibility
}
processed_data.append(station_data)
# Gehe durch die Einträge für jede Station
for entry in message:
if entry['key'] == 'stationOrSiteName':
station_info['Station_Name'] = entry['value']
elif entry['key'] == 'airTemperature':
station_info['Temperatur'] = entry['value'] - 273.15 # Umwandeln von Kelvin in Celsius
elif entry['key'] == 'pressureReducedToMeanSeaLevel':
station_info['Luftdruck (Pa)'] = entry['value']
elif entry['key'] == 'windSpeed':
station_info['Windgeschwindigkeit (m/s)'] = entry['value']
elif entry['key'] == 'windDirection':
station_info['Windrichtung (Grad)'] = entry['value']
# Füge nur vollständig erfasste Stationen hinzu
if station_info['Station_Name'] and station_info['Temperatur'] is not None:
stations_data.append(station_info)
# Filtere nur die Einträge, die eine Stationsinformation enthalten
processed_data = [entry for entry in processed_data if entry["station"]]
return processed_data
return stations_data
@app.route('/weather')
def get_weather():
# Abrufen der Wetterdaten
data = fetch_weather_data()
if "error" in data:
return jsonify(data)
# Extrahiere relevante Daten
relevant_data = extract_relevant_data(data)
processed_data = process_weather_data(data)
return jsonify(processed_data)
# Ausgabe der lesbaren Daten
return jsonify(relevant_data)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)