modified: app.py
This commit is contained in:
57
app.py
57
app.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user