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>
This commit is contained in:
parent
71be0dd8cf
commit
3c787b33d3
12 changed files with 810 additions and 262 deletions
212
data/pad_origins.json
Normal file
212
data/pad_origins.json
Normal file
|
|
@ -0,0 +1,212 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue