Телеграм-бот для поиска фотографий через API-ключ фотостока

Материал из Поле цифровой дидактики



Определение функциональных требований к боту

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

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

Размышляя таким образом, я пришел к следующему реестру функциональных и нефункциональных требований:

  • Бот должен уметь начинать работу с пользователем через команду /start
  • Бот должен уметь рассказывать о себе и о том зачем он нужен
  • В случае, если пользователь забыл команды - напомнить пользователю о них через команду /help
  • Иметь возможность работать как с открытыми запросами (на случай, если нужна случайная фотография), так и с закрытыми (при конкретных запросах)
  • Выдавать ссылку на источник с фотографией, при выборе пользователем нужной фотографии (из 4-х)



Получение API и создание внутреннего конфигурационного API файла

Далее также важный момент, для работы бота потребуется ДВА API ключа. Первый - Telegram Bot Key, второй - как раз Unsplash API.

Для того, чтобы получить ключ для бота Telegram, необходимо его создать. Сделать это можно через бота @BotFather.

При заходе в бота, необходимо открыть внутреннее интегрированное приложение через кнопку "Open" и создать своего бота:

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


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

Чтобы получить доступ к API Unsplash необходимо зайти на их сайт, зарегистрироваться и в личном кабинете открыть новое приложение (проект), указать его вид и название. Важно, что Access и Secret ключи должны быть конфиденциальны и не могут передаваться третьим лицам, поэтому в этом проекте и статье, ключи будут скрыты.

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


Разработка бота

Начало работы и создание заглушки

Для начала был создан файлик с начальными зависимостями в Python

"requirements.txt"

После создания этого файлика необходимо запустить команду `pip install -r [путь к файлу]` и указать путь к созданному requirements.txt

Начало разработки кода

Так как разработка в Python позволяет работать с разными существующими библиотеками, имеющие свои документации, будем пользоваться предоставленными правами.

Для работы бота я подключил несколько библиотек, такие как:

  • python-telegram-bot - основная библиотека для создания Telegram ботов
  • requests - библиотека для отправки HTTP-запросов к API Unsplash
  • python-dotenv - загрузка переменных окружения из файла .env
  • logging - логирование событий и ошибок для отладки
  • os - взаимодействие с операционной системой
  • uuid - генерация уникальных идентификаторов

В соответствии с ранее описанными функциональными требованиями диаграмма UML ниже

Непосредственная работа с кодом приложения

Импорт вышеописанных библиотек и подгрузка переменных из файла .env:

Настройка логирования

Работа с классом

Далее, так как пользователей у бота может быть несколько - крайне важно создать класс, который поможет работать нескольким пользователям одновременно в соответствие с объектно-ориентированным программированием.

Для этого я создал класс, в котором указал основные метаданные, а также функции:

Программирование функций класса бота
= Команда "/start" =

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


📚 Методические материалы

 Description
PythonPython в русском языке распространено название пито́н) — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций. Язык является полностью объектно-ориентированным в том плане, что всё является объектами