- 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?
Mein Script sieht wie folgt aus:
Ich habe ihnen mein Script beigefügt. Können Sie mir sagen wo genau der fehler liegt?
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?