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()