Задать вопрос
@jA8a

Как сделать, чтобы на мой запрос бот отправлял текущую температуру воздуха?

Хочу, чтобы я вводил название города и бот отправлял текущую температуру в этом городе.
Для создания бота использую aiogram
Для запроса погоды python-weather
Код написан таким оразом:

import asyncio
import logging
import python_weather

from config import TOKEN2
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message


bot = Bot(TOKEN2)
dp = Dispatcher()

async def main():
    await dp.start_polling(bot)

@dp.message()
async def get_weather(message: Message):
    async with python_weather.Client(unit=python_weather.METRIC) as client:
        weather = await client.get(message.text)
        await message.answer(weather.temperature)

if __name__ == '__main__':
    asyncio.run(main())

В этом виде он выдает ошибку:

ERROR:aiogram.event:Cause exception while process update id=372549765 by bot id=6876247750
ValidationError: 1 validation error for SendMessage
text

Причем если вместо вызова await message.answer(weather.temperature) я напишу print(weather.temperature), ошибок не будет, и температура будет выведена в терминал.

Я так понимаю проблема именно в этом вызове. Если да, то как будет правильно его написать?
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@neskdidadf
import asyncio
import logging
import python_weather

from config import TOKEN2
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message


bot = Bot(TOKEN2)
dp = Dispatcher()

async def main():
    await dp.start_polling(bot)

@dp.message()
async def get_weather(message: Message):
    async with python_weather.Client(unit=python_weather.METRIC) as client:
        try:
            weather = await client.get(message.text)
            temperature = weather.current.temperature
            response_message = f"Текущая температура в {message.text}: {temperature}°C"        
            await message.answer(response_message)
        except Exception as e:
            await message.answer("Не удалось получить данные о погоде.")

if __name__ == '__main__':
    asyncio.run(main())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы