Автор оригинала: Dzaky Widya Putra.
Представьте, что есть сообщение бот, который отправит вам случайное милое изображение собаки, когда вы хотите, звучит круто, верно? Давайте сделаем один!
Для этого учебника мы собираемся использовать Python 3, Python-Telegram-Bot , и общественные API RandomDog Отказ
В конце этого урока у вас будет подчеркнуть бот, который отправит вам милые изображения для собак каждый раз, когда вам это нужно, yay!
Начиная
Прежде чем мы начнем писать программу, нам нужно создать токен для нашего бота. Токен необходим для доступа к API Telegram и устанавливает необходимые зависимости.
1. Создайте новый бот в боте
Если вы хотите сделать бот в телеграмме, вам нужно сначала «зарегистрировать» свой бот, прежде чем использовать его. Когда мы «зарегистрируем» нашего бота, мы получим токен для доступа к API Telegram.
Перейти к Botfather (Если вы открываете его на рабочем столе, убедитесь, что у вас есть приложение Telegram), затем создайте новый бот, отправив /newbot
команда. Следуйте инструкциям, пока не получите имя пользователя и токен для своего бота. Вы можете пойти в свой бот, доступа к этому URL: https://telegram.me/your_bot_username И ваш токен должен выглядеть так.
704418931:AAEtcZ*************
2. Установите библиотеку
Поскольку мы собираемся использовать библиотеку для этого руководства, установите ее с помощью этой команды.
pip3 install python-telegram-bot
Если библиотека успешно установлена, то мы должны идти.
Напишите программу
Давайте сделаем наш первый бот. Этот бот должен вернуть изображение собаки, когда мы отправляем /BOP
команда. Чтобы быть в состоянии сделать это, мы можем использовать публичные API от RandomDog Чтобы помочь нам генерировать случайные собаки.
Рабочий процесс нашего бота так же просто, как это:
1. Импортируйте библиотеки
Во-первых, импортируйте все библиотеки, которые нам нужны.
from telegram.ext import Updater, CommandHandler import requests import re
2. Доступ к API и получите URL-адрес изображения
Давайте создадим функцию, чтобы получить URL. Используя библиотеку запросов, мы можем получить доступ к API и получить данные JSON.
contents = requests.get('https://random.dog/woof.json').json()
Вы можете проверить данные JSON, доступ к этому URL: https://random.dog/woof.json
в вашем браузере. Вы увидите что-то вроде этого на экране:
{"url":"https://random.dog/*****.JPG"}
Получите URL-адрес изображения, так как нам нужен этот параметр, чтобы иметь возможность отправить изображение.
image_url = contents['url']
Оберните этот код в функцию под названием get_url ()
Отказ
def get_url(): contents = requests.get('https://random.dog/woof.json').json() url = contents['url'] return url
3. Отправьте изображение
Для отправки сообщения/изображения нам нужны два параметра, URL изображения и идентификатор получателя – это может быть идентификатор группы или идентификатор пользователя.
Мы можем получить URL-адрес изображения, позвонив нашему get_url ()
функция.
url = get_url()
Получите идентификатор получателя, используя этот код:
chat_id = update.message.chat_id
После того, как мы получим URL-адрес изображения и ID получателя, пришло время отправлять сообщение, которое является изображением.
bot.send_photo(chat_id=chat_id, photo=url)
Оберните этот код в функции под названием BOP
и убедитесь, что ваш код выглядит так:
def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url)
4. Основная программа
Наконец, создайте другую функцию под названием Главная
Чтобы запустить нашу программу. Не забудьте изменить Your_token
С токеном, который мы сгенерировали ранее в этом руководстве.
def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
В конце концов ваш код должен выглядеть так:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('https://random.dog/woof.json').json() url = contents['url'] return url def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
5. Запустите программу
Потрясающие! Вы закончили свою первую программу. Теперь давайте проверим, работает ли это. Сохраните файл, назовите его main.py
Затем запустите его, используя эту команду.
python3 main.py
Перейдите в свою телеграмму BOT, доступая к этому URL: https://telegram.me/your_bot_username
Отказ Отправить /BOP
команда. Если все отлично проходит, бот ответит с изображением случайных собак. Мило справа?
Обработка ошибок
Большой! Теперь у вас есть бот, который отправит вам милое изображение собаки всякий раз, когда вы хотите.
Есть больше! RandomDog API не только генерирует изображения, но и видео и GIFS. Если мы получим доступ к API, и мы получаем видео или GIF, есть ошибка и бот не отправят его вам.
Давайте исправим это, чтобы бот отправит сообщение только с наложением изображения. Если мы получим видео или GIF, то мы снова позвоним API, пока мы не получим изображение.
1. Сопоставьте расширение файла с помощью Regex
Мы собираемся использовать Regex для решения этой проблемы.
Чтобы отличить изображение из видео или GIF, мы можем взглянуть на расширение файла. Нам нужна только последняя часть нашего URL.
https://random.dog/*****.JPG
Нам нужно определить, во-первых, какие расширения файлов разрешены в нашей программе.
allowed_extension = ['jpg','jpeg','png']
Затем используйте Regex для извлечения расширения файла с URL.
file_extension = re.search("([^.]*)$",url).group(1).lower()
Используя этот код, сделайте функцию под названием get_image_url ()
Чтобы воспользоваться URL, пока мы не получим расширение файла, которое мы хотим (JPG, JPEG, PNG).
def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url
2. Измените свой код
Большой! Теперь для последней части замените URL ()
линия в BOP ()
Функция с URL ()
и ваш код должен выглядеть так:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('https://random.dog/woof.json').json() url = contents['url'] return url def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url def bop(bot, update): url = get_image_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
Хороший! Все должно работать идеально. Вы также можете проверить мой Github учетная запись, чтобы получить код.
Наконец, поздравляю за завершение этого учебника, плюс у вас сейчас крутой телеграмму BOT.
Пожалуйста, оставьте комментарий, если вы думаете, что есть какие-либо ошибки в моем коде или письме, потому что я все еще учиюсь, и я хочу поправляться.
Спасибо и удачи практикую!:)