Ics Datei mit mehreren Ereignissen

Elite12334

Cadet 3rd Year
Registriert
Juni 2020
Beiträge
45
Moin,
kann mir jemand erklären wie ich innerhalb einer ics mehrere Ereignisse eintragen kann, sodass ich durch das öffnen einer Datei einige Termine in den iCal eintragen kann?

Oder wäre da eine andere Lösung nötig?
Ich werde die Daten dafür aus einer Excel Tabelle ziehen, falls das hilft.
 
Schau dir mal die Syntax für ICS an, wobei ich auf meiner Suche damals nie eine vollständige Beschreibung aller Elemente finden konnte.

Ich habe einen Abfallkalender export von unserem Anbieter verwendet und herumprobiert. Im Prinzip bleibt der Rahmen mit BEGIN:CALENDAR erhalten und der Inhalt ab BEGIN:VEVENT wird angepasst. Du kannst diese Begin/End einträge beliebig aneinanderhängen. Nur die UID sollte einzigartig sein - kann man aber auch weglassen...

Code:
BEGIN:VCALENDAR
PRODID:-//K4SYSTEMS//ABFALLPLUS//DE
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-TIMEZONE:Europe/Berlin
X-MS-OLK-FORCEINSPECTOROPEN:FALSE
X-WR-CALNAME:Abfuhrtermine XYZ
X-WR-RELCALID:9d157c4f22d930677697a19a22059feb

Code:
BEGIN:VEVENT
DTSTART;VALUE=DATE:20230102
DTEND;VALUE=DATE:20230103
DTSTAMP:20230829T054149Z
UID:5b7b6aa4f40377cb823e37d0adb6a695
CREATED:20230101T090000Z
DESCRIPTION:Rest-/Biomüll 4-Radbehälter wöchentlich nicht vergessen!
LAST-MODIFIED:20230101T090000Z
LOCATION:XYZ
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Rest-/Biomüll 4-Radbehälter wöchentlich
TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VEVENT........
.......
END:VEVENT
END:VCALENDAR
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Incanus
Würde ein python script schreiben, dass die Excel Datei liest und eine ics generiert.
Grob so:
Python:
def format_datetime(dt_string):
    """Converts a datetime string from CSV format to ICS format."""
    dt = datetime.strptime(dt_string, '%Y-%m-%d %H:%M:%S')
    return dt.strftime('%Y%m%dT%H%M%SZ')

def manual_csv_to_ics(csv_file_path, ics_file_path):
    ics_content = [
        "BEGIN:VCALENDAR",
        "VERSION:2.0",
        "PRODID:-//ChatGPT//EN"
    ]
    
    with open(csv_file_path, 'r') as csv_file:
        csv_reader = csv.reader(csv_file)
        next(csv_reader)

        for row in csv_reader:
            event_content = [
                "BEGIN:VEVENT",
                f"DTSTART:{format_datetime(row[1])}",
                f"DTEND:{format_datetime(row[2])}",
                f"SUMMARY:{row[0]}",
                f"DESCRIPTION:{row[3]}",
                f"LOCATION:{row[4]}",
                "END:VEVENT"
            ]
            ics_content.extend(event_content)
    
    ics_content.append("END:VCALENDAR")
    
    with open(ics_file_path, 'w') as ics_file:
        ics_file.write('\n'.join(ics_content))

# so aufrufen:
manual_csv_to_ics(csv_to_read, ics_to_read)

Im anhang ne beispiel CSV und in der ZIP die daraus resultierende ICS.

Musst dann entweder deine tabelle so anpassen, dass ihr format aufs beispiel passt, oder dieSpalten im Code umsortieren
 

Anhänge

Im Grunde musst du dich mit der Syntax einer .ics Datei auseinadner setzen, ist ja nichts weiter als eine Textdatei mit anderer Endung, damit ziemlich einfach veränderbar mit Scripten von Python, bash etc.

JustOne schrieb:
Schau dir mal die Syntax für ICS an, wobei ich auf meiner Suche damals nie eine vollständige Beschreibung aller Elemente finden konnte.
Die iCalender Dateien sind in der RFC 5545 definiert, da gibts hier die Dokumentation dazu, unten sind noch mal alle Elemente aufeglsitet, hat mir geholfen, als ich selber angefangen habe, ics Dateien zu erstellen.
 
  • Gefällt mir
Reaktionen: JustOne
Vielen Dank euch.
Das Python Script schwebte mir auch vor, das wird für mich kein Problem denke ich.

Ich werde das mal alles testen und berücksichtigen und hoffe das es dann funktioniert.
Ergänzung ()

@madmax2010 wenn ich deine ics Datei auf dem iPhone öffne erscheint nur die Möglichkeit das erste Ereignis hinzuzufügen. Lässt sich das ändern?
 
Zuletzt bearbeitet:
Zurück
Oben