2026-03-14 09:51:13 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:21:02 +04:00
2026-03-14 09:51:13 +04:00
2026-03-02 14:30:56 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:30:56 +04:00
2026-03-02 14:21:02 +04:00
2026-03-02 14:21:02 +04:00

📅 Teacher Schedule

Веб-приложение для просмотра расписания преподавателей ПГУТИ. Парсит расписание с сайта lk.ks.psuti.ru и отображает в удобном тёмном интерфейсе с поиском по ФИО.

Python Flask License

Возможности

  • 🔍 Поиск по ФИО — живой поиск по всем 100+ преподавателям с подсветкой совпадений
  • Избранные — быстрые табы для часто просматриваемых преподавателей (настраиваются в config.yaml)
  • 📆 Навигация по неделям — переключение вперёд/назад
  • 🟢 Текущая пара — автоматически подсвечивается идущее сейчас занятие
  • 📊 Статистика недели — рабочие дни, количество пар, групп и часов
  • 📱 Адаптивный интерфейс — удобно на телефоне и десктопе

Скриншоты

screenshot

Стек

  • Backend: Python 3, Flask, BeautifulSoup4 (lxml)
  • Frontend: Vanilla JS, CSS Grid, без фреймворков
  • Deploy: systemd + Caddy (автоматический HTTPS)

Быстрый старт

1. Клонировать репозиторий

git clone https://github.com/kilyabin/kspsuti-teacher-schedule.git
cd kspsuti-teacher-schedule

2. Создать виртуальное окружение и установить зависимости

bash setup.sh

3. Настроить config.yaml

base_url: "https://lk.ks.psuti.ru"

default_teacher: 244   # чье расписание будет при входе в веб-приложение, obj= из ссылки нужного преподавателя

teachers:              # избранные — отображаются как быстрые табы
  - id: 244
    name: "ПОЛНОЕ ФИО"
    short: "КРАТКО ФИО"
  - id: 229
    name: "ПОЛНОЕ ФИО"
    short: "КРАТКОЕ ФИО"

ID преподавателя берётся из ссылки на сайте:
https://lk.ks.psuti.ru/?mn=3&obj=244id: 244

4. Запустить

source venv/bin/activate
python app.py

Открыть в браузере: http://localhost:5609


Деплой на сервер

systemd сервис

sudo bash install-service.sh

Скрипт автоматически определяет путь к проекту и текущего пользователя, копирует unit-файл в /etc/systemd/system/schedule.service и запускает сервис.

Управление сервисом:

sudo systemctl status schedule      # статус
sudo systemctl restart schedule     # перезапуск
sudo systemctl stop schedule        # остановить
journalctl -u schedule -f           # логи в реальном времени

Caddy — HTTPS по домену

Установить Caddy (официальная инструкция):

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy

Конфиг /etc/caddy/Caddyfile:

{
    acme_ca https://acme-v02.api.letsencrypt.org/directory
    email your@email.com
}

your.domain.com {
    reverse_proxy localhost:5609
    encode gzip
}
sudo systemctl reload caddy

Caddy автоматически получит TLS-сертификат от Let's Encrypt. Убедись что порты 80 и 443 открыты в файрволе и security groups облака.


Структура проекта

.
├── app.py                      # Flask-приложение, парсер расписания
├── config.yaml                 # Настройки: URL, избранные преподаватели
├── requirements.txt            # Зависимости Python
├── setup.sh                    # Создаёт venv и ставит зависимости
├── install-service.sh          # Устанавливает systemd сервис
├── schedule.service.template   # Шаблон systemd unit-файла
├── Caddyfile                   # Пример конфига Caddy
└── templates/
    └── index.html              # Фронтенд (всё в одном файле)

API

Метод Эндпоинт Описание
GET /api/teachers Избранные преподаватели из config.yaml
GET /api/all-teachers Все преподаватели с сайта (кэш 1 час)
GET /api/schedule?obj=244 Расписание на текущую неделю
GET /api/schedule?obj=244&wk=321 Расписание на конкретную неделю
GET /api/reload-config Перечитать config.yaml без перезапуска

Обновление конфига без перезапуска

Если добавил преподавателей в config.yaml на живом сервере:

curl http://localhost:5609/api/reload-config

Лицензия

MIT

Description
No description provided
Readme MIT 313 KiB
Languages
HTML 70.7%
Python 25.9%
Shell 3.4%