Skip to content

Парсинг расписания и замен с newlms.magtu.ru

License

Notifications You must be signed in to change notification settings

magtu-unofficial/magtu-parser

Repository files navigation

magtu-parser

Загружает и парсит расписание колледжа для бота

Build Status

Что это вообще

Расписание колледжа, в котором я учусь выкладывается на сайте в виде xls и xlsx файлов. Стабильное расписание в отдельном файле для каждой группы, а изменения этого расписания в одном файле для всех групп. Файл с заменами выкладывается раз в три дня.

Как оно работает

Файлы замен и расписания формируются автоматически какой-то программой, которой они составляют расписание. Мой скрипт смотрит на список файлов, и если видит что то новое, то начинает обработку. Результат парсинга отправляется в MongoDB.

В целом пайплайн

В идеале парсер должен работать следующим образом:

В аргументах указана дириктория с файлами?
     |                  |
     да                нет
     |                  |
     |            Загружем список файлов с заменами
     |                  |
Открываем каждый файл, смотрим БД, если замены на эту дату
и совпадает ли хеш
     |           |
    нет         есть-----Отлично
     |
Проходимся по названиям групп
     |
Для каждой группы берем файл с расписанием
     |
Найден единственный файл?
     |         |
     да      Найдена конструкция "с XX.XX.XX"?
     |         |                           |
     |         да                         нет
     |         |                           |
     |       Парсим её как дату          Берем файл с самым
     |       и берем самый новый файл    длинным названием
     |
     Файл распарсился успешно?
     |                      |
     да                    нет
     |                      |-------------------
     |                      |                   |
Парсим замены для          парсим замены,       |
группы и накладываем      не накладываем       |
на расписание              нагруппу             |
    |                      |                    |
    ------------------------                    |
            |                                   |
     Замены распарсены?                         |
       |          |                             |
       да        нет                            |
       |          |                             |
    Отлично       ------------пишем ошибку-------

Как это запустить

Для работы этого парсера необходимо node.js. Я все делал на 11 версии и не знаю, будет ли работать на более старых. Еще нужна база данных. MongoDB. Все работает на 3.2.12 и старше. Ниже не проверял.

Для продакшена все собирается в докер контейнер, в котором cron каждые 10 минут запускает этот парсер

Запуск для разработки

npm install
npm run dev

Хотя можно лучше воспользоватсья дебагеров в VS Code