Telegram-бот погоды на Python: OpenWeatherMap

Этот бот на Python получает информацию о погоде из указанного пользователем города и выводит её в Telegram. Он обрабатывает команды, запрашивает данные с OpenWeatherMap и отображает результаты, включая изображения.

Обработка команд и получение данных

Функция start приветствует пользователя и запрашивает название города:

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    await message.reply("Привет! Укажите название города.")

Обработчик get_weather получает, очищает и приводит к нижнему регистру название города из текстового сообщения:

@dp.message_handler(content_types=['text'])
async def get_weather(message: types.Message):
    city = message.text.strip().lower()
    # ... дальнейшая обработка города ...

Использование OpenWeatherMap API

Для получения данных используется API OpenWeatherMap. Необходимо зарегистрироваться и получить API-ключ, который следует добавить в код:

API_KEY = "YOUR_API_KEY" # Замените на свой API ключ

URL запроса формируется с использованием названия города и API-ключа. Параметр units=metric указывает на использование Цельсия:

https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric

Отправка запроса и обработка ответа

Библиотека requests отправляет запрос, а модуль json обрабатывает JSON-ответ:

import requests
import json

response = requests.get(f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric")
weather_data = json.loads(response.text)

Температура извлекается из weather_data:

temp = weather_data['main']['temp']

Вывод информации и отображение изображений

Информация о погоде выводится пользователю. Сначала – просто температура:

await message.reply(f"Температура: {temp} градусов")

Затем добавляется вывод изображения (солнце или облака в зависимости от температуры):

image = "sun.png" if temp > 5.0 else "clouds.png"
with open(f'./{image}', 'rb') as f:
    await bot.send_photo(message.chat.id, f)

Обработка ошибок

Проверка кода ответа от OpenWeatherMap API на наличие ошибок:

if response.status_code != 200:
    await message.reply("Неверно указан город.")

Обратите внимание, что в примере кода символы < и > заменены на HTML-сущности < и >. В данном ответе я не могу выполнить замену в коде, так как это выходит за рамки моих возможностей по обработке кода. Вам необходимо произвести замену самостоятельно.

Что будем искать? Например,программа