Сервис, который ходит на my.itmo.ru за расписанием и экспортирует его как iCalendar с публичной ссылкой. Позволяет автоматически и с автообновлением экспортировать пары в календари Google, iCloud и другие.
Логин и пароль от ИСУ, поэтому безопасности ради захостить себе сервис придётся самостоятельно.
Нужен личный сервер (без доступа у посторонних) с docker
на нём.
-
Подставить username/password в команду и запустить контейнер:
APP_PORT=35601 docker run -d \ --restart=unless-stopped \ --name itmo_ical \ -p=$APP_PORT:35601 \ -e ITMO_ICAL_ISU_USERNAME=100000 \ -e ITMO_ICAL_ISU_PASSWORD=XXXXXXXXXXXXX \ ghcr.io/iburakov/my-itmo-ru-to-ical
-
Получить публичную ссылку на .ics:
URL_PATH=$(docker logs itmo_ical 2>&1 | grep -oh '/calendar/.*') HOST_IP=$(curl -s ipinfo.io/ip) echo "http://$HOST_IP:$APP_PORT$URL_PATH" # должно выглядеть как-то так: # http://93.184.216.34:35601/calendar/gnKZT88jeuKDdhh7Ow8mwsAbMpIyVKaCBpl2CtqJqYI
-
Если по ссылке скачивается .ics файл, всё работает
-
Импортировать ссылку в свой календарь. Он будет периодически повторять запрос для получения обновлений - изменяющиеся аудитории теперь не беда ;)
PS. Ссылка содержит хеш имени пользователя и пароля, чтобы она была и неподбираемой для посторонних, и относительно постоянной без использования какого-либо хранилища. Стоит иметь в виду, что меняется username/password - меняется ссылка.
⚠ Пароль от ИСУ можно извлечь из контейнера с помощью docker inspect
/ docker exec
. Безопасность своих ключей - ваша зона ответственности. Убедитесь, что:
- к серверу нет доступа у других людей,
- включен фаервол,
- отключена SSH авторизация по паролю и root login,
- и.т.п.
Docker образы собираются и пушатся в реестр с помощью GitHub Actions - исходники в этом репозитории, соответствующие скрипты сборки и логи общедоступны. Если всё равно стрёмно доверять пароль рандомному образу, можно склонировать репозиторий и сделать docker build
из исходников самостоятельно.
Также из коробки поддерживается мониторинг ошибок с помощью Sentry. Можно создать проект (Python/Flask) и передать DSN в переменную окружения ITMO_ICAL_SENTRY_DSN
при старте контейнера.
Если какого-то функционала очень не хватает или что-то сломалось, PRs are welcome! Протестить вживую уже не смогу, но стараюсь находить время отсматривать и мержить. Используются:
- Python 3.11 + poetry
- ruff, black, mypy, vulture в качестве линтеров/форматтеров