Rozklad_bot: бот в Telegram с расписанием занятий в университете

Оленка Пилипчак

Highload продолжает публиковать истории о pet-проектах, вошедших в топ-20 лучших по итогам голосования наших читателей. Параллельно эти проекты оценивает жюри из опытных разработчиков и инвесторов. Победителей конкурса мы планируем объявить 10 июля.

Лучшие проекты получат призы от компании Genesis: занявший первое место — Apple iPhone 12 64GB, второе место — наушники Marshall Monitor II ANC Black, третье — набор Arduino.

Дальше — рассказ студента Владислава Пиотровского о его pet-проекте — Telegram-боте и базе данных с расписанием занятий в университете Rozklad_bot.

Идея

Я учусь в Одесском национальном экономическом университете на менеджера предприятия и увлекаюсь программированием. В моем вузе есть сайт с электронным расписанием, работает исправно, но не «запоминает» факультет, курс, группу — и их приходиться вводить вручную.

Владислав Пиотровский, создатель Rozklad_bot

Мне было лень каждый раз заходить в браузер, искать сайт, вводить одно и тоже. Также я заметил, что на это жалуются все однокурсники, поэтому решил автоматизировать и упростить процесс.

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

На данный момент уже появилось приложение от разработчиков сайта университета, но ботом по-прежнему продолжают пользоваться 86% студентов.

Реализация и технологии

Два года назад мы попытались сделать приложение на C# (его писал мой друг), но разобраться в древней системе управления базами данных Firebird, которую нам предоставил университет, мы так и не смогли. У нас практически не было опыта в мобильной разработке, я вообще не умел программировать.

Через некоторые время я изучил Python и решил снова взяться за проект. Я придумал, как «вытягивать» данные с сайта другим способом: привязывал данные к Telegram-аккаунту и сохранял в базу данных. После этого делал запрос по данным и скриншот браузера через Selenium, скидывал картинку в Telegram. Я показал бота своей группе — им понравилось.

Бот в Telegram с расписанием занятий в университете

С начала нового семестра я решил скидывать только текст, так как скриншот забирал очень много ресурсов, а на большом масштабе это привело бы к задержке в работе бота. Также решил сохранять логи активности, чтобы понимать, как пользуются ботом, и создал ORM (Object-Relational Mapping).

Вскоре было принято решение перейти на PostgreSQL, изменить таблицы на более универсальные. Для миграции данных были написаны специальные скрипты, поскольку новая схема сильно отличалась от старой.

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

Логическая схема Telegram-бота

Telegram-бот — это консольное приложение, состоит из трех раздельных модулей:

  • бота;
  • базы данных;
  • движка для общения с API университетов (парсинг-структуры института для процесса регистрации, получение расписания на день и на неделю, отображение аккаунта).

Для удобства общения с базой данных используется SQLAlchemy ORM, а с движком для API общаюсь с помощью специального класса. Когда начнут появляться новые API (у разных вузов — разные сайты и точки доступа), будем использовать фабричный паттерн, чтобы создать единый класс для всех API.

Технологии в проекте:

  • Notion — для документации. Из всех инструментов он показался наиболее гибким и интуитивным;
  • Python 3.8 на нем написан весь проект;
  • для работы с кодом и базой данных — GitHub, VScode, SQLite browser;
  • для контроля качества кода использую pre-commit c проверками: trailing-whitespace, reorder-python-imports, check-docstring-first, check-merge-conflict, mixed-line-ending, pyupgrade, black, flake8, pylint, mypy;
  • для общения с Telegram API использована библиотека python-telegram-bot;
  • для панели админа — фреймворк Flask, потому что его проще кастомизировать под личные нужны и задачи;
  • для первой версии базы данных использован SQLite, сейчас перешли на PostgreSQL, управляем через SQLAlchemy ORM и Alembic для миграций;
  • для хостинга используем AWS EC2 Ubuntu 18.0 VPS.

Основные трудности, с которыми столкнулись:

  • Получение данных от университета. Пройден большой путь от «копания» в самой базе, до парсинга сайта при помощи BeautifulSoup4. Позже сайт обновился и на нем была CSRF-защита, то есть просто так делать запросы через requests не выходило. Поэтому я написал парсер на основе сессий, который подменяет CSRF-токены, симулируя поведение браузера и вытягивает данные со страницы.
  • Из-за DDOS-атак на ночь приходилось выключать свичи, поэтому в темное время суток сайт и бот не работали. Но с помощью HTTP Сanary мы собрали все шаблоны API-запросов, которые приложение слало на сервер, и переписали свой движок. Теперь бот может работать круглосуточно, общаясь с основным REST API напрямую, а не через парсинг сайта.

Команда

Команда проекта

Проект на Python от начала до конца писал я, но сейчас решил масштабироваться, поэтому привлек команду своих друзей с которыми мы занимаемся разработкой чат-ботов под заказ. Всего нас 5 человек, некоторые ребята параллельно работают в нескольких командах.

Отдельная команда делает web-админ на Flask (чтобы отслеживать активность пользователей в разных университетах и темпы роста), вторая занимается базой данных, третья — пишет самого бота, четвертая — отвечает за бизнес-логику и маркетинг.

В какой стадии проект

Бот уже запущен для 55 университетов в 13 областях для 300 000 студентов: в день у нас — 1500 уникальных пользователей в неделю — 3000, в месяц — 5000. Всего у нас 7500 пользователей.

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

Сайт Rozklad_bot

Монетизация

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

Я начал продавать рекламу в боте для мероприятий и бизнесов, нацеленных на студентов. Цена пользователя для рассылки получилась в районе 0,1 грн. Сейчас моя аудитория — 7500 человек, и есть доступ к API вузов общим количеством 100-200 тысяч студентов. Если не спамить и уважительно относиться к пользователям, то только с этого бота можно получать $1000-4000 в месяц, а дальше под такую огромную аудиторию можно запускать новые проекты.

В планах — поисковик аудиторий, чтобы по номеру кабинета получать описание его местонахождение. Это будет уникальным сервисом, который можно «нарастить» на существующий продукт и заходить с ним в новые вузы.

Как будут оценивать проект

В рамках конкурса pet-проектов разработчики и инвесторы оценят проект Rozklad_bot по таким критериям:

1. Оригинальность идеи.

2. Качество кода.

3. Технический уровень.

4. Жизнеспособность идеи.

5. Перспективы проекта как бизнеса.

6. Инвестиционная привлекательность.

Победителей среди 20 кейсов определят на основе оценок инвесторов (45%), разработчиков (45%) и голосов читателей Highload (10%).

Более подробно, кто и как будет оценивать кейсы, можно прочитать здесь: статья об экспертах, критериях и правилах конкурса

Проект Rozklad_bot оценивают:

Павел Дмитриев

Senior Fullstack Mobile разработчик в Postindustira.

Оценивает проекты на Python.Начинал карьеру как Python разработчик, участвовал в создании одной из лидирующих на рынке CRM для малого бизнеса. Директор образовательного центра в Postindustria. Основные используемые языки Python, Objective-C и Swift.

Олег Лавренко

Head of Engineering Department Genesis на проекте AmoMedia.

Оценивает backend-проекты на Python. У Олега больше 8 лет опыта в IT: от инжиниринговых позиций до руководителя департамента, где он занимается оптимизацией процессов разработки, строит инженерную культуру, проектирует архитектуру приложений и сервисов AmoMedia.

Елена Мажуга

Старший инвестиционный аналитик Genesis Investments.

Роман Бабицкий

Основатель инвесткомпании Babitskyi Investment, глава совета по вопросам иностранных инвестиций и экономического развития Украины.

Дмитрий Томчук

Основатель инвестиционного фонда Fison.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023