Keine Termin eintragen nach CalDav Aufforderung via Script

Hessi30

Benutzer
Mitglied seit
23. Nov 2012
Beiträge
148
Punkte für Reaktionen
2
Punkte
24
Hallo zusammen,
ich habe mir ein Python Script geschrieben. Das Script frägt einen Termin ab, nach Eingabe der Termindaten soll auf dem Calendar als auch bei meinem Google Kalender der termin eingetragen werden. Bei Google funktioniert das Problemlos, beim Synology Kalender nicht. Hat jemand eine Idee wo ich ansetzen kann?

Code:
MacBook-Pro-von-NAME ~ % python3 /Users/NAME/Automatisierung/Script/V0.0_Script_Kalendereintrag.py

Bitte geben Sie den Benutzernamen ein:

Bitte geben Sie das Passwort ein:

Bitte geben Sie den Termin-Titel ein: test

Bitte geben Sie das Startdatum im Format DD.MM.YYYY ein: 30.08.2023

Bitte geben Sie die Startzeit im Format HH:MM ein: 12:00

Bitte geben Sie das Enddatum im Format DD.MM.YYYY ein: 30.08.2023

Bitte geben Sie die Endzeit im Format HH:MM ein: 12:05

Bitte geben Sie die Adresse des Termins ein: test

HTTP-Antwortcode: 201

HTTP-Antwortinhalt: b''

Erfolgreich zum Synology Server hinzugefügt.

Startzeit: 2023-08-30T12:00:00

Endzeit: 2023-08-30T12:05:00

Mein Script sieht wie folgt aus:

Code:
import os
import pickle
import requests
from requests.auth import HTTPBasicAuth
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from google.auth.transport.requests import Request
import getpass
import uuid
from datetime import datetime


# Festgelegte Synology URL
synology_url = "https://MEINEADRESSEDE:5638/caldav/BENUTZERNAME/zpzft/"


# Fragen Sie den Benutzer nach den benötigten Daten
username = input("Bitte geben Sie den Benutzernamen ein: ")
password = getpass.getpass("Bitte geben Sie das Passwort ein: ")
summary = input("Bitte geben Sie den Termin-Titel ein: ")
start_date = input("Bitte geben Sie das Startdatum im Format DD.MM.YYYY ein: ")
start_time_hr_min = input("Bitte geben Sie die Startzeit im Format HH:MM ein: ")
end_date = input("Bitte geben Sie das Enddatum im Format DD.MM.YYYY ein: ")
end_time_hr_min = input("Bitte geben Sie die Endzeit im Format HH:MM ein: ")
location = input("Bitte geben Sie die Adresse des Termins ein: ")


# Umwandlung in ISO-8601 Format
start_time = datetime.strptime(f"{start_date} {start_time_hr_min}", "%d.%m.%Y %H:%M").isoformat()
end_time = datetime.strptime(f"{end_date} {end_time_hr_min}", "%d.%m.%Y %H:%M").isoformat()


# Synology Funktion
def add_synology_event(summary, start_time, end_time, location):
    event_id = str(uuid.uuid4())  # Erzeugt eine zufällige UUID für den Event
    event_content = f"""BEGIN:VCALENDAR
    CALSCALE:GREGORIAN
    PRODID:-//Apple Inc.//macOS 13.4.1//EN
    VERSION:2.0
    BEGIN:VTIMEZONE
    TZID:Europe/Berlin
    BEGIN:DAYLIGHT
    DTSTART:19810329T020000
    RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
    TZNAME:MESZ
    TZOFFSETFROM:+0100
    TZOFFSETTO:+0200
    END:DAYLIGHT
    BEGIN:STANDARD
    DTSTART:19961027T030000
    RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
    TZNAME:MEZ
    TZOFFSETFROM:+0200
    TZOFFSETTO:+0100
    END:STANDARD
    END:VTIMEZONE
    BEGIN:VEVENT
    CREATED:{start_time.replace("T", "T")[:-6]+"Z"}
    DTEND;TZID=Europe/Berlin:{end_time}
    DTSTAMP:{start_time.replace("T", "T")[:-6]+"Z"}
    DTSTART;TZID=Europe/Berlin:{start_time}
    LAST-MODIFIED:{start_time.replace("T", "T")[:-6]+"Z"}
    SEQUENCE:0
    SUMMARY:{summary}
    LOCATION:{location}
    TRANSP:OPAQUE
    UID:{event_id}
    END:VEVENT
    END:VCALENDAR"""


    response = requests.request(
    "PUT",
    'https://MEINEADRESSEDE:5638/caldav/BENUTZERNAME/zpzft/' + event_id + ".ics",
    auth=HTTPBasicAuth(username, password),
    data=event_content,
    headers={
        "Content-Type": "text/calendar; charset=utf-8"
    }
)




   
    print(f"HTTP-Antwortcode: {response.status_code}")
    print(f"HTTP-Antwortinhalt: {response.content}")


    if response.status_code != 200 and response.status_code != 201:
        print(f"Fehler beim Hinzufügen von Daten zum Synology Server: {response.status_code}, {response.text}")
    else:
        print("Erfolgreich zum Synology Server hinzugefügt.")


# Google Kalender Funktionen
SCOPES = ['https://www.googleapis.com/auth/calendar']


def get_google_calendar_service():
    creds = None
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)


    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                '/Users/hessi/Automatisierung/Script/cclient_secret_.json', SCOPES)
            creds = flow.run_local_server(port=8080)


        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)


    service = build('calendar', 'v3', credentials=creds)
    return service


def add_google_event(service, event):
    calendar_id = 'pjt72psircqjtqcekhb4becp44@group.calendar.google.com'
    try:
        event_result = service.events().insert(calendarId=calendar_id, body=event).execute()
        print(f"Erfolgreich zum Google Kalender hinzugefügt: {event_result['id']}")
    except Exception as e:
        print(f"Fehler beim Hinzufügen zum Google Kalender: {e}")


if __name__ == "__main__":
    try:
        add_synology_event(summary, start_time, end_time, location)
        print("Startzeit:", start_time)
        print("Endzeit:", end_time)


        google_service = get_google_calendar_service()
        google_event = {
            'summary': summary,
            'start': {'dateTime': start_time, 'timeZone': 'Europe/Berlin'},
            'end': {'dateTime': end_time, 'timeZone': 'Europe/Berlin'},
            'location': location
        }
        add_google_event(google_service, google_event)


    except Exception as e:
        print(f"Ein unerwarteter Fehler ist aufgetreten: {e}")




Ich habe ihnen mein Script beigefügt. Können Sie mir sagen wo genau der fehler liegt?
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!