@alexandrsemen4ukk

Как работать с содержимым iCal в Python?

Интро: Мне нужен функционал чтобы просто получать календари, проверять их актуальность и обновлять данные создавать новые календари и события в них, это было бы удобно имея возможность гибко возможность обращаться к атрибутам событий в календаре по ключу.

Проблема: В общем-то получаю список календарей из Яндекс календаря (использую библиотеку 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, скачивание считаю избыточным, да их складировать файлы не хочется.
  • Вопрос задан
  • 424 просмотра
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Можно взять готовую библиотеку для парсинга ical:
https://pypi.org/project/icalendar/

https://stackoverflow.com/questions/3408097/parsin...
Ответ написан
fenrir1121
@fenrir1121
Начни с документации
Не работал непосредственно с яндекс календарем, но с гугловским очень удобно использовать библиотеку ics, вероятно в вашем случае она тоже подойдет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы