FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Torxgewinde am 29 November 2023, 00:18:19

Titel: 🍏 Auf Apple-iCloud Kalender mit CalDAV Client (Thunderbird etc.) zugreifen
Beitrag von: Torxgewinde am 29 November 2023, 00:18:19
Hallo,
Der Apple Kalender kann mit einem CalDAV Client genutzt werden. Dafür braucht man allerdings die richtigen Adressen. Die kann man sich extrahieren mit folgenden Skript. Damit man CURL nutzen kann, muss man sich bei der 2-Faktor Authentifizierung ein App-Passwort einrichten (siehe Bild) Bildschirmfoto_2023-11-29_00-07-26.png
Auch benötigt man "curl" und "xmlstartlet".

Um die Adressen in Thunderbird zu nutzen, wird die Apple-ID benutzt und bei einem applikationsspezifischen-Passwort auch das.

APPLEID="meine_apple_id@example.com"
APP_SPECIFIC_PWD="1234-abcd-efgh-ijkl"

dsid="$(curl -s -X PROPFIND -u "$APPLEID:$APP_SPECIFIC_PWD" -H "Depth: 0"  --data "<propfind xmlns='DAV:'><prop><current-user-principal/></prop></propfind>"  https://caldav.icloud.com/ | grep '/principal/' | sed -E -n 's/.*\/([0-9]+)\/.*/\1/p')"
echo "dsid: $dsid"

calendars="$(curl -s -X PROPFIND -u "$APPLEID:$APP_SPECIFIC_PWD" -H "Depth: 0"  --data "<propfind xmlns='DAV:' xmlns:cd='urn:ietf:params:xml:ns:caldav'><prop><cd:calendar-home-set/></prop></propfind>" https://caldav.icloud.com/$dsid/principal/ | grep 'https://.*-caldav.icloud.com:443/' | sed -E -n 's/.*(https:\/\/p[0-9]+-caldav\.icloud\.com:443.*calendars).*/\1/p')"
cals="$(echo "$calendars" | sed 's/\/[0-9]\+\/calendars$//')"
echo "calendars: $calendars, $cals"

echo "es gibt folgende Kalender:"
curl -s -X PROPFIND -u "$APPLEID:$APP_SPECIFIC_PWD" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><displayname/></prop></propfind>" $calendars | sed -E -n 's|.*<displayname xmlns="DAV:">([^<]+)</displayname>.*|\1|p'

OUT="$(curl -s -X PROPFIND -u "$APPLEID:$APP_SPECIFIC_PWD" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><displayname/></prop></propfind>" $calendars)"
echo "$OUT" | xmlstarlet sel -N "d=DAV:" -t -m "//d:response" -v "concat('$cals', d:href, ' ------ ', d:propstat/d:prop/d:displayname)" -n

Das ganze ist die geskriptete Version von diesem Tipp: https://stackoverflow.com/questions/42319487/icloud-calendar-requests (https://stackoverflow.com/questions/42319487/icloud-calendar-requests)