add buttons

This commit is contained in:
2026-03-26 10:15:41 +03:00
parent d18270de43
commit 20531d1029
4 changed files with 113 additions and 68 deletions

View File

@@ -1,7 +1,29 @@
import aiohttp
async def get_coords_by_city(city_name: str):
"""Ищет координаты по названию города."""
url = f"https://geocoding-api.open-meteo.com/v1/search?name={city_name}&count=1&language=ru&format=json"
async with aiohttp.ClientSession() as session:
try:
# Добавили таймаут 5 секунд
async with session.get(url, timeout=5) as response:
if response.status != 200:
return None, None, None
data = await response.json()
results = data.get("results")
if not results:
return None, None, None
city_data = results[0]
return city_data.get("latitude"), city_data.get("longitude"), city_data.get("name", city_name)
except Exception:
return None, None, None
async def get_daily_weather_summary(lat: float, lon: float) -> str:
# Добавили current=temperature_2m для получения текущей температуры
"""Получает текущую погоду и сводку на день по координатам."""
url = (
f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}"
f"&current=temperature_2m"
@@ -10,31 +32,34 @@ async def get_daily_weather_summary(lat: float, lon: float) -> str:
)
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
if response.status != 200:
return "Не удалось получить данные о погоде."
data = await response.json()
current = data.get("current", {})
daily = data.get("daily", {})
if not daily or not current:
return "Ошибка парсинга данных о погоде."
try:
async with session.get(url, timeout=5) as response:
if response.status != 200:
return "Не удалось получить данные о погоде от сервера."
data = await response.json()
current = data.get("current", {})
daily = data.get("daily", {})
if not daily or not current:
return "Ошибка парсинга данных о погоде."
current_temp = current.get("temperature_2m", "N/A")
temp_max = daily["temperature_2m_max"][0]
temp_min = daily["temperature_2m_min"][0]
precip_prob = daily["precipitation_probability_max"][0]
temp_diff = round(temp_max - temp_min, 1)
summary = (
f"🌤 **Погода на сегодня:**\n\n"
f"🌡 **Сейчас:** {current_temp}°C\n"
f"📊 **Дневная норма:** от {temp_min}°C до {temp_max}°C\n"
f"📉 **Перепад температур за день:** {temp_diff}°C\n"
f"🌧 **Макс. вероятность осадков:** {precip_prob}%\n\n"
f"Одевайтесь по погоде и хорошего дня!"
)
return summary
current_temp = current.get("temperature_2m", "N/A")
temp_max = daily["temperature_2m_max"][0]
temp_min = daily["temperature_2m_min"][0]
precip_prob = daily["precipitation_probability_max"][0]
temp_diff = round(temp_max - temp_min, 1)
summary = (
f"🌤 **Погода на сегодня:**\n\n"
f"🌡 **Сейчас:** {current_temp}°C\n"
f"📊 **Дневная норма:** от {temp_min}°C до {temp_max}°C\n"
f"📉 **Перепад температур за день:** {temp_diff}°C\n"
f"🌧 **Макс. вероятность осадков:** {precip_prob}%\n\n"
f"Одевайтесь по погоде и хорошего дня!"
)
return summary
except Exception as e:
return "Служба погоды временно недоступна."