#!/usr/bin/env python3 """ Przykłady użycia API backendu Izochrona Uruchom: uv run examples/api_examples.py """ import requests import json API_URL = 'http://localhost:5000/api' def check_health(): """Sprawdź status serwera""" response = requests.get(f'{API_URL}/health') data = response.json() print('=== Status serwera ===') print(json.dumps(data, indent=2, ensure_ascii=False)) return data def search_stops(query): """Wyszukaj przystanki po nazwie""" response = requests.get(f'{API_URL}/stops/search', params={'q': query}) data = response.json() print(f'\n=== Wyniki wyszukiwania: "{query}" ===') print(f'Znaleziono: {data["count"]} przystanków') for stop in data['stops'][:5]: print(f' - {stop["stop_name"]} (ID: {stop["stop_id"]})') return data['stops'] def calculate_isochrones(stop_id, time_intervals=[30, 60, 90, 120]): """Oblicz izochrony dla przystanku""" response = requests.post( f'{API_URL}/isochrones', json={ 'origin_stop_id': stop_id, 'time_intervals': time_intervals } ) data = response.json() print(f'\n=== Izochrony dla {stop_id} ===') for iso in data['isochrones']: print(f' {iso["time"]} min: {iso["stop_count"]} stacji') print(f'\nCałkowita liczba osiągalnych stacji: {len(data["reachable_stops"])}') # Najdalsze 5 stacji print('\nNajdalsze stacje:') for stop in sorted(data['reachable_stops'], key=lambda x: x['time'], reverse=True)[:5]: print(f' - {stop["name"]}: {stop["time"]:.1f} min') return data def get_reachable_stops(stop_id, max_time=90): """Pobierz listę osiągalnych przystanków""" response = requests.post( f'{API_URL}/reachable', json={ 'origin_stop_id': stop_id, 'max_time': max_time } ) data = response.json() print(f'\n=== Przystanki osiągalne w {max_time} min z {stop_id} ===') print(f'Liczba: {data["count"]}') for stop in data['reachable_stops'][:10]: print(f' {stop["time"]:5.1f} min - {stop["name"]}') return data if __name__ == '__main__': print('=== Przykłady użycia API Izochrona ===\n') # 1. Sprawdź status health = check_health() if health['status'] != 'ok': print('\n❌ Serwer nie jest gotowy. Uruchom: python backend/app.py') exit(1) # 2. Wyszukaj stacje stops = search_stops('Wrocław') if not stops: print('\n❌ Nie znaleziono stacji. Spróbuj innego zapytania.') exit(1) # 3. Oblicz izochrony dla pierwszej znalezionej stacji first_stop = stops[0] isochrones = calculate_isochrones(first_stop['stop_id']) # 4. Pobierz osiągalne przystanki w 60 min reachable = get_reachable_stops(first_stop['stop_id'], max_time=60) print('\n✅ Przykłady zakończone!') print('\nKolej na Ciebie - otwórz frontend/index.html i eksploruj interaktywnie!')