modified: app.py

modified:   templates/index.html
This commit is contained in:
SimolZimol
2024-09-10 11:45:47 +02:00
parent efe33b2f0c
commit 9b480d9528
2 changed files with 76 additions and 37 deletions

42
app.py
View File

@@ -1,7 +1,7 @@
import requests
import bz2
import json
from flask import Flask, jsonify
from flask import Flask, jsonify, render_template
app = Flask(__name__)
@@ -16,17 +16,55 @@ def download_and_extract(url):
decompressed_content = bz2.decompress(compressed_content)
return decompressed_content
else:
print(f"Fehler beim Abrufen der Datei: {response.status_code}")
return None
# Funktion zum Extrahieren der relevanten Wetterdaten
def extract_weather_data(messages):
weather_info = []
# Iteriere durch jede Nachricht (jeder Block enthält die Daten einer Wetterstation)
for message in messages:
station_info = {}
# Iteriere durch die Schlüssel-Wert-Paare in jeder Nachricht
for item in message:
if isinstance(item, list):
for subitem in item:
if isinstance(subitem, dict):
# Extrahiere die Stationsinformationen
if subitem.get('key') == "stationOrSiteName":
station_info['station'] = subitem.get('value')
elif subitem.get('key') == "airTemperature":
station_info['temperature'] = subitem.get('value') - 273.15 # Umrechnung von Kelvin in Celsius
elif subitem.get('key') == "pressureReducedToMeanSeaLevel":
station_info['pressure'] = subitem.get('value') / 100 # Umrechnung in hPa
elif subitem.get('key') == "windSpeed":
station_info['wind_speed'] = subitem.get('value')
elif subitem.get('key') == "cloudCoverTotal":
station_info['cloud_cover'] = subitem.get('value')
# Wenn wir Informationen für diese Station gefunden haben, fügen wir sie zur Liste hinzu
if station_info:
weather_info.append(station_info)
return weather_info
# Flask-Route, die die Wetterdaten bereitstellt
@app.route('/weather')
def weather():
data = download_and_extract(url)
if data:
weather_data = json.loads(data)
weather_data_json = json.loads(data)
weather_data = extract_weather_data(weather_data_json["messages"])
return jsonify(weather_data)
else:
return jsonify({"error": "Fehler beim Abrufen der Wetterdaten"}), 500
# Route für die Hauptseite
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

View File

@@ -3,65 +3,66 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wetterdaten</title>
<title>Aktuelle Wetterdaten</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
h1 {
background-color: #f4f4f4;
text-align: center;
}
.weather-container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.weather-card {
border: 1px solid #ccc;
padding: 15px;
margin-bottom: 10px;
background-color: white;
border-radius: 8px;
background-color: #f9f9f9;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
margin: 10px;
padding: 20px;
display: inline-block;
width: 300px;
}
.weather-card h2 {
margin-top: 0;
h1 {
color: #333;
}
</style>
</head>
<body>
<h1>Aktuelle Wetterdaten</h1>
<div id="weather-container" class="weather-container">
<p>Lade Wetterdaten...</p>
<h1>Aktuelle Wetterdaten von DWD</h1>
<div id="weather-container">
<p>Daten werden geladen...</p>
</div>
<script>
// Funktion zum Abrufen der Wetterdaten
// Funktion zum Abrufen und Anzeigen der Wetterdaten
async function fetchWeatherData() {
const response = await fetch('/weather');
const data = await response.json();
const container = document.getElementById('weather-container');
container.innerHTML = ''; // Vorherige Inhalte löschen
try {
const response = await fetch('/weather');
const data = await response.json();
// Überprüfen, ob Daten vorhanden sind
if (data.length > 0) {
const container = document.getElementById('weather-container');
container.innerHTML = ''; // Leere den Container
// Iteriere durch die Wetterdaten und erstelle HTML-Elemente für jede Station
data.forEach(station => {
const weatherCard = document.createElement('div');
weatherCard.className = 'weather-card';
weatherCard.innerHTML = `
<h2>Station: ${station.station}</h2>
<p>Temperatur: ${station.temperature.toFixed(2)} °C</p>
<p>Luftdruck: ${station.pressure} Pa</p>
const stationDiv = document.createElement('div');
stationDiv.className = 'weather-card';
stationDiv.innerHTML = `
<h2>${station.station}</h2>
<p>Temperatur: ${station.temperature.toFixed(2)}°C</p>
<p>Luftdruck: ${station.pressure} hPa</p>
<p>Windgeschwindigkeit: ${station.wind_speed} m/s</p>
<p>Wolkenbedeckung: ${station.cloud_cover}%</p>
`;
container.appendChild(weatherCard);
container.appendChild(stationDiv);
});
} else {
container.innerHTML = '<p>Keine Wetterdaten verfügbar</p>';
} catch (error) {
console.error('Fehler beim Abrufen der Wetterdaten:', error);
document.getElementById('weather-container').innerHTML = '<p>Fehler beim Abrufen der Daten.</p>';
}
}
// Rufe die Wetterdaten beim Laden der Seite ab
// Daten beim Laden der Seite abrufen
window.onload = fetchWeatherData;
</script>
</body>