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:
Edward Betts 2026-04-06 20:22:44 +01:00
parent 71be0dd8cf
commit 3c787b33d3
12 changed files with 810 additions and 262 deletions

View file

@ -0,0 +1,129 @@
Shenfield SNF
Brentwood BRE
Harold Wood HRO
Gidea Park GDP
Romford RMF
Chadwell Heath CTH
Goodmayes GMY
Seven Kings SVK
Ilford IFD
Manor Park MNP
Forest Gate FOG
Maryland MYL
Stratford (London) SRA
Whitechapel ZLW
London Liverpool Street LST
Farringdon ZFD
Tottenham Court Road TCR
Bond Street BDS
London Paddington PAD
Heathrow Airport Terminal 5 HWV
Heathrow Central HXX
Hayes & Harlington HAY
Southall STL
Hanwell HAN
West Ealing WEA
Ealing Broadway EAL
Acton Main Line AML
Abbey Wood ABW
Woolwich WWC
Custom House CUS
Canary Wharf CWX
Reading RDG
Twyford TWY
Maidenhead MAI
Taplow TAP
Burnham BNM
Slough SLO
Langley LNY
Iver IVR
West Drayton WDT
Oxford OXF
Didcot Parkway DID
Heathrow Airport Terminal 4 HAF
Cholsey CHO
Goring & Streatley GOR
Pangbourne PAN
Tilehurst TLH
Bristol Temple Meads BRI
Bath Spa BTH
Chippenham CPM
Swindon SWI
Hereford HFD
Ledbury LED
Colwall CWL
Great Malvern GMV
Malvern Link MVL
Worcester Foregate Street WOF
Worcester Shrub Hill WOS
Worcestershire Parkway WOP
Pershore PSH
Evesham EVE
Honeybourne HYB
Moreton-in-Marsh MIM
Kingham KGM
Charlbury CBY
Hanborough HND
Penzance PNZ
St Erth SER
Camborne CBN
Redruth RED
Truro TRU
St Austell SAU
Par PAR
Bodmin Parkway BOD
Liskeard LSK
Plymouth PLY
Totnes TOT
Newton Abbot NTA
Exeter St Davids EXD
Taunton TAU
Bedwyn BDW
Hungerford HGD
Kintbury KIT
Newbury NBY
Thatcham THA
Theale THE
Reading West RDW
Swansea SWA
Neath NTH
Port Talbot Parkway PTA
Bridgend BGN
Cardiff Central CDF
Newport (South Wales) NWP
Bristol Parkway BPW
Newbury Racecourse NRC
Midgham MDG
Aldermaston AMT
Cheltenham Spa CNM
Gloucester GCR
Stonehouse SHU
Stroud STD
Kemble KEM
Frome FRO
Westbury WSB
Pewsey PEW
Weston-super-Mare WSM
Weston Milton WNM
Worle WOR
Yatton YAT
Nailsea & Backwell NLS
Tiverton Parkway TVP
Castle Cary CLC
Bridgwater BWT
Highbridge & Burnham HIG
Carmarthen CMN
Ferryside FYS
Kidwelly KWL
Pembrey & Burry Port PBY
Llanelli LLE
Paignton PGN
Torquay TQY
Torre TRR
Teignmouth TGM
Dawlish DWL
Banbury BAN
Greenford GFD
South Greenford SGN
Castle Bar Park CBP
Drayton Green DRG
1 Shenfield SNF
2 Brentwood BRE
3 Harold Wood HRO
4 Gidea Park GDP
5 Romford RMF
6 Chadwell Heath CTH
7 Goodmayes GMY
8 Seven Kings SVK
9 Ilford IFD
10 Manor Park MNP
11 Forest Gate FOG
12 Maryland MYL
13 Stratford (London) SRA
14 Whitechapel ZLW
15 London Liverpool Street LST
16 Farringdon ZFD
17 Tottenham Court Road TCR
18 Bond Street BDS
19 London Paddington PAD
20 Heathrow Airport Terminal 5 HWV
21 Heathrow Central HXX
22 Hayes & Harlington HAY
23 Southall STL
24 Hanwell HAN
25 West Ealing WEA
26 Ealing Broadway EAL
27 Acton Main Line AML
28 Abbey Wood ABW
29 Woolwich WWC
30 Custom House CUS
31 Canary Wharf CWX
32 Reading RDG
33 Twyford TWY
34 Maidenhead MAI
35 Taplow TAP
36 Burnham BNM
37 Slough SLO
38 Langley LNY
39 Iver IVR
40 West Drayton WDT
41 Oxford OXF
42 Didcot Parkway DID
43 Heathrow Airport Terminal 4 HAF
44 Cholsey CHO
45 Goring & Streatley GOR
46 Pangbourne PAN
47 Tilehurst TLH
48 Bristol Temple Meads BRI
49 Bath Spa BTH
50 Chippenham CPM
51 Swindon SWI
52 Hereford HFD
53 Ledbury LED
54 Colwall CWL
55 Great Malvern GMV
56 Malvern Link MVL
57 Worcester Foregate Street WOF
58 Worcester Shrub Hill WOS
59 Worcestershire Parkway WOP
60 Pershore PSH
61 Evesham EVE
62 Honeybourne HYB
63 Moreton-in-Marsh MIM
64 Kingham KGM
65 Charlbury CBY
66 Hanborough HND
67 Penzance PNZ
68 St Erth SER
69 Camborne CBN
70 Redruth RED
71 Truro TRU
72 St Austell SAU
73 Par PAR
74 Bodmin Parkway BOD
75 Liskeard LSK
76 Plymouth PLY
77 Totnes TOT
78 Newton Abbot NTA
79 Exeter St Davids EXD
80 Taunton TAU
81 Bedwyn BDW
82 Hungerford HGD
83 Kintbury KIT
84 Newbury NBY
85 Thatcham THA
86 Theale THE
87 Reading West RDW
88 Swansea SWA
89 Neath NTH
90 Port Talbot Parkway PTA
91 Bridgend BGN
92 Cardiff Central CDF
93 Newport (South Wales) NWP
94 Bristol Parkway BPW
95 Newbury Racecourse NRC
96 Midgham MDG
97 Aldermaston AMT
98 Cheltenham Spa CNM
99 Gloucester GCR
100 Stonehouse SHU
101 Stroud STD
102 Kemble KEM
103 Frome FRO
104 Westbury WSB
105 Pewsey PEW
106 Weston-super-Mare WSM
107 Weston Milton WNM
108 Worle WOR
109 Yatton YAT
110 Nailsea & Backwell NLS
111 Tiverton Parkway TVP
112 Castle Cary CLC
113 Bridgwater BWT
114 Highbridge & Burnham HIG
115 Carmarthen CMN
116 Ferryside FYS
117 Kidwelly KWL
118 Pembrey & Burry Port PBY
119 Llanelli LLE
120 Paignton PGN
121 Torquay TQY
122 Torre TRR
123 Teignmouth TGM
124 Dawlish DWL
125 Banbury BAN
126 Greenford GFD
127 South Greenford SGN
128 Castle Bar Park CBP
129 Drayton Green DRG