- Support any station with direct trains to Paddington; station CRS code is now part of the URL (/results/<crs>/<slug>/<date>) - Load station list from data/direct_to_paddington.tsv; show dropdown on index page; 404 for unknown station codes - Fetch live GWR walk-on fares via api.gwr.com for all stations (SSS/SVS/SDS with restrictions already applied per train); cache 30 days - Scrape Paddington arrival platform numbers from RTT - Show unreachable morning Eurostars (before first reachable service only) - Circle line: show actual KX St Pancras arrival times (not check-in estimate) and add a second backup service in the transfer column - Widen page max-width to 1100px for longer station names Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
212 lines
No EOL
4.5 KiB
JSON
212 lines
No EOL
4.5 KiB
JSON
{
|
|
"Shenfield": {
|
|
"name": "Shenfield",
|
|
"crs": "",
|
|
"service_id": "G24729",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Heathrow Airport Terminal 5": {
|
|
"name": "Heathrow Airport Terminal 5",
|
|
"crs": "",
|
|
"service_id": "G24322",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Abbey Wood": {
|
|
"name": "Abbey Wood",
|
|
"crs": "",
|
|
"service_id": "G24730",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Reading": {
|
|
"name": "Reading",
|
|
"crs": "",
|
|
"service_id": "G21939",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Oxford": {
|
|
"name": "Oxford",
|
|
"crs": "",
|
|
"service_id": "P22703",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Heathrow Airport Terminal 4": {
|
|
"name": "Heathrow Airport Terminal 4",
|
|
"crs": "",
|
|
"service_id": "G21944",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Didcot Parkway": {
|
|
"name": "Didcot Parkway",
|
|
"crs": "",
|
|
"service_id": "P33203",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Bristol Temple Meads": {
|
|
"name": "Bristol Temple Meads",
|
|
"crs": "",
|
|
"service_id": "P22595",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Hereford": {
|
|
"name": "Hereford",
|
|
"crs": "",
|
|
"service_id": "P22860",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Penzance": {
|
|
"name": "Penzance",
|
|
"crs": "",
|
|
"service_id": "P29703",
|
|
"service_date": "2026-04-20",
|
|
"processed": true
|
|
},
|
|
"Stratford (London)": {
|
|
"name": "Stratford (London)",
|
|
"crs": "",
|
|
"service_id": "G23396",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Maidenhead": {
|
|
"name": "Maidenhead",
|
|
"crs": "",
|
|
"service_id": "G23904",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Gidea Park": {
|
|
"name": "Gidea Park",
|
|
"crs": "",
|
|
"service_id": "G23407",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Bedwyn": {
|
|
"name": "Bedwyn",
|
|
"crs": "",
|
|
"service_id": "P30238",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Swansea": {
|
|
"name": "Swansea",
|
|
"crs": "",
|
|
"service_id": "P22786",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Worcester Shrub Hill": {
|
|
"name": "Worcester Shrub Hill",
|
|
"crs": "",
|
|
"service_id": "P22841",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Newbury": {
|
|
"name": "Newbury",
|
|
"crs": "",
|
|
"service_id": "P30241",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Cheltenham Spa": {
|
|
"name": "Cheltenham Spa",
|
|
"crs": "",
|
|
"service_id": "P22821",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Frome": {
|
|
"name": "Frome",
|
|
"crs": "",
|
|
"service_id": "P22597",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Weston-super-Mare": {
|
|
"name": "Weston-super-Mare",
|
|
"crs": "",
|
|
"service_id": "P22584",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Plymouth": {
|
|
"name": "Plymouth",
|
|
"crs": "",
|
|
"service_id": "P22598",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Taunton": {
|
|
"name": "Taunton",
|
|
"crs": "",
|
|
"service_id": "P29610",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Great Malvern": {
|
|
"name": "Great Malvern",
|
|
"crs": "",
|
|
"service_id": "P22844",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Carmarthen": {
|
|
"name": "Carmarthen",
|
|
"crs": "",
|
|
"service_id": "P22797",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Cardiff Central": {
|
|
"name": "Cardiff Central",
|
|
"crs": "",
|
|
"service_id": "P22798",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Paignton": {
|
|
"name": "Paignton",
|
|
"crs": "",
|
|
"service_id": "P22603",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Exeter St Davids": {
|
|
"name": "Exeter St Davids",
|
|
"crs": "",
|
|
"service_id": "P22606",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Worcester Foregate Street": {
|
|
"name": "Worcester Foregate Street",
|
|
"crs": "",
|
|
"service_id": "P22852",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Banbury": {
|
|
"name": "Banbury",
|
|
"crs": "",
|
|
"service_id": "P30629",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
},
|
|
"Greenford": {
|
|
"name": "Greenford",
|
|
"crs": "",
|
|
"service_id": "P31884",
|
|
"service_date": "2026-04-21",
|
|
"processed": true
|
|
}
|
|
} |