modified: app.py

modified:   templates/index.html
This commit is contained in:
SimolZimol
2024-09-09 19:36:48 +02:00
parent 388eafb978
commit 9a3564a44d
2 changed files with 36 additions and 27 deletions

41
app.py
View File

@@ -12,7 +12,7 @@ def get_weather_data():
try:
# Herunterladen der Datei
response = requests.get(url)
response.raise_for_status() # Check if request was successful
response.raise_for_status() # Überprüfen, ob der Abruf erfolgreich war
# Dekomprimieren der .gz-Datei
file_content = gzip.decompress(response.content)
@@ -27,30 +27,37 @@ def get_weather_data():
except json.JSONDecodeError as e:
return {"error": f"Fehler beim Verarbeiten der Wetterdaten: {e}"}
# Funktion, um die Wetterdaten für eine bestimmte Station zu finden
def find_weather_by_station(station, geojson_data):
# Funktion, um die Wetterdaten für einen bestimmten Ort zu finden
def find_weather_by_city(city, geojson_data):
results = []
for feature in geojson_data['features']:
if station.lower() in feature['properties']['data_004']['value'].lower():
return {
"stationOrSiteName": feature['properties']['data_004']['value'],
"temperature": feature['properties'].get('data_016', {}).get('value', None),
"windSpeed": feature['properties'].get('data_057', {}).get('value', None),
"relativeHumidity": feature['properties'].get('data_015', {}).get('value', None),
"totalPrecipitation": feature['properties'].get('data_021', {}).get('value', None)
station_name = feature['properties']['data_004']['value'] # stationOrSiteName
if city.lower() in station_name.lower():
result = {
"station": station_name,
"temperature": feature['properties']['data_016']['value'],
"precipitation": feature['properties']['data_021']['value'],
"wind_speed": feature['properties']['data_057']['value'],
"humidity": feature['properties']['data_015']['value']
}
return {"error": "Station nicht gefunden"}
results.append(result)
if results:
return results
else:
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 Stationssuche und das Abrufen der Wetterdaten
# Route für die Ortssuche und das Abrufen der Wetterdaten
@app.route('/get_weather')
def get_weather():
station = request.args.get('station', '')
if not station:
return jsonify({"error": "Bitte geben Sie den Namen einer Station ein."})
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()
@@ -58,8 +65,8 @@ def get_weather():
if "error" in weather_data:
return jsonify(weather_data)
# Suche nach dem Wetter für die eingegebene Station
result = find_weather_by_station(station, weather_data)
# Suche nach dem Wetter für den eingegebenen Ort
result = find_weather_by_city(city, weather_data)
return jsonify(result)
if __name__ == '__main__':

View File

@@ -38,7 +38,7 @@
</head>
<body>
<h1>Suche nach Wetterdaten</h1>
<input type="text" id="city-input" placeholder="Geben Sie den Stationsnamen ein" />
<input type="text" id="city-input" placeholder="Geben Sie den Ortsnamen ein" />
<button onclick="fetchWeatherData()">Wetter anzeigen</button>
<div id="weather-container" class="weather-data">
@@ -48,7 +48,7 @@
<script>
async function fetchWeatherData() {
const city = document.getElementById('city-input').value;
const response = await fetch(`/get_weather?station=${city}`);
const response = await fetch(`/get_weather?city=${city}`);
const data = await response.json();
displayWeatherData(data);
}
@@ -60,14 +60,16 @@
if (data.error) {
container.innerHTML = `<p>${data.error}</p>`;
} else {
const weatherHTML = `
<p><strong>Station:</strong> ${data.stationOrSiteName}</p>
<p><strong>Temperatur:</strong> ${data.temperature ? data.temperature + ' °C' : 'Keine Daten verfügbar'}</p>
<p><strong>Windgeschwindigkeit:</strong> ${data.windSpeed ? data.windSpeed + ' m/s' : 'Keine Daten verfügbar'}</p>
<p><strong>Luftfeuchtigkeit:</strong> ${data.relativeHumidity ? data.relativeHumidity + '%' : 'Keine Daten verfügbar'}</p>
<p><strong>Niederschlag:</strong> ${data.totalPrecipitation ? data.totalPrecipitation + ' kg/m²' : 'Keine Daten verfügbar'}</p>
`;
container.innerHTML = weatherHTML;
data.forEach(item => {
const weatherHTML = `
<p><strong>Ort:</strong> ${item.station}</p>
<p><strong>Temperatur:</strong> ${item.temperature || "N/A"} °C</p>
<p><strong>Windgeschwindigkeit:</strong> ${item.wind_speed || "N/A"} m/s</p>
<p><strong>Luftfeuchtigkeit:</strong> ${item.humidity || "N/A"} %</p>
<p><strong>Niederschlag:</strong> ${item.precipitation || "N/A"} kg/m²</p>
`;
container.innerHTML += weatherHTML;
});
}
}
</script>