На выходных был в гостях у моего друга и заметил на его столе суперкрутой изогнутый сверхширокий 35-дюймовый монитор 💻 . С его разрешения я провел некоторое время, используя монитор, и он меня привлек. Я решил приобрести такой себе. После проверки сайта, где он продается, он был на 10000 дороже, чем цена, за которую его купил мой друг на тот момент, поэтому я планировал купить его, когда цена упадет. Мне лень время от времени заходить на сайт, чтобы проверьте цену, поэтому я решил использовать все, что есть в моем распоряжении, чтобы создать бота, который будет отправлять мне ежедневное уведомление о цене интересующего меня товара.
Мне нужна платформа для жизни бота. Похоже, Telegram — очень «дружественная к ботам» платформа, а документация очень краткая и понятная, поэтому я выбрал ее. Затем мне нужно извлечь цену с веб-сайта и передать ее боту. Я знаю небольшой парсинг веб-страниц с помощью моего любимого языка программирования Python.
Создайте Telegram-бота 🤖
Процесс создания бота в Telegram довольно прост: мы создаем бота, разговаривая с ботом по имени BotFather, как интересно выразился Telegram: один бот, который будет управлять ими всеми.
Прежде всего, нам нужно найти всемогущего BotFather в приложении Telegram и начать с ним чат, отправив /start, BotFather ответит нам списком команд (начинается с /), которые мы можем выполнить. Теперь, отправив ему сообщение /newbot, он проведет нас через процесс создания нового бота, предоставив ему имя и @username (точно так же, как человек-пользователь Telegram). После этого BotFather поздравит нас с созданием нового бота и отправит нам токен, который будет использоваться вместе с Telegram Bot API для управления поведением нашего бота, мы должны держать этот токен в секрете ⚠️ потому что тот, кто владеет этим кодом, владеет ботом.
Теперь мы создали бота, нам нужно сообщить боту, кто мы. Найдите бота, используя имя пользователя бота, и начните с ним разговор, отправьте ему случайное сообщение, например «привет» или «как дела».
Затем мы будем использовать токен, предоставленный BotFather, для доступа к /getUpdatesAPI Telegram и получения идентификатора нашего чата.
Запишите токен и идентификатор чата , мы будем использовать его позже.
Примечание. Мы можем настроить нашего бота, установив его описание, информацию и изображение профиля, используя команды /setdescription, /setabouttext, /setuserpic соответственно.
Очистите сайт ⛏️
Чтобы очистить веб-сайт, мы должны сначала узнать, что нам нужно. На этом сайте мы замечаем, что название и цена товара будут нашим главным интересом.
В любом современном браузере мы можем запустить инструмент проверки элементов , чтобы узнать структуру HTML сайта, который мы посещаем. Нам нетрудно понять, что этот сайт использует внутри элементов собственный атрибут itemprop для их уникальной идентификации, и мы можем это использовать.
Собрав знания о сайте, мы можем начать писать скрипт Python для его очистки. Нам понадобится несколько пакетов, запустите следующую команду, чтобы установить их с помощью Pipenv, современного менеджера пакетов для Python; вам следует начать использовать его, если вы еще этого не сделали:
Хорошей практикой является не вставлять токен или секрет напрямую в код, поэтому давайте создадим файл с именем .envи поместим в него наш токен API Telegram и идентификатор чата.
Далее мы создадим файл Python с именем main.py и начнем с загрузки переменной среды из .env файла и импорта необходимых модулей.
Примечание: load_dotenv() будет автоматически проанализирован .envфайл, который мы создали ранее, и пара ключ/значение будет загружена в переменную системной среды, доступ к которой можно будет получить os.getenv() позже.
Теперь мы объявим несколько постоянных переменных и воспользуемся списком, чтобы включить элементы, в обновлении которых мы заинтересованы.
Мы используем os.gentenv() для получения переменной среды, которую мы установили ранее, и используем токен для формирования URL-адреса API Telegram. Обратите внимание, что мы используем f-Strings для , он был представлен в Python 3.6 и призван сделать форматирование строк более простым и понятным. С другой стороны, у нас может быть несколько записей в файле ./sendMessage TELEGRAM_API_SEND_MSG
Наконец, мы используем цикл для просмотра элементов и очистки их названий и цен с помощью анализатора HTML BeautifulSoup, а затем отправляем данные в Telegram API, используя наши TOKEN и CHAT_ID.
Примечание. С помощью BeautifulSoup мы можем использовать селекторы CSS для перемещения по HTML и поиска интересующего нас элемента, а затем извлечения из него данных. Словарь data содержит параметры, которые будут отправлены в Telegram /sendMessageAPI с помощью POST-запроса. chat_id и text являются обязательными параметрами, хотя parse_mod eявляются необязательными, мы используем режим анализа Markdown, чтобы отображать в нашем сообщении жирный и встроенный URL-адрес.
К этому моменту, если мы попытаемся запустить программу, мы должны получать сообщения от нашего бота в Telegram.
Автоматизируйте процесс с помощью AWS ⏰
Мы собираемся использовать два сервиса AWS, чтобы автоматизировать процесс очистки сайта и отправить цену себе через Telegram API.
- AWS Lambda — давайте запустим фрагмент кода/скрипта/функции в облаке, даже не подготавливая и не управляя каким-либо сервером.
- События AWS CloudWatch — позволяют нам планировать автоматические действия, которые будут автоматически запускаться в определенное время и дату.
Однако мы не собираемся развертывать наше приложение вручную, с помощью такого сервиса, как Serverless, мы можем определить, как мы будем развертывать наше приложение, в YAML-файле и выполнить развертывание с помощью одной команды.
Во-первых, нам необходимо установить и настроить AWS CLI и Serverless CLI.
Далее serverless-python-requirements необходим плагин для упаковки и развертывания приложения Python с помощью внешних пакетов.
Теперь мы собираемся немного изменить main.py и обернуть его функцией, которую Lambda сможет распознать и выполнить:
Далее мы создаем файл serverless.yml со следующими конфигурациями:
Примечание . Мы сообщаем Serverless развернуть нашу основную функцию в файле main.py и запланировать событие CloudWatch для запуска функции в 8 утра по всемирному координированному времени каждый день, используя выражение CRON. Мы используем плагин, который мы установили ранее, чтобы указать бессерверной системе упаковать необходимые пакеты, используя указанные в Pipfile от Pipenv.
Мы развертываем наше приложение, выполнив следующую команду:
После развертывания мы можем вручную вызвать функцию и проверить, работает ли она:
Теперь наше приложение запущено и работает, и мы можем просто сидеть сложа руки и готовиться получать последние цены каждый день.
.
❤️ Если вам понравилась статья, ставьте лайк и подписывайтесь на мой канал "Заходи в Ай-Ти".
👍 Если у вас остались вопросы или есть интересные темы, которые вы хотите, чтобы я разобрал, то пишите в комментариях. Ваше мнение очень важно для меня!
.
#python telegram bot #создание бота в телеграм #как сделать бота в телеграм #телеграм бот на python #как создать бота в телеграм #telethon python #создание бота для телеграма #создание бота в телеграм