Added current weather for openweathermap
This commit is contained in:
parent
4f403561ba
commit
5e598f3e4f
1 changed files with 40 additions and 6 deletions
|
@ -15,6 +15,39 @@ def __init__():
|
||||||
token = openweathermap_token.read()
|
token = openweathermap_token.read()
|
||||||
|
|
||||||
|
|
||||||
|
class CurrentWeather:
|
||||||
|
sunrise: datetime
|
||||||
|
sunset: datetime
|
||||||
|
temperature: float
|
||||||
|
feels_like: float
|
||||||
|
wind_speed: float
|
||||||
|
rain: float
|
||||||
|
main: str
|
||||||
|
description: str
|
||||||
|
|
||||||
|
def __init__(self, json_data: json):
|
||||||
|
self.sunrise = datetime.fromtimestamp(json_data['sunrise'])
|
||||||
|
self.sunset = datetime.fromtimestamp(json_data['sunset'])
|
||||||
|
self.temperature = json_data['temp']
|
||||||
|
self.feels_like = json_data['feels_like']
|
||||||
|
self.wind_speed = json_data['wind_speed']
|
||||||
|
if 'rain' in json_data:
|
||||||
|
self.rain = json_data['rain']['1h']
|
||||||
|
else:
|
||||||
|
self.rain = -1
|
||||||
|
self.main = json_data['weather'][0]['main']
|
||||||
|
self.description = json_data['weather'][0]['description']
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
string = f"*Now*: {self.main} | {self.temperature:.0f}°C 🧑: {self.feels_like:.0f}°C"
|
||||||
|
if self.rain != -1:
|
||||||
|
string += f" ☔: {self.rain:.0f}mm"
|
||||||
|
|
||||||
|
string += f" 💨: {3.6 * self.wind_speed:.1f}km/h" \
|
||||||
|
f" ☀️: {self.sunrise.strftime('%H:%M')} - {self.sunset.strftime('%H:%M')}"
|
||||||
|
return string
|
||||||
|
|
||||||
|
|
||||||
class HourlyWeather:
|
class HourlyWeather:
|
||||||
time: datetime
|
time: datetime
|
||||||
temperature: float
|
temperature: float
|
||||||
|
@ -43,7 +76,7 @@ class HourlyWeather:
|
||||||
if self.probability_of_precipitation != 0:
|
if self.probability_of_precipitation != 0:
|
||||||
string += f" ☔: {100 * self.probability_of_precipitation:.0f}% {self.rain}mm"
|
string += f" ☔: {100 * self.probability_of_precipitation:.0f}% {self.rain}mm"
|
||||||
|
|
||||||
string += f" 💨{3.6 * self.wind_speed:.1f}km/h"
|
string += f" 💨: {3.6 * self.wind_speed:.1f}km/h"
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,17 +113,20 @@ class DailyWeather:
|
||||||
|
|
||||||
|
|
||||||
class TotalWeather:
|
class TotalWeather:
|
||||||
|
current_weather: CurrentWeather
|
||||||
hourly_weather = []
|
hourly_weather = []
|
||||||
daily_weather = []
|
daily_weather = []
|
||||||
|
|
||||||
def __init__(self, json_data: json):
|
def __init__(self, json_data: json):
|
||||||
for single_daily_weather in json_data['daily'][2:]:
|
for single_daily_weather in json_data['daily'][2:]:
|
||||||
self.daily_weather.append(DailyWeather(single_daily_weather))
|
self.daily_weather.append(DailyWeather(single_daily_weather))
|
||||||
for single_hourly_weather in json_data['hourly']:
|
for single_hourly_weather in json_data['hourly'][1:]:
|
||||||
self.hourly_weather.append(HourlyWeather(single_hourly_weather))
|
self.hourly_weather.append(HourlyWeather(single_hourly_weather))
|
||||||
|
self.current_weather = CurrentWeather(json_data['current'])
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
string = ""
|
string = ""
|
||||||
|
string += (str(self.current_weather) + '\n')
|
||||||
short_hourly_weather = self.hourly_weather[:5] + self.hourly_weather[6:20:2] + self.hourly_weather[21::4]
|
short_hourly_weather = self.hourly_weather[:5] + self.hourly_weather[6:20:2] + self.hourly_weather[21::4]
|
||||||
day_before = short_hourly_weather[0].time.strftime("%d")
|
day_before = short_hourly_weather[0].time.strftime("%d")
|
||||||
for weather in short_hourly_weather:
|
for weather in short_hourly_weather:
|
||||||
|
@ -123,10 +159,8 @@ class City:
|
||||||
|
|
||||||
def query_weather(self):
|
def query_weather(self):
|
||||||
request = requests.get(
|
request = requests.get(
|
||||||
"http://api.openweathermap.org/data/2.5/onecall?\
|
f"http://api.openweathermap.org/data/2.5/onecall?\
|
||||||
lang=de&units=metric&exclude=minutely&lat={lat}&lon={lon}&appid={token}".format(
|
lang=de&units=metric&exclude=minutely&lat={self.lat}&lon={self.lon}&appid={token}")
|
||||||
lat=self.lat,
|
|
||||||
lon=self.lon, token=token))
|
|
||||||
if request.status_code != 200:
|
if request.status_code != 200:
|
||||||
raise ServerCommunicationError
|
raise ServerCommunicationError
|
||||||
self.weather = TotalWeather(request.json())
|
self.weather = TotalWeather(request.json())
|
||||||
|
|
Loading…
Reference in a new issue