modified: app.py

This commit is contained in:
SimolZimol
2024-09-10 10:21:18 +02:00
parent db03079370
commit e0ba1213eb

57
app.py
View File

@@ -5,47 +5,28 @@ from flask import Flask, jsonify
app = Flask(__name__)
# Funktion zum Herunterladen und Entpacken der BZ2-Datei
def get_weather_data():
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'
response = requests.get(url)
# Entpacke die BZ2-Datei
decompressed_data = bz2.decompress(response.content)
# Lade das JSON aus den entpackten Daten
weather_data = json.loads(decompressed_data.decode('utf-8'))
return weather_data
# URL zur komprimierten Wetterdatei
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"
# API-Route, um die Wetterdaten an den Client zurückzugeben
# Funktion zum Herunterladen und Entpacken der bz2-Datei
def download_and_extract(url):
response = requests.get(url)
if response.status_code == 200:
compressed_content = response.content
decompressed_content = bz2.decompress(compressed_content)
return decompressed_content
else:
return None
# Flask-Route, die die Wetterdaten bereitstellt
@app.route('/weather')
def weather():
data = get_weather_data()
# Beispiel: Extrahiere spezifische Wetterinformationen aus den Daten
# In diesem Fall Temperatur, Luftfeuchtigkeit und Druck
weather_info = []
for message in data['messages']:
for subset in message[1:]:
for item in subset:
if isinstance(item, list):
weather_record = {}
for entry in item:
if entry['key'] == 'stationOrSiteName':
weather_record['station'] = entry['value']
if entry['key'] == 'airTemperature':
weather_record['temperature'] = entry['value'] - 273.15 # K -> °C
if entry['key'] == 'pressureReducedToMeanSeaLevel':
weather_record['pressure'] = entry['value'] / 100 # Pa -> hPa
if entry['key'] == 'relativeHumidity':
weather_record['humidity'] = entry['value']
if weather_record:
weather_info.append(weather_record)
return jsonify(weather_info)
data = download_and_extract(url)
if data:
weather_data = json.loads(data)
return jsonify(weather_data)
else:
return jsonify({"error": "Fehler beim Abrufen der Wetterdaten"}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)