Added current weather for openweathermap

This commit is contained in:
JuliusFreudenberger 2020-09-24 20:03:16 +02:00
parent 4f403561ba
commit 5e598f3e4f

View file

@ -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())