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