Telegram-бот + сайт на официальном JSON-API cfuv.ru/raspisanie/. Без скрапинга HTML, только Python-стандарт (картинкам нужен Pillow).
- 🌐 Сайт: https://remageht.github.io/cfuv-schedule/
- 🤖 Бот: @ScheduleCFUvsbot
cd kfu-raspisanie
python web.py # сайт: http://localhost:8000
python -u bot.py # бот (токен — в token.txt, файл в .gitignore)Проверка парсера без токена:
python -c "import parser; g=parser.get_group('ПИ-б-о-241'); print(len(g['занятия']))"Выбор факультет → направление → курс → группа кнопками, код (ПИ-б-о-241) или фамилию (Парменов) — просто текстом.
| Команда | Что делает |
|---|---|
/my, /today, /tomorrow |
Пары: свои / сегодня / завтра |
/week, /even, /odd |
Неделя / чётная / нечётная |
/now |
Что идёт сейчас + следующая пара 🟢 |
/sess |
Сессия и экзамены 📝 |
/pic, /picweek |
День / неделя картинкой 🖼 |
/ics |
Календарь .ics для телефона 📅 |
/teacher ФАМИЛИЯ |
Расписание преподавателя 👤 |
/theme |
День ☀️ / ночь 🌙 |
/notify on|off |
Пары утром в 07:00 МСК ⏰ |
/changes on|off |
Что именно поменялось в расписании 🔄 |
/group КОД |
Сменить группу |
Кнопки под расписанием: ◀ ▶ дни, 🖼/📝 текст-картинка, п/г 1/2 — подгруппа, 📝 сессия, 📅 ics, 🌙 тема, ⏰ рассылка. Группа, тема, подгруппа и подписки запоминаются.
Вкладки «Группа» / «Преподаватель». Фильтры: Сейчас 🟢, Сегодня, Неделя, чёт/нечёт, подгруппа. Липкая плашка «что идёт», кнопка 📅 (.ics собирается в браузере), 📤 «Поделиться», блок сессии, ночная тема с гербом-созвездием, днём — цельный герб. Диплинки: #g=ПИ-б-о-241, #theme=night, #side=both|left|right|center, ?api=direct|local.
На GitHub Pages (Settings → Pages → main + /docs) работает без бэкенда: запросы идут напрямую в API вуза (CORS открыт).
parser.py API + кэш (.cache/), поиск, форматирование, ICS
schedule_image.py PNG дня/недели, темы day/night (Pillow)
bot.py бот: меню, /now, рассылка 07:00 МСК, слежка за изменениями
web.py локальный сервер + /api/* прокси (обход CORS)
docs/ фронт: index.html, style.css, app.js (+ 404.html)
GET /wp-json/cfu/v1/sched/index— дерево групп, звонки, недели. Кэш 6 ч.GET .../sched/group?code=— занятия: день 1–6, пара 1–8, чётность, предмет, преподаватели, аудитория, подгруппа 0/1/2. Кэш 1 ч.GET .../sched/find?by=teacher|room|subject&q=— поиск. Кэш 1 ч.- Всё время — московское (MSK). Рассылка и слежка живут в процессе бота: окно с
bot.pyдолжно быть запущено.