Бот погоды в Telegram на Python

Бот погоды в Telegram на Python

Для создания Telegram бота для погоды на Python, вам понадобится:

  1. Библиотека python-telegram-bot для работы с Telegram Bot API.
  2. Библиотека requests для отправки HTTP-запросов на сервис погоды.

1. Создание бота в Telegram:

  1. Начните чат с @BotFather в Telegram.
  2. Введите /newbot для создания нового бота.
  3. Следуйте инструкциям 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. Запуск:

  1. Установите необходимые библиотеки:
pip install python-telegram-bot requests
  1. Запустите скрипт Python.

Теперь ваш бот готов к работе! Вы можете начать чат с вашим ботом, ввести название города и получить текущую погоду.

weather.py
Размер: 18 Kb

Скачали 162

Скачать

Рассмотри код подробнее:

  1. Импорт необходимых библиотек:
pythonCopy code

import logging import requests from telegram import Bot, Update from telegram.ext import CommandHandler, CallbackContext, Updater
  1. Настройка токена и 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-адрес, по которому мы отправляем запросы, чтобы получить данные о погоде.
  1. Настройка логирования:
pythonCopy code

logging.basicConfig(level=logging.INFO)

Эта строка позволяет настроить базовые настройки логирования для отображения информационных сообщений.

  1. Команда /start:
pythonCopy code

def start(update: Update, context: CallbackContext) -> None: update.message.reply_text('Привет! Введите название города, чтобы получить погоду.')

Эта функция будет вызвана, когда пользователь отправит команду /start вашему боту. Бот ответит приветственным сообщением.

  1. Функция для получения погоды:
pythonCopy code

def weather(update: Update, context: CallbackContext) -> None:

Эта функция обрабатывает текстовые сообщения от пользователей, предполагая, что это название города.

  1. Запрос погоды:
pythonCopy code

city = update.message.text res = requests.get(WEATHER_URL.format(city, WEATHER_API_KEY)) data = res.json()

Мы получаем название города от пользователя, делаем запрос на OpenWeatherMap и конвертируем ответ в JSON.

  1. Обработка ответа:
pythonCopy code

if data.get('cod') == 200: ... else: ...

Проверяем, успешно ли выполнен запрос к OpenWeatherMap. Если код ответа равен 200, это означает успех.

  1. Формирование и отправка сообщения:
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)

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

  1. Главная функция:
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.

  1. Запуск бота:
pythonCopy code

if __name__ == '__main__': main()

Это стандартный код для запуска главной функции, если скрипт запущен как основной файл.

Оцените статью
CONFF.ORG
Добавить комментарий