99 lines
2.9 KiB
Python
Executable File
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!')
|