Zadania do laboratorium 8 Python

Celem zadania jest stworzenie własnego API (/weather), które po otrzymaniu nazwy miasta wysyła zapytanie do zewnętrznego API (np. Open-Meteo), pobiera dane pogodowe, przetwarza je i zwraca jako własną odpowiedź JSON.

Nie korzystamy z baz danych — dane są pobierane na żywo i odpowiednio filtrowane.


Krok 1: Endpoint /weather z parametrem city

Opis:
Utwórz endpoint /weather, który przyjmuje parametr city (string) i na razie tylko zwraca go w odpowiedzi.

Wymagania:

ID Wymaganie
W1 Endpoint /weather
W2 Przyjmuje parametr city: str
W3 Zwraca {"city": city}

Krok 2: Znajdź współrzędne miasta

Opis:
Użyj zewnętrznego API geolokalizacji (np. Open-Meteo lub api.api-ninjas.com), aby znaleźć współrzędne lat, lon dla podanej nazwy miasta.

Wymagania:

ID Wymaganie
W1 Wysłano zapytanie do API zewnętrznego
W2 Odczytano latitude i longitude z odpowiedzi

Krok 3: Pobierz dane pogodowe z Open-Meteo

Opis:
Zbuduj zapytanie do API Open-Meteo z wykorzystaniem uzyskanych współrzędnych. Pobierz aktualną pogodę.

Wymagania:

ID Wymaganie
W1 Użyto poprawnego URL do API Open-Meteo
W2 Odczytano odpowiedź z temperaturą, zachmurzeniem, itp.

Krok 4: Przetwórz dane pogodowe

Opis:
Wyodrębnij najważniejsze informacje z danych pogodowych: np. temperaturę, prędkość wiatru, zachmurzenie i godzinę pomiaru.

Wymagania:

ID Wymaganie
W1 Wyciągnięto pola: temperature, windspeed, cloudcover, time
W2 Przygotowano słownik z tymi wartościami

Krok 5: Zwróć odpowiedź w ładnej formie

Opis:
Zbuduj odpowiedź JSON, która zawiera tylko interesujące dane, np.:

{
  "temperature": 21.3,
  "windspeed": 14.2,
  "cloudcover": 85,
  "time": "2025-08-05T14:00"
}

Wymagania:

ID Wymaganie
W1 Odpowiedź API zawiera tylko przetworzone dane
W2 Format danych jest zgodny z JSON

Krok 6: Obsłuż błędy — brak miasta

Opis:
Jeśli API nie zwróci współrzędnych lub danych pogodowych (np. zła nazwa miasta), funkcja powinna zwrócić czytelny komunikat o błędzie.

Wymagania:

ID Wymaganie
W1 Dla błędnego miasta zwróć {"error": "Nie znaleziono lokalizacji"}
W2 Brak błędów aplikacji (żadne 500, KeyError, itp.)

Krok 7: (Opcjonalnie) Historia zapytań

Opis:
Dodaj prostą historię zapytań w pamięci (np. lista w Pythonie). Dodaj nowy endpoint /history, który zwraca historię wcześniejszych zapytań.

Wymagania:

ID Wymaganie
W1 Endpoint /history
W2 Zwraca listę ostatnich zapytań, np. {"history": [{"city": "Gdansk", "temp": 20.1}, ...]}