Files
AktienKurse/kurse.py
2025-10-19 17:13:12 +02:00

80 lines
3.3 KiB
Python

import pandas as pd
import yfinance as yf
from datetime import datetime
def lade_kurse(csv_datei: str, ausgabe_datei: str = "kurse.csv",
influx_url: str = None, influx_token: str = None,
influx_org: str = None, influx_bucket: str = None):
# CSV lesen, erwartet Spalte 'Symbol'
daten = pd.read_csv(csv_datei)
if 'Symbol' not in daten.columns:
raise ValueError("CSV-Datei benötigt eine Spalte mit dem Namen 'Symbol'.")
symbole = daten['Symbol'].dropna().unique()
# Kursdaten von Yahoo Finance abrufen
kurs_liste = []
for symbol in symbole:
try:
ticker = yf.Ticker(symbol)
info = ticker.history(period='1d')
if not info.empty:
letzter_kurs = info['Close'].iloc[-1]
kurs_liste.append({"Symbol": symbol, "Letzter_Kurs": letzter_kurs})
else:
kurs_liste.append({"Symbol": symbol, "Letzter_Kurs": None})
except Exception as e:
kurs_liste.append({"Symbol": symbol, "Letzter_Kurs": None, "Fehler": str(e)})
# Ergebnisse speichern
df_kurse = pd.DataFrame(kurs_liste)
df_kurse.to_csv(ausgabe_datei, index=False)
print(f"Kurse wurden erfolgreich in {ausgabe_datei} gespeichert.")
# Optional: in InfluxDB schreiben (InfluxDB 2.x client)
if influx_url and influx_token and influx_org and influx_bucket:
try:
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS
except ImportError:
print("Package 'influxdb-client' nicht installiert. Installiere mit: pip install influxdb-client")
return
client = InfluxDBClient(url=influx_url, token=influx_token, org=influx_org)
# synchronen Schreibmodus verwenden, damit keine Hintergrund-Threads offen bleiben
write_api = client.write_api(write_options=SYNCHRONOUS)
punkte = []
jetzt = datetime.utcnow()
for eintrag in kurs_liste:
symbol = eintrag.get("Symbol")
kurs = eintrag.get("Letzter_Kurs")
# Nur tatsächliche Kurse schreiben
if kurs is None:
continue
try:
punkt = Point("aktien") \
.tag("symbol", str(symbol)) \
.field("letzter_kurs", float(kurs)) \
.time(jetzt, WritePrecision.S)
punkte.append(punkt)
except Exception as e:
print(f"Fehler beim Erstellen des Influx-Punktes für {symbol}: {e}")
if punkte:
try:
write_api.write(bucket=influx_bucket, org=influx_org, record=punkte)
# write_api synchron geschlossen, dann client schließen
write_api.close()
print(f"{len(punkte)} Kurse in InfluxDB-Bucket '{influx_bucket}' geschrieben.")
except Exception as e:
print(f"Fehler beim Schreiben in InfluxDB: {e}")
client.close()
# Beispielaufruf (entferne Kommentar zur Nutzung)
lade_kurse('meine_aktien.csv',
influx_url='http://192.168.178.102:8086',
influx_token='aPJDBRd27Te5IEz1k7SM5mii-PZzmhXFsCkKxzddm-NSc6EIzimCEGPt_iXT6kRj0IWHo8OhFu9lEnapTMWMQA==',
influx_org='inflx-aktien',
influx_bucket='aktienkurse')