modified: app.py

This commit is contained in:
SimolZimol
2024-09-10 09:19:03 +02:00
parent 5bd23c58b3
commit 092978bf8b

71
app.py
View File

@@ -1,65 +1,32 @@
import requests
import gzip
import bz2
import json
from flask import Flask, request, jsonify, render_template
from flask import Flask, jsonify
app = Flask(__name__)
# Funktion zum Abrufen und Dekomprimieren der GeoJSON-Daten
def get_weather_data():
url = 'https://opendata.dwd.de/weather/weather_reports/synoptic/germany/geojson/Z__C_EDZW_20240910070400_bda01%2Csynop_bufr_GER_999999_999999__MW_054.geojson.gz'
# URL der komprimierten JSON-Datei
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 fetch_weather_data():
# Download der komprimierten Datei
response = requests.get(URL)
try:
# Herunterladen der Datei
response = requests.get(url)
response.raise_for_status() # Check if request was successful
# Dekomprimieren der .gz-Datei
file_content = gzip.decompress(response.content)
if response.status_code == 200:
# Entpacke die bz2-Datei
compressed_content = bz2.decompress(response.content)
# In JSON konvertieren
geojson_data = json.loads(file_content)
# Konvertiere die Bytes zu einem JSON-Objekt
weather_data = json.loads(compressed_content.decode('utf-8'))
return geojson_data
except requests.exceptions.RequestException as e:
return {"error": f"Fehler beim Abrufen der Wetterdaten: {e}"}
except json.JSONDecodeError as e:
return {"error": f"Fehler beim Verarbeiten der Wetterdaten: {e}"}
return weather_data
else:
return {"error": "Fehler beim Abrufen der Wetterdaten"}
# Funktion, um die Wetterdaten für einen bestimmten Ort zu finden
def find_weather_by_city(city, geojson_data):
for feature in geojson_data['features']:
if city.lower() in feature['properties']['STATION'].lower():
return {
"station": feature['properties']['STATION'],
"temperature": feature['properties']['TTT'],
"wind_speed": feature['properties']['FF'],
"humidity": feature['properties']['RH']
}
return {"error": "Ort nicht gefunden"}
# Route zum Laden der Startseite (index.html)
@app.route('/')
def home():
return render_template('index.html')
# Route für die Ortssuche und das Abrufen der Wetterdaten
@app.route('/get_weather')
@app.route('/weather')
def get_weather():
city = request.args.get('city', '')
if not city:
return jsonify({"error": "Bitte geben Sie einen Ortsnamen ein."})
# Abrufen der Wetterdaten
weather_data = get_weather_data()
if "error" in weather_data:
return jsonify(weather_data)
# Suche nach dem Wetter für den eingegebenen Ort
result = find_weather_by_city(city, weather_data)
return jsonify(result)
data = fetch_weather_data()
return jsonify(data)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)