Bundestagswahl 2025 mit Python Script und Yaml

Bundestagswahl 2025 Wahlergebnisse

(1)
Ich habe mal ein Python Script mithilfe von ChatGPT zum Thema Bundestagswahl 2025 erstellt.

Dieses Script soll die XML Datei herunterladen und auswerten.
Habe die Datei in /config/python_scripts erstellt. Der Datei wurde fetch_latest_results.py.

Des Weiteren habe ich der Configuartion.yaml folgendes ergänzt:

# Python-Skript in Home Assistant
python_script:

(2)
Im 2. Schritt erstellte ich in _packages (habe meine Configuration ausgelagert) eine Yaml Datei namens bundestagswahl.yaml, den den Sensor dazu bereitstellt. Erste Test zeigen, dass es so funktionieren sollte.

Viel Spaß beim Ausprobieren

(1)

import requests
import xml.etree.ElementTree as ET
import json
import re

# Basis-URL des Verzeichnisses mit den XML-Dateien
base_url = "https://www.bundeswahlleiterin.de/bundestagswahlen/2025/ergebnisse/opendata/btw25/daten/"

# Temporäre Datei für die XML-Daten
xml_file_path = "/config/tmp_bundestagswahl.xml"

# 1️⃣ Verzeichnisinhalt abrufen (um neueste Datei zu finden)
try:
    response = requests.get(base_url, timeout=10)  # Timeout für bessere Fehlerbehandlung
    response.raise_for_status()  # Falls HTTP-Fehler auftritt, Exception auslösen
except requests.RequestException as e:
    print(json.dumps({"Fehler": f"Verzeichnisabruf fehlgeschlagen: {e}"}))
    exit(1)

# 2️⃣ Neueste XML-Datei aus der HTML-Seite extrahieren
matches = re.findall(r'href="([^"]+\.xml)"', response.text)

if not matches:
    print(json.dumps({"Fehler": "Keine XML-Dateien gefunden"}))
    exit(1)

latest_xml_filename = sorted(matches, reverse=True)[0]  # Neueste Datei bestimmen
latest_xml_url = base_url + latest_xml_filename

# 3️⃣ XML-Datei herunterladen
try:
    response = requests.get(latest_xml_url, timeout=10)
    response.raise_for_status()
    with open(xml_file_path, "wb") as file:
        file.write(response.content)
    print(f"XML-Datei erfolgreich heruntergeladen: {latest_xml_filename}")
except requests.RequestException as e:
    print(json.dumps({"Fehler": f"Download fehlgeschlagen: {e}"}))
    exit(1)

# 4️⃣ XML-Datei parsen und Wahlergebnisse extrahieren
try:
    with open(xml_file_path, "r", encoding="utf-8") as file:
        xml_data = file.read()

    root = ET.fromstring(xml_data)

    # Ergebnisse sammeln
    results = {}
    for party in root.findall("Partei"):
        name = party.find("Name").text
        votes = party.find("Stimmen").text
        percentage = party.find("Prozent").text

        results[name] = {
            "stimmen": votes,
            "prozent": percentage
        }

    # Falls keine Parteien gefunden wurden, Fehler setzen
    if not results:
        results = {"Fehler": "Keine Wahlergebnisse verfügbar"}

    # 5️⃣ Ergebnisse im JSON-Format für Home Assistant ausgeben
    print(json.dumps(results, indent=4, ensure_ascii=False))

except Exception as e:
    print(json.dumps({"Fehler": f"Parsing fehlgeschlagen: {e}"}))

(2)
´``yaml
sensor:
command_line:

  • sensor:
    name: „Aktuelle Bundestagswahlergebnisse“
    unique_id: Bundestagswahl
    command: „python3 /config/python_scripts/fetch_latest_results.py“
    scan_interval: 300 # alle 5 Minuten aktualisieren
    json_attributes:
2 „Gefällt mir“

Hallo,
mal was anderes. Thematik interessant und aktuell, aber braucht man das in dieser Form :question::wink:

Gruß Kalle

Die Idee finde ich cool aber ist natürlich nur eine Einmalsache. Daher wäre es mir der Aufwand nicht wert. Danke Dir!

2 „Gefällt mir“