bristol-eurostar/data/pad_origins.json
Edward Betts 3c787b33d3 Add multi-station support, GWR fares API, and Circle line improvements
- 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>
2026-04-06 20:22:44 +01:00

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
}
}