edit readme.md
This commit is contained in:
164
README.md
164
README.md
@@ -1,2 +1,162 @@
|
||||
# kspsuti-teacher-schedule
|
||||
Teacher's schedule of KS PSUTI
|
||||
# 📅 Teacher Schedule
|
||||
|
||||
Веб-приложение для просмотра расписания преподавателей ПГУТИ. Парсит расписание с сайта [lk.ks.psuti.ru](https://lk.ks.psuti.ru/?mn=3) и отображает в удобном тёмном интерфейсе с поиском по ФИО.
|
||||
|
||||

|
||||

|
||||

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

|
||||
|
||||
## Стек
|
||||
|
||||
- **Backend:** Python 3, Flask, BeautifulSoup4 (lxml)
|
||||
- **Frontend:** Vanilla JS, CSS Grid, без фреймворков
|
||||
- **Deploy:** systemd + Caddy (автоматический HTTPS)
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
### 1. Клонировать репозиторий
|
||||
|
||||
```bash
|
||||
git clone https://github.com/kilyabin/kspsuti-teacher-schedule.git
|
||||
cd kspsuti-teacher-schedule
|
||||
```
|
||||
|
||||
### 2. Создать виртуальное окружение и установить зависимости
|
||||
|
||||
```bash
|
||||
bash setup.sh
|
||||
```
|
||||
|
||||
### 3. Настроить `config.yaml`
|
||||
|
||||
```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=`**244** → `id: 244`
|
||||
|
||||
### 4. Запустить
|
||||
|
||||
```bash
|
||||
source venv/bin/activate
|
||||
python app.py
|
||||
```
|
||||
|
||||
Открыть в браузере: [http://localhost:5609](http://localhost:5609)
|
||||
|
||||
---
|
||||
|
||||
## Деплой на сервер
|
||||
|
||||
### systemd сервис
|
||||
|
||||
```bash
|
||||
sudo bash install-service.sh
|
||||
```
|
||||
|
||||
Скрипт автоматически определяет путь к проекту и текущего пользователя, копирует unit-файл в `/etc/systemd/system/schedule.service` и запускает сервис.
|
||||
|
||||
Управление сервисом:
|
||||
|
||||
```bash
|
||||
sudo systemctl status schedule # статус
|
||||
sudo systemctl restart schedule # перезапуск
|
||||
sudo systemctl stop schedule # остановить
|
||||
journalctl -u schedule -f # логи в реальном времени
|
||||
```
|
||||
|
||||
### Caddy — HTTPS по домену
|
||||
|
||||
Установить Caddy ([официальная инструкция](https://caddyserver.com/docs/install)):
|
||||
|
||||
```bash
|
||||
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`:
|
||||
|
||||
```caddy
|
||||
{
|
||||
acme_ca https://acme-v02.api.letsencrypt.org/directory
|
||||
email your@email.com
|
||||
}
|
||||
|
||||
your.domain.com {
|
||||
reverse_proxy localhost:5609
|
||||
encode gzip
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
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` на живом сервере:
|
||||
|
||||
```bash
|
||||
curl http://localhost:5609/api/reload-config
|
||||
```
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT
|
||||
|
||||
Reference in New Issue
Block a user