Читать книгу Telegram Bot. Руководство по созданию бота в мессенджере Телеграм - - Страница 4
Глава 4: Создание функций бота
ОглавлениеПосле того, как мы создали базовый бот в предыдущей главе, мы можем начать добавлять функциональность, чтобы наш бот был более полезным для пользователей. В этой главе мы рассмотрим создание функций для нашего бота.
Давайте представим, что мы хотим создать функцию, которая будет отправлять пользователю случайную цитату. Для этого мы можем использовать API сайта They Said So, который предоставляет доступ к большому количеству цитат известных людей.
Для начала, нам нужно получить API-ключ от сайта They Said So. Затем мы можем использовать библиотеку requests для отправки запросов на сервер сайта и получения случайной цитаты.
import requests
def get_quote():
url = "https://api.theysaidso.com/quote/random"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
quote = response.json()["contents"]["quote"]
return quote
Эта функция отправляет GET-запрос на сервер сайта They Said So и получает случайную цитату в формате JSON. Затем мы извлекаем цитату из ответа и возвращаем ее.
Теперь, чтобы использовать эту функцию в нашем боте, мы можем создать новый обработчик команды "/quote", который будет вызывать функцию get_quote и отправлять полученную цитату пользователю:
def quote(update, context):
quote = get_quote()
context.bot.send_message(chat_id=update.effective_chat.id, text=quote)
updater.dispatcher.add_handler(CommandHandler('quote', quote))
Мы добавили обработчик команды "/quote", который вызывает функцию get_quote и отправляет полученную цитату пользователю.
Также мы можем добавить функцию, которая будет отправлять пользователю случайную картинку кота. Для этого мы можем использовать API сайта TheCatAPI, который предоставляет доступ к большому количеству фотографий котов.
def get_cat_image_url():
url = "https://api.thecatapi.com/v1/images/search"
response = requests.get(url)
image_url = response.json()[0]["url"]
return image_url
Эта функция отправляет GET-запрос на сервер сайта TheCatAPI и получает случайную фотографию кота в формате JSON. Затем мы извлекаем URL изображения и возвращаем его.
Теперь мы можем создать обработчик команды "/cat", который будет вызывать функцию get_cat_image_url и отправлять пользователю полученную картинку кота:
def cat(update, context):
image_url = get_cat_image_url()
context.bot.send_photo(chat_id=update.effective_chat.id, photo=image_url)
updater.dispatcher.add_handler(CommandHandler('cat', cat))
Для того чтобы наш бот стал еще более функциональным, мы можем добавить ему возможность получения прогноза погоды. Для этого мы можем использовать API сайта OpenWeatherMap.
Для начала, мы должны получить API-ключ от сайта OpenWeatherMap и установить библиотеку pyowm, которая облегчает работу с API. Затем мы можем создать функцию, которая будет получать текущую погоду для заданного города:
import pyowm
owm = pyowm.OWM('your-api-key')
def get_weather(city):
observation = owm.weather_at_place(city)
weather = observation.get_weather()
temperature = weather.get_temperature('celsius')['temp']
status = weather.get_detailed_status()
return f"Current weather in {city}: {status}. Temperature: {temperature}°C"
Эта функция получает текущую погоду для заданного города, используя API сайта OpenWeatherMap. Мы извлекаем температуру и детальный статус погоды, а затем формируем строку с информацией о погоде.
Теперь мы можем создать обработчик команды "/weather", который будет вызывать функцию get_weather и отправлять пользователю информацию о погоде для заданного города:
def weather(update, context):
text = update.message.text
city = text.split(' ')[1]
weather = get_weather(city)
context.bot.send_message(chat_id=update.effective_chat.id, text=weather)
updater.dispatcher.add_handler(CommandHandler('weather', weather))
Мы добавили обработчик команды "/weather", который получает название города из сообщения пользователя и вызывает функцию get_weather для получения информации о погоде. Затем мы отправляем полученную информацию пользователю.
Теперь наш бот имеет три функции: отправку случайной цитаты, отправку случайной картинки кота и получение информации о погоде для заданного города. Мы можем продолжать добавлять новые функции, чтобы сделать наш бот еще более полезным и интересным для пользователей.