200 lines
5.4 KiB
Python
Executable File
200 lines
5.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Script para probar diferentes endpoints de la API de Adif
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
from datetime import datetime
|
|
|
|
# Headers descubiertos
|
|
HEADERS_CIRCULATION = {
|
|
"Content-Type": "application/json;charset=utf-8",
|
|
"User-key": "f4ce9fbfa9d721e39b8984805901b5df"
|
|
}
|
|
|
|
HEADERS_STATIONS = {
|
|
"Content-Type": "application/json;charset=utf-8",
|
|
"User-key": "0d021447a2fd2ac64553674d5a0c1a6f"
|
|
}
|
|
|
|
HEADERS_AVISA = {
|
|
"Content-Type": "application/json;charset=utf-8",
|
|
"Authorization": "Basic YXZpc3RhX2NsaWVudF9hbmRyb2lkOjh5WzZKNyFmSjwhXypmYXE1NyNnOSohNElwa2MjWC1BTg=="
|
|
}
|
|
|
|
# URLs base
|
|
BASE_CIRCULATION = "https://circulacion.api.adif.es"
|
|
BASE_STATIONS = "https://estaciones.api.adif.es"
|
|
BASE_AVISA = "https://avisa.adif.es"
|
|
|
|
|
|
def test_endpoint(name, method, url, headers, data=None):
|
|
"""Probar un endpoint y mostrar resultado"""
|
|
print(f"\n{'='*60}")
|
|
print(f"TEST: {name}")
|
|
print(f"{'='*60}")
|
|
print(f"Method: {method}")
|
|
print(f"URL: {url}")
|
|
print(f"Headers: {json.dumps(headers, indent=2)}")
|
|
|
|
if data:
|
|
print(f"Body: {json.dumps(data, indent=2)}")
|
|
|
|
try:
|
|
if method == "GET":
|
|
response = requests.get(url, headers=headers, timeout=10)
|
|
elif method == "POST":
|
|
response = requests.post(url, headers=headers, json=data, timeout=10)
|
|
else:
|
|
print(f"❌ Método {method} no soportado")
|
|
return
|
|
|
|
print(f"\nStatus: {response.status_code}")
|
|
|
|
if response.status_code == 200:
|
|
print("✅ SUCCESS")
|
|
result = response.json()
|
|
print(f"\nResponse Preview:")
|
|
print(json.dumps(result, indent=2, ensure_ascii=False)[:1000] + "...")
|
|
else:
|
|
print(f"❌ ERROR")
|
|
print(f"Response: {response.text[:500]}")
|
|
|
|
except Exception as e:
|
|
print(f"❌ EXCEPTION: {str(e)}")
|
|
|
|
|
|
def main():
|
|
print("=" * 60)
|
|
print("PRUEBAS DE ENDPOINTS DE ADIF API")
|
|
print("=" * 60)
|
|
|
|
# Test 1: Obtener salidas con diferentes formatos de body
|
|
test_endpoint(
|
|
"Salidas - Formato Simple",
|
|
"POST",
|
|
f"{BASE_CIRCULATION}/portroyalmanager/secure/circulationpaths/departures/traffictype/",
|
|
HEADERS_CIRCULATION,
|
|
{
|
|
"stationCode": "10200",
|
|
"commercialService": "BOTH",
|
|
"commercialStopType": "BOTH",
|
|
"page": {"pageNumber": 0},
|
|
"trafficType": "CERCANIAS"
|
|
}
|
|
)
|
|
|
|
# Test 2: Probar con State YES
|
|
test_endpoint(
|
|
"Salidas - State YES",
|
|
"POST",
|
|
f"{BASE_CIRCULATION}/portroyalmanager/secure/circulationpaths/departures/traffictype/",
|
|
HEADERS_CIRCULATION,
|
|
{
|
|
"stationCode": "10200",
|
|
"commercialService": "YES",
|
|
"commercialStopType": "YES",
|
|
"page": {"pageNumber": 0},
|
|
"trafficType": "ALL"
|
|
}
|
|
)
|
|
|
|
# Test 3: Detalles de una ruta específica
|
|
test_endpoint(
|
|
"Detalles de Ruta",
|
|
"POST",
|
|
f"{BASE_CIRCULATION}/portroyalmanager/secure/circulationpathdetails/onepaths/",
|
|
HEADERS_CIRCULATION,
|
|
{
|
|
"commercialNumber": "C1",
|
|
"allControlPoints": False
|
|
}
|
|
)
|
|
|
|
# Test 4: Entre estaciones
|
|
test_endpoint(
|
|
"Entre Estaciones",
|
|
"POST",
|
|
f"{BASE_CIRCULATION}/portroyalmanager/secure/circulationpaths/betweenstations/traffictype/",
|
|
HEADERS_CIRCULATION,
|
|
{
|
|
"originStationCode": "10200",
|
|
"destinationStationCode": "10302",
|
|
"commercialService": "BOTH",
|
|
"commercialStopType": "BOTH",
|
|
"page": {"pageNumber": 0},
|
|
"trafficType": "ALL"
|
|
}
|
|
)
|
|
|
|
# Test 5: Detalles de estación
|
|
test_endpoint(
|
|
"Detalles de Estación",
|
|
"POST",
|
|
f"{BASE_STATIONS}/portroyalmanager/secure/stations/onestation/",
|
|
HEADERS_STATIONS,
|
|
{
|
|
"stationCode": "10200"
|
|
}
|
|
)
|
|
|
|
# Test 6: Observaciones de estación
|
|
test_endpoint(
|
|
"Observaciones de Estación",
|
|
"POST",
|
|
f"{BASE_STATIONS}/portroyalmanager/secure/stationsobservations/",
|
|
HEADERS_STATIONS,
|
|
{
|
|
"stationCode": "10200"
|
|
}
|
|
)
|
|
|
|
# Test 7: Composición de tren
|
|
test_endpoint(
|
|
"Composición de Tren",
|
|
"POST",
|
|
f"{BASE_CIRCULATION}/portroyalmanager/secure/circulationpaths/compositions/path/",
|
|
HEADERS_CIRCULATION,
|
|
{
|
|
"commercialNumber": "AVE 1001",
|
|
"originStationCode": "10200",
|
|
"destinationStationCode": "71801"
|
|
}
|
|
)
|
|
|
|
print("\n" + "="*60)
|
|
print("RESUMEN")
|
|
print("="*60)
|
|
print("""
|
|
Las pruebas han finalizado. Revisa los resultados arriba.
|
|
|
|
NOTAS:
|
|
- Algunos endpoints pueden requerir códigos/números válidos
|
|
- Los códigos de estación son numéricos (ej: 10200 para Madrid Atocha)
|
|
- Los números comerciales varían según el tipo de tren
|
|
- Algunos datos pueden no estar disponibles en tiempo real
|
|
|
|
CÓDIGOS DE ESTACIÓN COMUNES:
|
|
- 10200: Madrid Puerta de Atocha
|
|
- 10302: Madrid Chamartín
|
|
- 71801: Barcelona Sants
|
|
- 50000: Valencia Nord
|
|
- 11401: Sevilla Santa Justa
|
|
|
|
TIPOS DE TRÁFICO:
|
|
- CERCANIAS: Trenes de cercanías
|
|
- MEDIA_DISTANCIA: Media distancia
|
|
- LARGA_DISTANCIA: Larga distancia
|
|
- ALL: Todos los tipos
|
|
|
|
ESTADOS:
|
|
- YES: Solo servicios/paradas comerciales
|
|
- NOT: Sin servicios/paradas comerciales
|
|
- BOTH: Ambos tipos
|
|
""")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|