Filter an API response

39 Views Asked by At

I've got a response from an API that shows a particular train journey and when the train stops at different stations. I want to calculate the time that passes between it departing one station, and arriving at another, using Python.

I've tried:

date = '2024/01/19'
ServiceUID = "W56769"

urlrequest = requests.get(f"http://api.rtt.io/api/v1/json/service/"+ServiceUID+'/'+date))
apioutput = json.loads(r5.content)
filtered = apioutput['locations']

def find_departure(stationA):
    for a in filtered:
        if a['crs'] == stationa:   
            return a['gbttBookedDeparture']
station = "BEL"
print(find_departure(station))

But this just gets me the first entry to CRS in the json, rather than looking up a specific station.

This is the json response from the API:

{'serviceUid': 'W56769', 'runDate': '2024-01-19', 'serviceType': 'train', 'isPassenger': True, 'trainIdentity': '2H61', 'powerType': 'DMU', 'trainClass': 'S', 'atocCode': 'SR', 'atocName': 'ScotRail', 'performanceMonitored': True, 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'locations': [{'tiploc': 'IVRNESS', 'crs': 'INV', 'description': 'Inverness', 'gbttBookedDeparture': '0700', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '5'}, {'tiploc': 'CLHY', 'description': 'Clachnaharry', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': False, 'isPublicCall': False}, {'tiploc': 'CLUNSIB', 'description': 'Clunes I.B.', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': False, 'isPublicCall': False}, {'tiploc': 'BEAULY', 'crs': 'BEL', 'description': 'Beauly', 'gbttBookedArrival': '0715', 'gbttBookedArrivalNextDay': True, 'gbttBookedDeparture': '0715', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'MUROORD', 'crs': 'MOO', 'description': 'Muir of Ord', 'gbttBookedArrival': '0720', 'gbttBookedDeparture': '0723', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'CONONBR', 'crs': 'CBD', 'description': 'Conon Bridge', 'gbttBookedArrival': '0730', 'gbttBookedDeparture': '0731', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'DINGWAL', 'crs': 'DIN', 'description': 'Dingwall', 'gbttBookedArrival': '0736', 'gbttBookedDeparture': '0739', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'ALNESS', 'crs': 'ASS', 'description': 'Alness', 'gbttBookedArrival': '0751', 'gbttBookedDeparture': '0751', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'IVRGRD', 'crs': 'IGD', 'description': 'Invergordon', 'gbttBookedArrival': '0756', 'gbttBookedDeparture': '0758', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'FEARN', 'crs': 'FRN', 'description': 'Fearn', 'gbttBookedArrival': '0810', 'gbttBookedDeparture': '0811', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'TAIN', 'crs': 'TAI', 'description': 'Tain', 'gbttBookedArrival': '0817', 'gbttBookedArrivalNextDay': True, 'gbttBookedDeparture': '0817', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'ARDGAY', 'crs': 'ARD', 'description': 'Ardgay', 'gbttBookedArrival': '0833', 'gbttBookedArrivalNextDay': True, 'gbttBookedDeparture': '0833', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'CULRAIN', 'crs': 'CUA', 'description': 'Culrain', 'gbttBookedArrival': '0837', 'gbttBookedArrivalNextDay': True, 'gbttBookedDeparture': '0837', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'INVRSHN', 'crs': 'INH', 'description': 'Invershin', 'gbttBookedArrival': '0838', 'gbttBookedArrivalNextDay': True, 'gbttBookedDeparture': '0838', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'LAIRG', 'crs': 'LRG', 'description': 'Lairg', 'gbttBookedArrival': '0849', 'gbttBookedDeparture': '0853', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'ROGART', 'crs': 'ROG', 'description': 'Rogart', 'gbttBookedArrival': '0906', 'gbttBookedArrivalNextDay': True, 'gbttBookedDeparture': '0906', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'GOLSPIE', 'crs': 'GOL', 'description': 'Golspie', 'gbttBookedArrival': '0917', 'gbttBookedDeparture': '0918', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'BRORA', 'crs': 'BRA', 'description': 'Brora', 'gbttBookedArrival': '0928', 'gbttBookedDeparture': '0929', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'HELMSDL', 'crs': 'HMS', 'description': 'Helmsdale', 'gbttBookedArrival': '0944', 'gbttBookedDeparture': '0947', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'KILDONN', 'crs': 'KIL', 'description': 'Kildonan', 'gbttBookedArrival': '0959', 'gbttBookedDeparture': '0959', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'KINBRAC', 'crs': 'KBC', 'description': 'Kinbrace', 'gbttBookedArrival': '1009', 'gbttBookedDeparture': '1009', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'FORSNRD', 'crs': 'FRS', 'description': 'Forsinard', 'gbttBookedArrival': '1021', 'gbttBookedArrivalNextDay': True, 'gbttBookedDeparture': '1021', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '2'}, {'tiploc': 'ALTNBRC', 'crs': 'ABC', 'description': 'Altnabreac', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': False, 'platform': '1'}, {'tiploc': 'SCSCLDR', 'crs': 'SCT', 'description': 'Scotscalder', 'gbttBookedArrival': '1038', 'gbttBookedDeparture': '1038', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'GRGMASJ', 'crs': 'GGJ', 'description': 'Georgemas Junction', 'gbttBookedArrival': '1045', 'gbttBookedDeparture': '1049', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'THURSO', 'crs': 'THS', 'description': 'Thurso', 'gbttBookedArrival': '1059', 'gbttBookedDeparture': '1102', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'GRGMASJ', 'crs': 'GGJ', 'description': 'Georgemas Junction', 'gbttBookedArrival': '1112', 'gbttBookedDeparture': '1114', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}, {'tiploc': 'WICK', 'crs': 'WCK', 'description': 'Wick', 'gbttBookedArrival': '1131', 'origin': [{'tiploc': 'IVRNESS', 'description': 'Inverness', 'workingTime': '070000', 'publicTime': '0700'}], 'destination': [{'tiploc': 'WICK', 'description': 'Wick', 'workingTime': '113100', 'publicTime': '1131'}], 'isCall': True, 'isPublicCall': True, 'platform': '1'}]}

For the benefit of this example, I'd like to find thetime it departs from the CRS of 'INV' and arrives at 'DIN'

I haven't a clue how to do this

I've tried to filter the response, but didn't really get anywhere

0

There are 0 best solutions below