Advertisement
ksieradzinski

Untitled

Mar 19th, 2025
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. # Twoim zadaniem jest zaimplementowanie iteratora w Pythonie, który będzie pobierał kolejne
  2. # dane pogodowe z API IMGW.
  3. #
  4. # Zaimplementuj klasę iteratora, który będzie korzystać z API i pobierać kolejne wartości.
  5. # Konstruktor (__init__) powinien przyjmować odpowiednie parametry:
  6. # Dla IMGW: Listę miast, dla których mają być pobierane dane pogodowe.
  7. # Metoda __next__ powinna zwracać kolejną wartość z API (temperaturę).
  8. # Obsłuż wyjątki – np. brak połączenia z API lub błędną odpowiedź.
  9. # Dodaj metodę __iter__, aby iterator mógł być używany w pętli for.
  10.  
  11. # Zamiana Jsona na słownik
  12. # import requests
  13. #
  14. # resp = requests.get('...')
  15. # resp.json()
  16.  
  17. # from json import loads
  18. #
  19. # dictionary = loads(json_string)
  20.  
  21. # weather['stacja']
  22.  
  23. import requests
  24.  
  25.  
  26. class WeatherIterator:
  27. def __init__(self, cities):
  28. self.cities = cities
  29. self.index = 0
  30. self.base_url = "https://danepubliczne.imgw.pl/api/data/synop"
  31. self.weather_data = self._get_weather_data()
  32.  
  33. def _get_weather_data(self):
  34. try:
  35. response = requests.get(self.base_url)
  36. # 2 - OK (200 - OK, 201 - created)
  37. # 3 - Redirect (301, 302, 303)
  38. # 4 - Błąd z winy użytkownika (404 - plik nieodnaleziony, 400 - złe zapytanie, 403- brak dostępu)
  39. # 5 - Błąd z winy serwera (500 - internal server error, 503 - service unavailable)
  40. response.raise_for_status()
  41. return response.json()
  42. except requests.RequestException:
  43. # Zaloguj błąd..
  44. # sentry (usługa zbierająca błędy)
  45. return []
  46.  
  47.  
  48. def __iter__(self):
  49. return self
  50.  
  51. def __next__(self):
  52. if self.index >= len(self.cities):
  53. raise StopIteration
  54.  
  55. city = self.cities[self.index]
  56. self.index += 1
  57.  
  58. for entry in self.weather_data:
  59. if entry.get("stacja") == city:
  60. return city, entry.get("temperatura"), entry.get("cisnienie")
  61.  
  62. return f"Brak danych pogodowych dla miasta {city}"
  63.  
  64.  
  65. iterator = WeatherIterator(["Warszawa", "Kraków", "Gdańsk", "Kasprowy Wierch"])
  66. for city, temp, airpressure in iterator:
  67. print(f"Pogoda dla {city}: temperatura {temp} oC, ciśnienie: {airpressure}.")
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement