rasp
Описание
Языки
- Python65,5%
- HTML31,3%
- Dockerfile2,1%
- JavaScript1,1%
SSTU Schedule to ICS Converter
Веб-сервис для конвертации расписания СГТУ (https://rasp.sstu.ru) в формат iCalendar (ICS) для интеграции с Google Calendar и другими календарными приложениями.
Описание
Приложение позволяет подписаться на расписание преподавателей, групп и аудиторий СГТУ в любом календарном приложении, поддерживающем формат ICS. Сервис автоматически парсит HTML-страницы с сайта rasp.sstu.ru, преобразует их в формат iCalendar и кэширует данные в SQLite для обеспечения доступности даже при недоступности основного сайта.
Возможности
- ✅ Автоматическое преобразование расписания в формат ICS
- ✅ Поддержка расписания преподавателей, групп и аудиторий
- ✅ Кэширование данных в SQLite (TTL: 1 час)
- ✅ Автоматический fallback на кэшированные данные при недоступности сайта
- ✅ Правильная настройка часового пояса (Europe/Saratov, UTC+4)
Технологии
- FastAPI - современный асинхронный веб-фреймворк
- BeautifulSoup4 + lxml - парсинг HTML
- icalendar - генерация ICS файлов (RFC 5545)
- httpx - асинхронный HTTP-клиент
- SQLAlchemy + SQLite - ORM и кэширование
- pytz - обработка часовых поясов
- Docker - контейнеризация
Установка и запуск
Вариант 1: Запуск с Docker (рекомендуется)
Запустите сервис на доступном из интернета сервере или опубликуйте порт 8000 с вашего домашнего компьютера, через домашний роутер.
-
Убедитесь, что установлены Docker и Docker Compose:
-
Запустите контейнер:
-
Сервис будет доступен по адресу:
http://your-server:8000
Вариант 2: Запуск с Docker из исходного кода
-
Убедитесь, что установлены Docker и Docker Compose:
-
Клонируйте репозиторий и перейдите в директорию проекта:
-
Запустите контейнер:
-
Сервис будет доступен по адресу: http://localhost:8000
-
Для запуска в фоновом режиме:
-
Для остановки:
-
Для автоматического обновления контейнера и перезапуска при изменении файлов исходного кода (для разработки):
Вариант 3: Локальный запуск (для разработки)
-
Убедитесь, что установлен Python 3.11 или выше:
-
Создайте виртуальное окружение:
-
Установите зависимости:
-
Запустите сервер:
-
Сервис будет доступен по адресу: http://localhost:8000
Использование
API Endpoints
Получение расписания в формате ICS
Параметры:
- тип расписания:type(преподаватель),teacher(группа),group(аудитория)room- идентификатор из URL на сайте rasp.sstu.ruid
Примеры:
Проверка сервиса
Пример:
Интеграция с Google Calendar
- Запустите сервис на доступном из интернета сервере или используйте локальный адрес
- Получите URL расписания в формате ICS (например:
)http://your-server:8000/schedule/teacher/12345.ics - Откройте Google Calendar
- Нажмите на "+" рядом с "Другие календари"
- Выберите "Добавить по URL"
- Вставьте URL и нажмите "Добавить календарь"
Google Calendar будет автоматически обновлять расписание периодически.
Интеграция с другими календарями
Apple Calendar (macOS/iOS):
- Откройте Calendar
- File → New Calendar Subscription
- Вставьте URL и нажмите Subscribe
Microsoft Outlook:
- Откройте Outlook
- Add Calendar → From internet
- Вставьте URL и нажмите OK
Thunderbird:
- Откройте Calendar
- New Calendar → On the Network
- Выберите iCalendar (ICS) и вставьте URL
Как найти ID для расписания
- Перейдите на сайт https://rasp.sstu.ru
- Найдите нужное расписание (преподавателя, группы или аудитории)
- Скопируйте ID из URL:
- Для преподавателя:
→ ID:https://rasp.sstu.ru/rasp/teacher/1234512345 - Для группы:
→ ID:https://rasp.sstu.ru/rasp/group/1234512345 - Для аудитории:
→ ID:https://rasp.sstu.ru/rasp/room/101101
- Для преподавателя:
Структура проекта
Конфигурация
Основные параметры настраиваются в :
- часовой пояс (Europe/Saratov, UTC+4)SARATOV_TZ- путь к базе данных SQLiteDATABASE_URL- базовый URL сайта расписанияRASP_BASE_URL- время жизни кэша (по умолчанию: 3600 секунд / 1 час)CACHE_TTL- таймаут HTTP запросов (по умолчанию: 10 секунд)HTTP_TIMEOUT- разрешённые типы расписанияALLOWED_TYPES
Кэширование и fallback
Сервис использует умную стратегию кэширования:
- При первом запросе данные загружаются с rasp.sstu.ru и сохраняются в кэш
- Последующие запросы в течение 1 часа обслуживаются из кэша (быстро)
- Если кэш устарел, сервис пытается загрузить свежие данные
- Если сайт недоступен, используются устаревшие данные из кэша с соответствующим заголовком
- База данных персистентна и сохраняется при перезапуске контейнера
Разработка
Просмотр логов
Просмотр базы данных
Тестирование
Troubleshooting
Ошибка 404: Invalid schedule type
Проверьте, что используется правильный тип: , или
Ошибка 503: Service Unavailable
- Сайт rasp.sstu.ru недоступен
- В кэше нет данных
- Подождите и попробуйте снова
Неправильное время в календаре
Убедитесь, что часовой пояс настроен правильно (Europe/Saratov)
База данных не сохраняется при перезапуске Docker
Проверьте, что volume правильно примонтирован в docker-compose.yml
Лицензия
Этот проект создан для образовательных целей.
От автора
Проект реализован для студентов и преподавателей СГТУ.