Как я написал удобного 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
Благодарю, за прочтение)