Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Twoim zadaniem jest zaimplementowanie iteratora w Pythonie, który będzie pobierał kolejne
- # dane pogodowe z API IMGW.
- #
- # Zaimplementuj klasę iteratora, który będzie korzystać z API i pobierać kolejne wartości.
- # Konstruktor (__init__) powinien przyjmować odpowiednie parametry:
- # Dla IMGW: Listę miast, dla których mają być pobierane dane pogodowe.
- # Metoda __next__ powinna zwracać kolejną wartość z API (temperaturę).
- # Obsłuż wyjątki – np. brak połączenia z API lub błędną odpowiedź.
- # Dodaj metodę __iter__, aby iterator mógł być używany w pętli for.
- # Zamiana Jsona na słownik
- # import requests
- #
- # resp = requests.get('...')
- # resp.json()
- # from json import loads
- #
- # dictionary = loads(json_string)
- # weather['stacja']
- import requests
- class WeatherIterator:
- def __init__(self, cities):
- self.cities = cities
- self.index = 0
- self.base_url = "https://danepubliczne.imgw.pl/api/data/synop"
- self.weather_data = self._get_weather_data()
- def _get_weather_data(self):
- try:
- response = requests.get(self.base_url)
- # 2 - OK (200 - OK, 201 - created)
- # 3 - Redirect (301, 302, 303)
- # 4 - Błąd z winy użytkownika (404 - plik nieodnaleziony, 400 - złe zapytanie, 403- brak dostępu)
- # 5 - Błąd z winy serwera (500 - internal server error, 503 - service unavailable)
- response.raise_for_status()
- return response.json()
- except requests.RequestException:
- # Zaloguj błąd..
- # sentry (usługa zbierająca błędy)
- return []
- def __iter__(self):
- return self
- def __next__(self):
- if self.index >= len(self.cities):
- raise StopIteration
- city = self.cities[self.index]
- self.index += 1
- for entry in self.weather_data:
- if entry.get("stacja") == city:
- return city, entry.get("temperatura"), entry.get("cisnienie")
- return f"Brak danych pogodowych dla miasta {city}"
- iterator = WeatherIterator(["Warszawa", "Kraków", "Gdańsk", "Kasprowy Wierch"])
- for city, temp, airpressure in iterator:
- print(f"Pogoda dla {city}: temperatura {temp} oC, ciśnienie: {airpressure}.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement