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…
	
	Add table
		Add a link
		
	
		Reference in a new issue