koleo-izochrona/examples/api_examples.py

99 lines
2.9 KiB
Python
Executable File

#!/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!')