Код на салфетке
22.07
В посте "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.
еще контент в этом сообществе
еще контент в этом соообществе
Код на салфетке
22.07
войдите, чтобы увидеть
и подписаться на интересных профи