Skip to content

About

Парсер для расписания групп ТвГУ (Тверского Государственного Университета)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

36 Commits

Folders and files

Repository files navigation

Парсер-нормализатор расписания ТвГУ

Асинхронный парсер расписания Тверского государственного университета (ТвГУ), работающий с публичным API сайта расписаний, и нормализирующий информацию в датаклассы.

Проект предназначен для получения, нормализации и экспорта расписаний (с преподавателями и местами проведения) учебных групп по факультетам в формате JSON.
API не имеет официальной документации (по крайней мере я не нашёл), поэтому парсер основан на фактическом анализе ответов сервера и реальных данных. Выкладываю, чтобы у студентов было больше возможности быстрее создать свои проекты.

Проект не привязан к конкретному интерфейсу и может использоваться как:

  • CLI-утилита
  • источник данных для ботов
  • backend-компонент для сервисов с расписанием

Возможности

  • Получение списка всех учебных групп ТвГУ
  • Автоматическая группировка по факультетам
  • Загрузка расписаний пар (основное учебное расписание)
  • Нормализация данных:
    • дни недели
    • чётность недели (пара по каждой неделе, минусовой или плюсовой)
    • номера пар
    • временные интервалы
    • тип занятия (лекция, практика, лабораторная работа и т.д.)
    • преподаватели
    • места проведения
    • подгруппы
  • Устойчивость к неполным и некорректным данным API
  • Асинхронная загрузка с контролем числа соединений
  • Экспорт в JSON (с форматированием или без)

Ограничения и особенности

  • Форматы имён групп и структура данных могут меняться (по возможности буду адаптировать шаблоны)
  • Парсинг названий групп основан на накопленной мною практике и может быть доработан со временем
  • В парсере намеренно отсутствует жёсткая валидация — приоритет отдан устойчивости

Требования

  • Python 3.10+
  • Зависимости:
    • aiohttp
    • requests

Установка зависимостей:

pip install aiohttp requests

Использование

В виде CLI-утилиты

python -m tvgu_schedule_parser

В этом режиме данные загружаются, но никуда не сохраняются: бесполезно

Экспорт расписаний в файл

python -m tvgu_schedule_parser --output schedules.json --prettify --warnings

--output schedules.json – Файл для экспорта в JSON формате

--prettify – Форматировать вывод (с отступами и переносом строк)

--warnings – Выводить в консоль предупреждения (например, при невалидных группах).

Используя функцию

Используйте функцию get_all_tvgu_schedules() – просто вызывайте её (не забудьте await) и получите через несколько секунд расписание всех групп. Формат возвращаемого значения: dict[str, dict[Group, tuple[Lesson]]] – Словарь с ключом в виде кода факультета, затем значение со словарём с ключом в виде группы и значением в виде списка пар.

Структурируйте по неделе сами.

Формат выходных данных

Выходной JSON имеет следующую структуру:

{
  "Название факультета": {
    "КОД-ГРУППА": [
      {
        "lesson_number": 0,
        "week_day": 1,
        "week_mark": "every",
        "time_start": 540,
        "time_end": 615,
        "subject_name": "Название дисциплины",
        "subject_type": "lecture",
        "place": "Аудитория",
        "teachers": [
          {
            "fullname": "Фамилия И.О.",
            "role": "должность"
          }
        ],
        "subgroup": null
      }
    ]
  }
}

Время указывается в минутах от начала суток. Константные значения смотрите в файле consts.py

Может быть и такой вариант:

{
  "Название факультета": {
    "КОД-ГРУППА": null
  }
}

В случае, если у группы нет расписания

Лицензия

Свободное использование. Не несу ответственности за изменения в API или структуре данных со стороны ТвГУ.

Если ты используешь парсер или он тебе помог, то прошу лишь поставить звёздочку репозиторию)

About

Парсер для расписания групп ТвГУ (Тверского Государственного Университета)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages