chuvsu-js
v2.3.0
Published
Node.js library for ChuvSU student portal (lk.chuvsu.ru) and schedule (tt.chuvsu.ru)
Maintainers
Readme
chuvsu-js
Node.js библиотека для работы с порталами ЧувГУ:
- tt.chuvsu.ru — расписание занятий (факультеты, группы, преподаватели)
- lk.chuvsu.ru — личный кабинет студента (персональные данные)
[!WARNING] Пока не доработана, код говно, замены занятий пока не парсит. Не надейтесь на правильный вывод расписания.
Установка
npm install chuvsu-jsБыстрый старт
Расписание (TtClient)
import { TtClient } from "chuvsu-js";
const tt = new TtClient();
// Войти гостем (без учётной записи)
await tt.loginAsGuest();
// Найти группу по названию
const groups = await tt.searchGroup({ name: "КТ-41-24" });
console.log(groups); // [{ id: 8919, name: "КТ-41-24", specialty: "...", profile: "..." }]
// Получить расписание группы
const schedule = await tt.getSchedule({ groupId: groups[0].id });
// Расписание на сегодня
const today = schedule.today();
for (const lesson of today) {
console.log(
`${lesson.start.hours}:${lesson.start.minutes} — ${lesson.subject} (${lesson.type})`,
);
}
// С фильтром по подгруппе
schedule.today({ subgroup: 1 });
// На завтра
schedule.tomorrow();
// На текущую неделю
schedule.thisWeek();
// Текущая пара
schedule.currentLesson();Личный кабинет (LkClient)
import { LkClient } from "chuvsu-js";
const lk = new LkClient();
await lk.login({ email: "[email protected]", password: "password" });
const data = await lk.getPersonalData();
console.log(`${data.lastName} ${data.firstName}, группа ${data.group}`);
// Получить ID группы для использования с TtClient
const groupId = await lk.getGroupId();API
TtClient
Клиент для работы с расписанием (tt.chuvsu.ru).
Конструктор
new TtClient(options?: TtClientOptions)| Опция | Тип | По умолчанию | Описание |
| --------------- | ----------------------- | ----------------- | -------------------------------------------------------------- |
| educationType | EducationType | HigherEducation | Тип образования: высшее (1) или СПО (2) |
| cache | number \| CacheConfig | — | TTL кеша в мс. Число задаёт единый TTL, объект — по категориям |
Авторизация
// С учётной записью
await tt.login({ email: "...", password: "..." });
// Гостевой вход
await tt.loginAsGuest();Получение расписания
const schedule = await tt.getSchedule({ groupId, period? });Возвращает объект Schedule, который позволяет получать расписание локально, без дополнительных запросов к серверу.
Поиск
// Список факультетов
const faculties = await tt.getFaculties();
// Группы факультета
const groups = await tt.getGroupsForFaculty({ facultyId });
// Поиск группы по названию
const groups = await tt.searchGroup({ name: "ЗИ" });
// Поиск преподавателя
const teachers = await tt.searchTeacher({ name: "Иванов" });Период
// Текущий учебный период
const period = tt.getCurrentPeriod();Кеш
// Очистить весь кеш или по категории
tt.clearCache();
tt.clearCache("schedule");
// Экспорт/импорт (для сохранения между запусками)
const data = tt.exportCache();
tt.importCache(data);Категории кеша: schedule, faculties, groups.
Schedule
Объект расписания группы. Все методы синхронные — данные уже загружены.
Свойства
schedule.groupId; // ID группы
schedule.period; // Учебный период
schedule.days; // Сырые данные (FullScheduleDay[])Расписание по дате
// На сегодня
schedule.today({ subgroup?: number });
// На завтра
schedule.tomorrow({ subgroup?: number });
// На конкретную дату
schedule.forDate(date: Date, { subgroup?: number });Расписание по неделе
// На текущую неделю
schedule.thisWeek({ subgroup?: number });
// На конкретную неделю
schedule.forWeek(week?: number, { subgroup?: number });Расписание по дню недели
// По дню недели (0 = воскресенье, 1 = понедельник, ...)
schedule.forDay(weekday: number, { subgroup?: number, week?: number });Текущая пара
const lesson = schedule.currentLesson({ subgroup?: number });Утилиты семестра
// Номер текущей недели
schedule.getWeekNumber(date?: Date);
// Все недели семестра
schedule.getSemesterWeeks(weekCount?: number);
// Начало семестра
schedule.getSemesterStart();Утилиты также доступны как standalone функции:
import {
getSemesterStart,
getSemesterWeeks,
getWeekNumber,
Period,
} from "chuvsu-js";
getSemesterStart({ period: Period.FallSemester, year: 2025 });
getSemesterWeeks({ period: Period.SpringSemester });
getWeekNumber({ period: Period.SpringSemester });LkClient
Клиент для личного кабинета (lk.chuvsu.ru).
await lk.login({ email, password });
const data = await lk.getPersonalData();
const groupId = await lk.getGroupId();PersonalData содержит: lastName, firstName, patronymic, sex, birthday, recordBookNumber, faculty, specialty, profile, group, course, email, phone.
Типы
Period
enum Period {
FallSemester = 1, // Осенний семестр
WinterSession = 2, // Зимняя сессия
SpringSemester = 3, // Весенний семестр
SummerSession = 4, // Летняя сессия
}EducationType
enum EducationType {
HigherEducation = 1, // Высшее образование
VocationalEducation = 2, // СПО
}Lesson
interface Lesson {
number: number; // Номер пары
start: LessonTime; // Начало { date, hours, minutes }
end: LessonTime; // Конец { date, hours, minutes }
subject: string; // Предмет
type: string; // Тип (лекция, практика, лаб. работа)
room: string; // Аудитория
teacher: Teacher; // Преподаватель { name, position?, degree? }
weeks: WeekRange; // Диапазон недель { from, to }
subgroup?: number; // Подгруппа
weekParity?: "even" | "odd"; // Чётность недели
}Обработка ошибок
import { AuthError, ParseError } from "chuvsu-js";
try {
await tt.login({ email: "...", password: "wrong" });
} catch (e) {
if (e instanceof AuthError) {
console.error("Неверные данные для входа");
}
}Лицензия
MIT
