Про импорт событий из календарей в формате iCalendar (.ics)
Чтобы нам всем быть чуть более осведомлёнными о том, какие мероприятия происходят в мире Python, я решил немного модернизировать раздел События. Помимо косметических изменений на страницах событий (перемены в расположении описаний, добавление карты, указывающей на место проведения), была добавлена публикация грядущих событий роботом.

Теперь робот ежедневно будет смотреть, а не добавились ли события в общие календари Python. Если он обнаружит новое событие в календаре, то опубликует его на сайте. Кажется, так будет удобнее, чем мониторить разные источники типа TimePad, Meetup и проч.

На заметку
Если у вас есть сообщество с периодическими встречами, или вы проводите какое-либо единичное мероприятие, связанное с Питоном, вы можете добавить его в общие календари Python — так о мероприятии узнает больше людей. Условия добавления опсаны по ссылке (англ.).

Календари Python можно выгружать в формате iCalendar (.ics), а для разбора этого формата требуется какой-нибудь инструмент. На PyPI можно обнаружить немало пакетов для работы с этим форматом, некоторые из них общего назначения, некоторые заточены под конкретные задачи и каркасы.

Мне нужен был пакет общего назначения и я попробовал одноимённый icalendar. Попробовав, сильно расстроился — календарь в 200Кб разбирался десятки секунд. Наверняка этому есть причина и обоснование, но разбираться с этим не хотелось. В довесок, для удобной работы с событиями в календаре нужно было ещё ставить icalevents. А хотелось попроще и побыстрее, при этом поддержка всех возможностей RFC 5545 для решения задачи не требовалась, умение конструировать календари — тоже.

Так появился легковесный icalendar_light. Он довольно шустро читает события из .ics и представляет в виде именованных кортежей. Поддерживает периодические события.

    from icalendar_light.toolbox import Calendar

for event in Calendar.iter_events_from_file('my_calendar.ics'):
print(Calendar.event_stringify(event))

# Или получим события грядущие в следующие 5 дней
# из iCalendar, представленного списком строк (lines):
events = Calendar.iter_events_upcoming(lines, days_forward=5)

Если поставить этот пакет командой pip install icalendar_light[cli]), то у вас появится консольная утилита, которая может показывать запланированные события:

    ; Вывести события на следующие 5 дней:
$ icalendar_light upcoming my_calendar.ics --days 5

Приложение icalendar_light разрабатывается открыто на GitHub, заинтересовавшиеся могут принять участие.

Возвращаясь к разделу События на нашем сайте. На первых порах новые события будут появляться тихо (не будет оповещений в ВК, TG и проч.). Ежели всё пойдёт хорошо и событий не будет слишком много, то оповещения включим, чтобы было ещё удобнее.

Если заметите какие-то странности с событиями — можете смело рассказывать об этом здесь.

Следите за событиями.

Категории

Циклы статей

На заметку
Читайте нас в Twitter. Ссылка в самом низу страницы.