modified: app.py
modified: templates/index.html
This commit is contained in:
41
app.py
41
app.py
@@ -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__':
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user