Как я написал удобного Telegram-бота для взаимодействия со школьным дневником

Когда я начал свой путь в парсинге, мне в голову сразу пришла идея написать клиент для удобного взаимодейстия со школьным дневником. В последствии я решил оформить его в виде Telegram-бота.

Скриншот проделанных изменений
Скриншот проделанных изменений

Основные проблемы, возникающие во время использования оригинального электронного дневника, которые я постараюсь решить (выявлены в результате опросов и анализа отзывов):

  • Падение серверов при нагрузке (конец четвертей) (45,5 % пользователей)
  • Отсутствие уведомлений ( 20,5 % пользователей)
  • Сайт не адаптирован для мобильных устройств ( 20,5 % пользователей)
  • Дизайн мобильного приложения ( 18,2 % пользователей)
  • Отсутствие кастомизации интерфейса приложения/сайта (темная тема) ( 13,6 % пользователей)
  • Защита данных/конфиденциальность ( 11,4 % пользователей)

1. Выбор базы данных

В качестве базы данных для бота на первое время был выбран простой JSON файл, это решение обусловлено следующими параметрами:

  • Простота
  • Скорость и удобство разработки
  • Наглядность
  • Больше опыта работы

Однако, в будущем планируется переход на обычную базу данных (sqlite3 или PostgreSQL).

2. Парсинг дневника

Спарсить сам дневник оказалось достаточно просто: для успешного получения ответа не нужна даже подмена заголовков запроса (headers), нужна только авторизация (cookie).

На данный момент я переписал чужой проект, по работе с API дневника (barsapi), перевёл его на aiohttp, значительно ускорил скорость работы. В скором времени планирую перевести бота на использование этой библиотеки.

3. Выбор библиотеки для взаимодействия с Telegram-Bot-API

Бот написан на aiogram, т. к. у них понятная документация.

4. Уведомления

Официально уведомления как-будто бы есть... Но на деле (по крайней мере в моём регионе) они не функционируют.

Уведомления в боте реализованы "в лоб": раз в определенный промежуток времени бот запрашивает оценки с сервера, сравнивает их с оценками записанными в базу данных при предыдущем запросе. И в случае обнаружения изменений отправляет их пользователю в телеграмме.

Пример уведомления об изменении оценки в боте
Пример уведомления об изменении оценки в боте
Пример "умного" уведомления в боте
Пример "умного" уведомления в боте

Заключение

Пройдёмся по проблемам, указанным в начале:

  • Падение серверов при нагрузке (конец четвертей):

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

Но это не принесёт большого смысла, т. к. учителя тоже не смогут войти и проставить оценки(

  • Отсутствие уведомлений

Решено в полной мере.

  • Сайт не адаптирован для мобильных устройств

Информация в боте отлично отображается как на компьютере, так и на телефоне.

  • Дизайн мобильного приложения и отсутствие кастомизации интерфейса приложения/сайта (темная тема)

Пользователь сам в праве решить каким интерфейсом ему пользоваться, он может настроить тему в Telegram под себя или выбрать из большого количества готовых.

  • Защита данных/конфиденциальность

Нельзя отследить куда уходят запросы (как в браузере через вкладку параметры для разработчиков) => перечень возможных атак существенно снижается.

Подведу небольшой итог, по проекту:

На данный момент в боте 339 пользователей.

Поднят с колен пакет для взаимодействия с API (barsapi).

Написан пакет для взаимодействия с API разговоров о важном (для раздела о классных часах), conversations-about-important-api.

В репозитории на GitHub 23 звезды.

Проект является некоммерческим (работает не ради дохода, сделан ради пользователей), вот ссылки:

GitHub проекта - pars-diary

Бот в Telegram - @pars_diary_bot

Благодарю, за прочтение)

11