diff --git a/scripte/wetterdaten/.env b/scripte/wetterdaten/.env new file mode 100644 index 0000000..df1a289 --- /dev/null +++ b/scripte/wetterdaten/.env @@ -0,0 +1,6 @@ +OWM_API_KEY=ea645349e2fbb2ff573104bdd6763604 +DB_USER=root +DB_PASSWORD=dein_db_passwort +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_NAME=weather_db \ No newline at end of file diff --git a/scripte/wetterdaten/README.md b/scripte/wetterdaten/README.md new file mode 100644 index 0000000..34bcc69 --- /dev/null +++ b/scripte/wetterdaten/README.md @@ -0,0 +1,29 @@ +**1. Voraussetzungen installieren** + +``` +pip install requests mariadb python-dotenv +``` + +**2. Datenbank Vorbereiten** + +``` +CREATE DATABASE weather_db; + +USE weather_db; + +CREATE TABLE weather_data ( + id INT AUTO_INCREMENT PRIMARY KEY, + city VARCHAR(100) NOT NULL, + country VARCHAR(10), + temperature FLOAT, + feels_like FLOAT, + humidity INT, + pressure INT, + wind_speed FLOAT, + description VARCHAR(255), + recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +``` + +**3. Script und .env Datei ablegen und bearbeiten** diff --git a/scripte/wetterdaten/weather_script.py b/scripte/wetterdaten/weather_script.py new file mode 100644 index 0000000..3761c31 --- /dev/null +++ b/scripte/wetterdaten/weather_script.py @@ -0,0 +1,114 @@ +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() \ No newline at end of file