Интро: Мне нужен функционал чтобы просто получать календари, проверять их актуальность и обновлять данные создавать новые календари и события в них, это было бы удобно имея возможность гибко возможность обращаться к атрибутам событий в календаре по ключу.
Проблема: В общем-то получаю список календарей из Яндекс календаря (использую библиотеку
caldav), по каждому из календарей
calendar.events()
получаю события и вытаскиваю ссылки на них , потом через запрос по URL события
requests.get(event.url, auth=(username, password)).content.decode('utf8')
получаю:
Ответ
BEGIN:VEVENT
DTSTART;TZID=Europe/Astrakhan:20230119T120000
DTEND;TZID=Europe/Astrakhan:20230119T130000
SUMMARY:Совещание
UID:q6827F7Dyandex.ru
SEQUENCE:6
DTSTAMP:20230424T083733Z
CREATED:20230118T135628Z
URL:https://calendar.yandex.ru/for/razum.life/event?event_id=1810432955
RRULE:FREQ=WEEKLY;BYDAY=TH;INTERVAL=1
EXDATE;TZID=Europe/Astrakhan:20230413T120000
TRANSP:OPAQUE
CATEGORIES:Мои события
ORGANIZER;CN=chukanov:mailto:user@mail.ru
ATTENDEE;PARTSTAT=NEEDS-ACTION;CN=riabykin:mailto:user1@mail.ru
ATTENDEE;PARTSTAT=ACCEPTED;CN=semenchuk:mailto:user2@mail.ru
ATTENDEE;PARTSTAT=ACCEPTED;CN=chukanov:mailto:user3@mail.ru
LAST-MODIFIED:20230410T035626Z
END:VEVENT
Всё это дело приходит в виде строки с переносами '\n\r', хотел разбить сплитом и собрать в словарь вот таким образом
dict(item.split(":") for item in s.split("\n\r"))
, но столкнулся с тем, что в одной строке попадаются несколько разделителей ":" (например в mailto или URL). Громоздить проверку на каждую строку не очень хочется (мол содержит ли она
'http' OR 'https' OR 'mailto'
) т.к. кажется это костылём...
Вопрос:
Как по человечески работать с календарями в caldav?
ЗЫ: я не скачиваю ical файлы, а просто получаю их по URL, скачивание считаю избыточным, да их складировать файлы не хочется.