Files
Scripts/scripte/wetterdaten/weather_script.py
T
admin a51a493665 Upload Weather Script.
Abgreifen von wetterdaten über API
2026-07-05 09:54:03 +00:00

114 lines
3.1 KiB
Python

import requests
import mariadb
import sys
import os
from datetime import datetime
from dotenv import load_dotenv
# Umgebungsvariablen aus .env laden
load_dotenv()
# --- Konfiguration ---
API_KEY = os.getenv("OWM_API_KEY")
CITY = "Berlin"
UNITS = "metric" # metric = Celsius, imperial = Fahrenheit
DB_CONFIG = {
"user": os.getenv("DB_USER", "root"),
"password": os.getenv("DB_PASSWORD", ""),
"host": os.getenv("DB_HOST", "127.0.0.1"),
"port": int(os.getenv("DB_PORT", 3306)),
"database": os.getenv("DB_NAME", "weather_db"),
}
def fetch_weather(city):
"""Ruft Wetterdaten von der OpenWeatherMap-API ab."""
url = "https://api.openweathermap.org/data/2.5/weather"
params = {
"q": city,
"appid": API_KEY,
"units": UNITS,
"lang": "de",
}
try:
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Fehler beim Abrufen der Wetterdaten: {e}")
return None
def parse_weather(data):
"""Extrahiert die relevanten Felder aus der API-Antwort."""
return {
"city": data["name"],
"country": data["sys"].get("country", ""),
"temperature": data["main"]["temp"],
"feels_like": data["main"]["feels_like"],
"humidity": data["main"]["humidity"],
"pressure": data["main"]["pressure"],
"wind_speed": data["wind"]["speed"],
"description": data["weather"][0]["description"],
}
def save_to_db(weather):
"""Speichert die Wetterdaten in der MariaDB."""
try:
conn = mariadb.connect(**DB_CONFIG)
except mariadb.Error as e:
print(f"Fehler bei der DB-Verbindung: {e}")
sys.exit(1)
cursor = conn.cursor()
sql = """
INSERT INTO weather_data
(city, country, temperature, feels_like, humidity,
pressure, wind_speed, description, recorded_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
values = (
weather["city"],
weather["country"],
weather["temperature"],
weather["feels_like"],
weather["humidity"],
weather["pressure"],
weather["wind_speed"],
weather["description"],
datetime.now(),
)
try:
cursor.execute(sql, values)
conn.commit()
print(f"Daten gespeichert (ID: {cursor.lastrowid})")
except mariadb.Error as e:
print(f"Fehler beim Speichern: {e}")
conn.rollback()
finally:
cursor.close()
conn.close()
def main():
if not API_KEY:
print("Fehler: OWM_API_KEY nicht gesetzt. Bitte in .env eintragen.")
sys.exit(1)
print(f"Rufe Wetterdaten für '{CITY}' ab...")
data = fetch_weather(CITY)
if data:
weather = parse_weather(data)
print(f"Temperatur: {weather['temperature']}°C, "
f"{weather['description']}")
save_to_db(weather)
if __name__ == "__main__":
main()