
Для создания Telegram бота для погоды на Python, вам понадобится:
- Библиотека
python-telegram-bot
для работы с Telegram Bot API. - Библиотека
requests
для отправки HTTP-запросов на сервис погоды.
1. Создание бота в Telegram:
- Начните чат с @BotFather в Telegram.
- Введите
/newbot
для создания нового бота. - Следуйте инструкциям BotFather и получите токен для вашего бота.
2. Регистрация на сервисе погоды:
Зарегистрируйтесь на сервисе погоды, например, на OpenWeatherMap, и получите API-ключ.
3. Написание бота:
import logging import requests from telegram.ext import MessageHandler, Filters from telegram import Bot, Update from telegram.ext import CommandHandler, CallbackContext, Updater TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' WEATHER_API_KEY = 'YOUR_OPENWEATHERMAP_API_KEY' WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather?q={}&units=metric&appid={}" logging.basicConfig(level=logging.INFO) def start(update: Update, context: CallbackContext) -> None: update.message.reply_text('Привет! Введите название города, чтобы получить погоду.') def weather(update: Update, context: CallbackContext) -> None: city = update.message.text res = requests.get(WEATHER_URL.format(city, WEATHER_API_KEY)) data = res.json() if data.get('cod') == 200: city_name = data['name'] country = data['sys']['country'] temperature = data['main']['temp'] description = data['weather'][0]['description'] weather_info = f"Погода в {city_name}, {country}:\nТемпература: {temperature}°C\nОписание: {description}" update.message.reply_text(weather_info) else: update.message.reply_text('Не удалось получить информацию о погоде. Попробуйте ввести другой город.') def main() -> None: updater = Updater(token=TOKEN) dp = updater.dispatcher dp.add_handler(CommandHandler("start", start)) dp.add_handler(MessageHandler(Filters.text & ~Filters.command, weather)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
4. Запуск:
- Установите необходимые библиотеки:
pip install python-telegram-bot requests
- Запустите скрипт Python.
Теперь ваш бот готов к работе! Вы можете начать чат с вашим ботом, ввести название города и получить текущую погоду.
Скачали 162
Рассмотри код подробнее:
- Импорт необходимых библиотек:
pythonCopy code import logging import requests from telegram import Bot, Update from telegram.ext import CommandHandler, CallbackContext, Updater
- Настройка токена и API-ключа:
pythonCopy code TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' WEATHER_API_KEY = 'YOUR_OPENWEATHERMAP_API_KEY' WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather?q={}&units=metric&appid={}" TOKEN - это токен вашего Telegram бота. WEATHER_API_KEY - это ваш API-ключ от OpenWeatherMap. WEATHER_URL - это URL-адрес, по которому мы отправляем запросы, чтобы получить данные о погоде.
- Настройка логирования:
pythonCopy code logging.basicConfig(level=logging.INFO)
Эта строка позволяет настроить базовые настройки логирования для отображения информационных сообщений.
- Команда /start:
pythonCopy code def start(update: Update, context: CallbackContext) -> None: update.message.reply_text('Привет! Введите название города, чтобы получить погоду.')
Эта функция будет вызвана, когда пользователь отправит команду /start
вашему боту. Бот ответит приветственным сообщением.
- Функция для получения погоды:
pythonCopy code def weather(update: Update, context: CallbackContext) -> None:
Эта функция обрабатывает текстовые сообщения от пользователей, предполагая, что это название города.
- Запрос погоды:
pythonCopy code city = update.message.text res = requests.get(WEATHER_URL.format(city, WEATHER_API_KEY)) data = res.json()
Мы получаем название города от пользователя, делаем запрос на OpenWeatherMap и конвертируем ответ в JSON.
- Обработка ответа:
pythonCopy code if data.get('cod') == 200: ... else: ...
Проверяем, успешно ли выполнен запрос к OpenWeatherMap. Если код ответа равен 200, это означает успех.
- Формирование и отправка сообщения:
pythonCopy code city_name = data['name'] country = data['sys']['country'] temperature = data['main']['temp'] description = data['weather'][0]['description'] weather_info = f"Погода в {city_name}, {country}:\nТемпература: {temperature}°C\nОписание: {description}" update.message.reply_text(weather_info)
Мы извлекаем необходимую информацию из ответа и формируем сообщение для пользователя.
- Главная функция:
pythonCopy code def main() -> None: updater = Updater(token=TOKEN) dp = updater.dispatcher dp.add_handler(CommandHandler("start", start)) dp.add_handler(MessageHandler(Filters.text & ~Filters.command, weather)) updater.start_polling() updater.idle()
Эта функция инициализирует нашего бота, добавляет обработчики для команд и текстовых сообщений и начинает опрос Telegram API.
- Запуск бота:
pythonCopy code if __name__ == '__main__': main()
Это стандартный код для запуска главной функции, если скрипт запущен как основной файл.