В прошлом году во время моей учебы программированию на Python в Яндекс.Практикуме я решил для себя, что, прежде чем искать работу по этой сфере, мне необходимо реализовать несколько самостоятельных проектов. Благо идеи для таких проектов у меня есть.
Одной из таких идей было создание Telegram бота, с помощью которого можно было бы искать вакансии, предоставляемые работодателями в счет установленных для них квот по трудоустройству людей с инвалидностью.
Здесь мне хотелось бы сразу оговориться, что бот представляет собой дополнительный интерфейс, который через API сайта «Работа России» получает доступ к базе вакансий и в удобном для пользователя формате показывает их. Да, будет несколько дополнительных функций, но больше вакансий, чем имеется в базе, бот не покажет, к сожалению.
Что уже сделано
Если коротко, то бот готов процентов на 60, но это не точно!
На самом деле я уже несколько раз переписывал часть кода, которая отвечает за взаимодействие с API «Работа России», и код, обеспечивающий работу с базой данных. Кроме того, многократному изменению подвергся модуль, который обрабатывает данные пользователя.
По моим скромным оценкам, я уже должен находиться где-то на финальной части работы над проектом, дописывать последние тесты, упаковывать все части в Docker-контейнеры и заниматься размещением проекта на удаленном сервере. Но что-то пошло не по плану, и я сильно отстаю.
В чем проблема?
Как мне видится, основная проблема состоит в том, что у меня нет четкого плана работы, в котором были бы сформулированы основные цели и задачи. А раз сформулированных целей и задач нет, то и работать приходится по наитию, что плохо сказывается как на скорости разработки, так и на качестве разрабатываемого продукта.
Кроме того, во время работы над той или иной задачей появляются новые задачи, которые, по-хорошему, нужно фиксировать и возвращаться к ним по мере выполнения текущих задач, если эти задачи не имеют высокого приоритета.
Собственно тут ничего своего выдумывать не надо. Надо просто наработать навыки взаимодействия с таск менеджерами. Осталось только найти доступный таск менеджер для программ экранного доступа.
И что делать?
Вернуться на исходную позицию и начать разработку бота сначала, но не с нуля, так как часть кода уже написана и даже работает. Необходимо максимально четко сформулировать конечную цель, которую хочется достичь, а также детально прописать алгоритм взаимодействия пользователя с ботом.
И еще. Раз уж у меня есть небольшой сайт про технологии, то почему бы не описывать ход разработки здесь? Написание статей позволяет лучше структурировать материал, глубже разобраться в той или иной теме. Не уверен, что мой опыт покажется кому-либо интересным, но я это делаю, в первую очередь, для самого себя.
Work for everyone
В заключении вводной статьи про разработку бота мне хотелось бы дать немного общей информации о функционале бота и о технологиях, которые я планирую использовать. В репозитории проекта Work for everyone на GitHub вы всегда сможете поближе познакомиться с кодом и структурой проекта.
![На желтом фоне надпись: работа для всех и логотип Telegram](https://touch-it.ru/wp-content/uploads/2024/01/1704565138213-1024x1024.jpg)
На момент публикации настоящей статьи в репозитории будет выложен файл 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 на финальной части учебы в Яндекс.Практикуме, мой ноутбук сильно против этого, так как ему не хватает оперативной памяти.
Уверен, что понадобится много чего еще, но об этом уже будем говорить дальше.