API Italo - SimoDax/Italo-API GitHub Wiki
Tutte le risposte e il corpo delle richieste dell'api sono in formato json, i campi di cui non sono riuscito a capire l'utilizzo sono stati omessi. Purtroppo sono meno intuitive delle API Trenitalia, alcune descrizioni dei campi sono un po' euristiche e frutto di trial and error. In ogni caso i messaggi di errore sono molto specifici e aiutano a capire eventuali campi mancanti o non validi
Tutte le chiamate sono autenticate tramite un campo Signature
nel body della richiesta, per ottenere tale stringa si usa:
POST: https://big.ntvspa.it/BIG/v7/Rest/SessionManager.svc/Login
Con i seguenti parametri:
(Chissà che azienda ha sviluppato il sistema)
Oggetto con un solo campo, Signature
, da passare alle richieste successive
POST: https://big.ntvspa.it/BIG/v7/Rest/BookingManager.svc/GetAvailableTrains
Con il seguente oggetto nel corpo della richiesta:
Signature: il codice restituito dalla chiamata di login
SourceSystem: settatelo a 2
GetAvailableTrains:
(
DepartureStation: sigla a 3 caratteri della stazione di partenza (vedi sotto)
ArrivalStation: sigla a 3 caratteri della stazione di arrivo (vedi sotto)
IntervalStartDateTime: inizio intervallo temporale di ricerca soluzioni, formato: "/Date(<timestamp in millisecondi>+0000)/"
IntervalEndDateTime: fine intervallo temporale di ricerca soluzioni, formato come sopra
AdultNumber: intero, numero di adulti per la ricerca
ChildNumber: intero, numero di bambini (0-13 anni)
InfantNumber: intero, numero di neonati (0-36 mesi)
SeniorNumber: intero, numero di over 60 per la ricerca
OverrideIntervalTimeRestriction: true, altrimenti le ricerche su intervalli temporali di svariate ore non vengono accettate
CurrencyCode: stringa per indicare la valuta, "EUR" per gli euro
IsGuest: legato al tipo di autenticazione, mettetelo true
RoundTrip: se true cerca soluzioni A/R, ma richiede che vengano settati altri due campi per la finestra di ricerca del viaggio di ritorno, rispettivamente RoundTripIntervalStartDateTime e RoundTripIntervalEndDateTime
)
La conversione tra i nomi delle stazioni e le sigle è:
["Bologna Centrale" , "Brescia" , "Ferrara" , "Firenze S. M. Novella" , "Milano Centrale" , "Rho-Fiera Milano" , "Milano Rogoredo" , "Napoli Centrale" , "Padova" , "Reggio Emilia AV" , "Roma Termini" , "Roma Tiburtina" , "Salerno" , "Torino Porta Nuova" , "Torino Porta Susa" , "Venezia Mestre" , "Venezia S. Lucia" , "Verona Porta Nuova" , "Milano ( tutte le stazioni )" , "Roma ( tutte le stazioni )"]
["BC_" , "BSC" , "F__" , "SMN" , "MC_" , "RRO" , "RG_" , "NAC" , "PD_" , "AAV" , "RMT" , "RTB" , "SAL" , "TOP" , "OUE" , "VEM" , "VSL" , "VPN" , "MI0" , "RM0"]
Oggetto con i seguenti campi:
JourneyDateMarkets: array di giorni in cui sono suddivise le soluzioni trovate
[
(
DepartureDate: giorno di partenza, formato: "/Date(<timestamp in millisecondi>+<fuso in cui è espresso il timestamp>)/", occhio che pur essendo un timestamp è significativa solo la data
Journeys: array di soluzioni per il dato giorno
[
(
JourneySellKey: identificatore della soluzione
Segments: array di treni che compongono la soluzione
[
(
STD: orario di partenza, formato: "/Date(<timestamp in millisecondi>+<fuso in cui è espresso il timestamp>)/"
STA: orario di arrivo, formato: "/Date(<timestamp in millisecondi>+<fuso in cui è espresso il timestamp>)/"
TrainNumber: stringa con numero del treno
NoStopTrain: booleano, indica se è un diretto
Legs: array di fermate, ogni elemento ha i campi DepartureStation, ArrivalStation, STD e STA
Fares: array di tariffe, vedi sotto
)
]
)
]
)]
L'oggetto Fares
ha campi che si spiegano da soli perciò non li elenco, basta guardare una risposta per capirli. Fa eccezione ProductClass
, che codifica la classe del servizio: S
corrisponde a Smart, T
a comforT, P
a Prima e C
a Club.