Перейти к содержанию

Telegram бот Work for everyone

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

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

Здесь мне хотелось бы сразу оговориться, что бот представляет собой дополнительный интерфейс, который через API сайта «Работа России» получает доступ к базе вакансий и в удобном для пользователя формате показывает их. Да, будет несколько дополнительных функций, но больше вакансий, чем имеется в базе, бот не покажет, к сожалению.

Что уже сделано

Если коротко, то бот готов процентов на 60, но это не точно!

На самом деле я уже несколько раз переписывал часть кода, которая отвечает за взаимодействие с API «Работа России», и код, обеспечивающий работу с базой данных. Кроме того, многократному изменению подвергся модуль, который обрабатывает данные пользователя.

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

В чем проблема?

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

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

Собственно тут ничего своего выдумывать не надо. Надо просто наработать навыки взаимодействия с таск менеджерами. Осталось только найти доступный таск менеджер для программ экранного доступа.

И что делать?

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

И еще. Раз уж у меня есть небольшой сайт про технологии, то почему бы не описывать ход разработки здесь?  Написание статей позволяет лучше структурировать материал, глубже разобраться в той или иной теме. Не уверен, что мой опыт покажется кому-либо интересным, но я это делаю, в первую очередь, для самого себя.

Work for everyone

В заключении вводной статьи про разработку бота мне хотелось бы дать немного общей информации о функционале бота и о технологиях, которые я планирую использовать. В репозитории проекта Work for everyone на GitHub вы всегда сможете поближе познакомиться с кодом и структурой проекта.

На желтом фоне надпись: работа для всех и логотип Telegram
На желтом фоне надпись: работа для всех и логотип Telegram

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

Если кратко, но по сути, то Telegram bot Work for everyone позволит:

  • искать вакансии в указанном пользователем населенном пункте;
  • просматривать список вакансий с краткой информацией;
  • получать подробную информацию о конкретной вакансии;
  • добавлять вакансии в избранное.

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

После валидации введенных пользователем данных бот делает запрос к API «Работа России», чтобы получить список вакансий. О проблемах, с которыми я столкнулся при работе с API, я напишу уже в одной из следующих статей.

Далее пользователь узнает количество найденных вакансий в указанной им местности и получает список из вакансий (по 10 вакансий за один раз). Пользователь может подробнее узнать о вакансии, а также добавить ее в избранное.

Вот если кратко, то как-то так, в моем представлении, должен работать бот. Подробнее смотрите в файле readme.md в репозитории.

Что по технологиям

Основные пункты применяемых технологий выглядят так:

  • Python: 3.11
  • Peewee: 3.16.3
  • Aiogram: 3.1.1

Подробнее с используемыми зависимостями в проекте вы можете ознакомиться в файле requirements.txt

С версией Python думаю, что все понятно, объяснять тут особо и нечего. А вот о Peewee и Aiogram пару слов все же замолвлю.

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

Как написано в документации к Peewee, Peewee представляет собой простую и небольшую ORM (Object-Relational Mapping), которая позволяет достаточно быстро настроить работу с БД. Да, можно было бы использовать Django ORM, известная мне по учебе, но для моего бота это решение было бы избыточным. Peewee поддерживает работу с такими популярными БД, как SQLite, MySql, PostgreSQL.

Применительно к боту Work for everyone меня интересуют SQLite и PostgreSQL. SQLite я использую в процессе разработки, а в продакшн уйдет PostgreSQL. ORM Peewee позволяет достаточно быстро заменять одну базу данных на другую.

Еще мне понадобится Redis, который я планирую использовать при сборе данных о пользователях (федеральный округ, регион, название населенного пункта, а также имя пользователя).

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

Уверен, что понадобится много чего еще, но об этом уже будем говорить дальше.