В посте "AIOgram3 13. Прогноз погоды в боте - OpenWeatherMap" мы с вами добавили прогноз погоды к боту, просто так, что бы был. С тех пор "много воды утекло" и я хочу осовременить код, добавить валидацию получаемых данных и удобный к ним доступ.

Без лишних слов:

1. Создаём Pydantic-модели на основе полученного JSON:

``` class WeatherDescription(BaseModel): description: str

class WeatherMainInfo(BaseModel): temp: float feels_like: float pressure: float humidity: int

class WeatherWindInfo(BaseModel): speed: float

class WeatherData(BaseModel): main: WeatherMainInfo wind: WeatherWindInfo rain: dict | None = None snow: dict | None = None weather: list[WeatherDescription]

class WeatherResponse(BaseModel): count: int list: list[WeatherData] ```

2. В функции request_weather() создаём объект модели:

```

#...код функции

if result.get("count"): weather_response = WeatherResponse(**result) return generate_result(weather_response, city) ```

3. Переписываем функцию generate_result() для получения данных из объекта модели:

``` def generate_result(data: WeatherResponse, city: str) -> str: weather_data = data.list[0] rain = ("ожидается", "не ожидается")[weather_data.rain is None] snow = ("ожидается", "не ожидается")[weather_data.snow is None] return f""" <b>Прогноз погоды в городе {city}</b>

Сейчас температура {weather_data.main.temp}°C Ощущается как {weather_data.main.feels_like}° ⛅️{weather_data.weather[0].description}⛅️ 💨 Скорость ветра {weather_data.wind.speed}м/с 💨 Давление {weather_data.main.pressure * 0.75} мм рт.ст. Влажность {weather_data.main.humidity}% 💦 Дождь {rain} ❄️ Снег {snow} """ ```

Полный код бота доступен в нашем репозитории для подписчиков Boosty.

В посте "AIOgram3 13. Прогноз погоды в боте - OpenWeatherMap" мы с вами добавили прогноз погоды к боту, просто так, что бы был | Сетка — новая социальная сеть от hh.ru
repost

159

input message

напишите коммент

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь