├── README.md ├── documentation ├── files │ ├── Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf │ ├── EFA_XML_Schnittstelle_20151217.pdf │ ├── LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf │ ├── LINZ_LINIEN_Schnittstelle_EFA_V1.pdf │ └── dokumentationxmlschnittstelleapbv32014-08-28.pdf ├── webapi.md └── widgets.md ├── kuerzel ├── kuerzel.py ├── kuerzel_dresden.csv └── kuerzel_umland.csv └── stations ├── csv2geojson.py ├── stations.csv └── stations.json /README.md: -------------------------------------------------------------------------------- 1 | # 🚏VVO 2 | 3 | This is a list of API endpoints, libraries, apps, tools and anything else that's available to access data in the [Verkehrsverbund Oberelbe](https://www.vvo-online.de/de) network. This includes the [Dresdner Verkehrsbetriebe](https://www.dvb.de/de-de/). 4 | 5 | This document is inspired by [derhuerst/vbb-modules](https://github.com/derhuerst/vbb-modules). 6 | 7 | Got any more info, details, links? Please don't hesitate to open an issue and/or PR 🙃 8 | 9 | 10 | 11 | ## Static Data 12 | 13 | - [`stations.csv`](https://raw.githubusercontent.com/kiliankoe/vvo/master/stations/stations.csv) - A list of all stations including coordinates. 14 | - [`stations.json`](https://raw.githubusercontent.com/kiliankoe/vvo/master/stations/stations.json) - Same as above, but as GeoJSON. 15 | - [`VVO_STOPS.JSON`](https://www.vvo-online.de/open_data/VVO_STOPS.JSON) - daily updated list of all VVO stations. 16 | - [`kuerzel_dresden.csv`](https://raw.githubusercontent.com/kiliankoe/vvo/master/kuerzel/kuerzel_dresden.csv) - A list of station abbreviations in Dresden 17 | - [`kuerzel_umland.csv`](https://raw.githubusercontent.com/kiliankoe/vvo/master/kuerzel/kuerzel_umland.csv) - A list of station abbreviations around Dresden 18 | 19 | 20 | 21 | 22 | ## APIs 23 | 24 | - [`Widgets`](http://widgets.vvo-online.de) 25 | - For the [VVO widgets](https://www.vvo-online.de/de/service/widgets/index.cshtml) 26 | - No known official documentation 27 | - See [documentation/widgets](https://github.com/kiliankoe/vvo/blob/master/documentation/widgets.md) for reverse-engineered docs 28 | - [`WebAPI`](https://webapi.vvo-online.de) 29 | - New API used by the mobile page (and therefore the official app) 30 | - No known official documentation 31 | - See [documentation/webapi](https://github.com/kiliankoe/vvo/blob/master/documentation/webapi.md) for reverse-engineered docs 32 | - [`EFA`](http://efa.vvo-online.de:8080) 33 | - "Classic" interface for trip requests 34 | - No known (public) documentation (yet?) 35 | - [`Trias`](http://trias.vvo-online.de:9000/middleware/data/trias) or [`here`](http://efa.vvo-online.de:8080/std3/trias) 36 | - Brand new and still in the process of being implemented afaik 37 | - "Documentation" [v1.1](https://www.vdv.de/431-2sds-v1.1.pdfx?forced=true) or [v1.2](https://www.vdv.de/431-2-sdsv1.2.pdfx?forced=false) 38 | - [`DVB WebDFI`](http://dfi.dvb.de/) 39 | - Closed access 40 | - For web-based [departure monitors](https://www.dvb.de/de-de/service/geschaeftskunden/abfahrtsmonitor/) 41 | - See [#3](https://github.com/kiliankoe/vvo/issues/3) for some more information 42 | - No known (public) documentation (yet?) 43 | - [`DVB Maps App`](https://www.dvb.de/apps/map/) 44 | - POI search and reverse geocoding 45 | - No known (public) documentation (yet?) 46 | 47 | 48 | 49 | ## Libraries 50 | 51 | Client libraries for various languages, sorted in no particular order. Although the names are specific to the DVB, most if not all of them are compatible with everything in the VVO network. 52 | 53 | - Node.js: [`dvbjs`](https://github.com/kiliankoe/dvbjs) 54 | - Python: [`dvbpy`](https://github.com/kiliankoe/dvbpy) 55 | - Haskell: [`dresdner-verkehrsbetriebe`](https://github.com/offenesdresden/dresdner-verkehrsbetriebe) 56 | - Swift: [`DVB`](https://github.com/kiliankoe/DVB) 57 | - Java: [`jVVO`](https://github.com/PhilippMatthes/jVVO) 58 | - Ruby: [`dvbrb`](https://github.com/kiliankoe/dvbrb) 59 | - Go: [`dvbgo`](https://github.com/kiliankoe/dvbgo) 60 | - Rust: [`dvb-rs`](https://github.com/hoodie/dvb-rs) 61 | 62 | 63 | To make it more obvious which lib support which features, here's a nifty table. 64 | 65 | | | JavaScript | Python | Haskell | Swift | Java | Ruby | Go | Rust | 66 | | --------------------- | :--------: | :-----: | :-----: | :---: | :--: | :--: | :--: | :--: | 67 | | Find stops via name | ✅ | ✅ | | ✅ | ✅ | ✅ | | ✅ | 68 | | Find stops via coords | ✅ | ✅ | | ✅ | ✅ | | | | 69 | | Departure Monitor | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 70 | | Routing | ✅ | ✅ | ✅ | ✅ | ✅ | | | | 71 | | Reverse Geocoding | ✅ | ✅ | | ✅ | | | | | 72 | | POI Search | ✅ | ✅ | | | | | | | 73 | | Route Changes | | | | ✅ | ✅ | | | | 74 | | Supported Lines | | | | ✅ | ✅ | | | | 75 | | Route Map Location | | | | | | | | | 76 | | Used API | A, E, D | W, E, D | W, E | A | A | W | W | W | 77 | 78 | W: Widgets, E: EFA, A: WebAPI, D: DVBApps 79 | 80 | 81 | 82 | ### Other 83 | 84 | - [TripKit/VVOProvider](https://github.com/alexander-albers/tripkit/blob/master/TripKit/VvoProvider.swift) - Part of TripKit, a Swift port of [schildbach/public-transport-enabler](https://github.com/schildbach/public-transport-enabler) for the iOS app [ÖPNV Navigator](http://navigatorapp.net) 85 | 86 | 87 | 88 | ## Apps 89 | 90 | Mobile apps known and used in Dresden. 91 | 92 | - [`DVB mobil`](https://www.dvb.de/de-de/fahrplan/dvb-mobil/) - Official, cross-platform 93 | - [`Faplino`](https://play.google.com/store/apps/details?id=de.faplino) - Android 94 | - [`FahrInfo Dresden`](https://itunes.apple.com/de/app/fahrinfo-dresden/id314790387?mt=8) - cross-platform 95 | - [`Öffi`](https://play.google.com/store/apps/details?id=de.schildbach.oeffi) - Android 96 | - [`DVB-Verspaetungen`](https://github.com/alexander-fischer/DVB-Verspaetungen) - Android app informing you about the current delay situation 97 | - [`Manni`](https://itunes.apple.com/us/app/manni/id1347527695?l=de&ls=1&mt=8) - iOS 98 | - [`ÖPNV Navigator`](https://itunes.apple.com/de/app/öpnv-navigator/id1239908782?mt=8) - iOS, not specific to the VVO network 99 | 100 | 101 | 102 | ## Tools, UIs & Experiments 103 | 104 | - [`Home Assistant Integration`](https://github.com/VDenisyuk/home-assistant-transport) - Show current departure data for selected stop on Home Assistant Dashboard 105 | - [`Magic Mirror`](https://web.archive.org/web/20180422030559/http://blog.thomas-bachmann.com/2016/02/magic-mirror-2-0-mit-gestensteuerung.html) - Shows current departure data (using [`dvbpy`](https://github.com/kiliankoe/dvbpy)) 106 | - [`alfred_dvb`](https://github.com/kiliankoe/alfred_dvb) - [Alfred](https://www.alfredapp.com) workflow for departure data (using [`dvbgo`](https://github.com/kiliankoe/dvbgo)) 107 | - [`Amazon Echo`](https://twitter.com/ubahnverleih/status/830079491523358721) - Tweet [@ubahnverleih](https://twitter.com/ubahnverleih) for more info 108 | - [`catch-my-bus`](https://github.com/hoodie/catch-my-bus) - ruby script notifying you about your next bus 109 | - [`catch-my-bus-python`](https://github.com/meepoSenpai/catch-my-bus-python) - GTK3 StatusIcon showing current departure data 110 | - [`DVBot`](https://www.messenger.com/t/dvbot) - DVB Facebook Messenger Bot 111 | - [`ddplan`](https://github.com/4gray/ddplan) - Electron based station monitor that lives in the menubar 112 | - [`Abfahrtsmonitor`](https://github.com/HeEAaD/Abfahrtsmonitor) - Departure board for your Apple Watch 113 | - [`hubot-dvb`](https://github.com/kiliankoe/hubot-dvb) - [Hubot](https://hubot.github.com) script (using [`dvbjs`](https://github.com/kiliankoe/dvbjs)) 114 | - [`dresden-departure-monitor`](https://github.com/don-philipe/dresden-departure-monitor) - Bashscript for getting current departure times 115 | - [`AbfahrtsTV`](https://github.com/kiliankoe/AbfahrtsTV) - Current departure times on your AppleTV, 'cause why not 116 | - [`DVBManniBot`](https://github.com/freakyblue/DVBManniBot) - Telegram bot for checking current departures 117 | - [`Verkehrsbot`](https://github.com/dirkonet/verkehrsbot) - another Telegram bot for checking current departures (using [`dvbpy`](https://github.com/kiliankoe/dvbpy)) 118 | - [`Dresden Bot`](https://github.com/rtwalz/dresden) - Feature rich Telegram bot with routing, maps, departures and a lot more 119 | - [`dvb-on-esp32`](https://github.com/andiikaa/dvb-on-esp32) - Current depature times on lcd via ESP32 (Arduino) 120 | - [`dvb-browser`](https://github.com/pabra/dvb-browser) - Vue.js (mobile) browser app showing real time departures really fast 121 | - [`oepnvdresdenbot`](https://t.me/oepnvdresdenbot) - Telegram bot featuring natural language queries for departures and routes 122 | - [`ARKit Abfahrtsmonitor`](https://twitter.com/kiliankoe/status/1009788336976908289) - iOS ARKit demo showing departure information 123 | - [`Departure Shortcut`](https://github.com/kiliankoe/shortcuts#dvb-abfahrten) - Shortcut for iOS' Shortcuts app showing departures 124 | - [`dvb-mqtt`](https://github.com/seb-daehne/dvb-mqtt) - Periodically publish departure data to an mqtt broker 125 | - [`dvblive`](https://github.com/Tiffel/dvblive) - Visualization of tram delays for the entire city ([live demo](https://rpi.heep.sax.de/dvblive/) - [#odcdresden19](http://dresden.de/odcdresden19) project) 126 | - [`VV...Wo?`](https://github.com/kiliankoe/vvwo) - iOS app using natural language queries ([#odcdresden19](http://dresden.de/odcdresden19) project) 127 | - [`DVBFast`](https://github.com/lucasvog/dvbfast) - WebApp that displays the departure infos of the nearest stations using GPS ([live Version](https://dvbfast.github.io/)) 128 | - [`MMM-DVB`](https://github.com/skastenholz/MMM-DVB) - MagicMirror² module 129 | - [`vvo-departures-cli`](https://aur.archlinux.org/packages/vvo-departures-cli) - CLI for querying departures information, also see [#32](https://github.com/kiliankoe/vvo/issues/32) 130 | -------------------------------------------------------------------------------- /documentation/files/Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf -------------------------------------------------------------------------------- /documentation/files/EFA_XML_Schnittstelle_20151217.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/EFA_XML_Schnittstelle_20151217.pdf -------------------------------------------------------------------------------- /documentation/files/LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf -------------------------------------------------------------------------------- /documentation/files/LINZ_LINIEN_Schnittstelle_EFA_V1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/LINZ_LINIEN_Schnittstelle_EFA_V1.pdf -------------------------------------------------------------------------------- /documentation/files/dokumentationxmlschnittstelleapbv32014-08-28.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/dokumentationxmlschnittstelleapbv32014-08-28.pdf -------------------------------------------------------------------------------- /documentation/webapi.md: -------------------------------------------------------------------------------- 1 | Base URL: `https://webapi.vvo-online.de` 2 | 3 | # Note 4 | VVO is using a server software called [EFA](https://www.mentz.net/loesungen/) from the German company [MENTZ GmbH](https://www.mentz.net/), located in Munich, Germany. Therefore not only the VVO is using this system, but also a lot of other transport organisations and associations like: 5 | * [NVBW (Nahverkehrsgesellschaft Baden-Württemberg)](https://www.nvbw.de/) 6 | * [Ruhrbahn](https://www.ruhrbahn.de/) 7 | * [DVB](https://www.dvb.de/) 8 | * [VRR (Verkehrsverbund Rhein-Ruhr)](https://www.vrr.de/) 9 | * [Naldo (Verkehrsverbund Neckar-Alb-Donau)](https://www.naldo.de/) 10 | * [VMS (Verkehrsverbund Mittelsachsen)](https://www.vms.de/) 11 | * [KVV (Karlsruher Verkehrsverbund)](https://www.kvv.de/) 12 | * [Verkehrsverbund Steiermark](https://verbundlinie.at/) 13 | 14 | ***All requests take a JSON body to be sent via a POST request. The parameters to be included in this are specified below.*** 15 | 16 | # PointFinder 17 | 18 | Find stops based certain parameters. 19 | 20 | ### Request 21 | 22 | POST `https://webapi.vvo-online.de/tr/pointfinder` 23 | 24 | JSON body: 25 | 26 | | Name | Type | Description | Required | 27 | | ----------- | ------ | ------------------------------- | -------- | 28 | | `query` | String | Search query | Yes | 29 | | `limit` | Int | Maximum number of results | No | 30 | | `stopsOnly` | Bool | Only search for stops if `true` | No | 31 | | `regionalOnly` | Bool | Include only stops in VVO area if `true` | No | 32 | | `stopShortcuts` | Bool | Include stop shortcuts if `true` | No | 33 | 34 | or 35 | 36 | | Name | Type | Description | Required | 37 | | --------------- | ------ | ---------------------------------------- | -------- | 38 | | `query` | String | `coord:[right]:[up]` in GK4 coordinates | Yes | 39 | | `limit` | Int | Maximum number of results | No | 40 | | `assignedstops` | Bool | Include stops assigned to coordinate if `true` | No | 41 | 42 | `[right]` and `[up]` are placeholders for the actual coordinates in this example. 43 | 44 | ### Response 45 | 46 | ```js 47 | { 48 | "PointStatus": "List", 49 | "Status": { 50 | "Code": "Ok" 51 | }, 52 | "Points": [ 53 | "33000742|||Helmholtzstraße|5655904|4621157|0||", 54 | "36030083||Chemnitz|Helmholtzstr|5635837|4566835|0||", 55 | "9022020||Bonn|Helmholtzstraße|0|0|0||" 56 | ], 57 | "ExpirationTime": "\/Date(1487859556456+0100)\/" 58 | } 59 | ``` 60 | 61 | ``` 62 | curl -X "POST" "https://webapi.vvo-online.de/tr/pointfinder" \ 63 | -H "Content-Type: application/json; charset=utf-8" \ 64 | -d $'{ 65 | "query": "helmholtz", 66 | "stopsOnly": true 67 | }' 68 | ``` 69 | 70 | Be aware that the elements of the `Points` array can take different forms with different types. If doing a PointFinder request for a coordinate, the first element will look like the following for example `coord:4621020:504065:NAV4:Nöthnitzer Straße 46|c||Nöthnitzer Straße 46|5655935|4621020|0||`. 71 | 72 | Point strings contain nine values separated by a vertical bar (`|`). As far as we know the values are: 73 | | Index | Type | Description | Always included | 74 | | ----- | ---- | ----------- | --------------- | 75 | | 0 | Int or string | ID of a stop (int), or an other type (string, see below) | Yes | 76 | | 1 | String | Unknown. Propably type of point: `a` for streets, `p` for pois, `c` for coordinates | No | 77 | | 2 | String | City name if point is not in the VVO area | No | 78 | | 3 | String | Name of the stop or street | Yes | 79 | | 4 | Int | Right part of the GK4 coordinates | Yes | 80 | | 5 | Int | Up part of the GK4 coordinates | Yes | 81 | | 6 | Int | Distance, when submitting coords in query otherwise 0 | Yes | 82 | | 7 | ??? | Unknown. | No | 83 | | 8 | String | Shortcut of the stop | No | 84 | 85 | Instead of a numeric ID for a stop, there are other types of ids: 86 | * streetID 87 | * poiID 88 | * suburbID 89 | * placeID 90 | * coords 91 | 92 | ### Street IDs 93 | 94 | Street IDs contain 17 values separated by colons (`:`). As far as we know the values are: 95 | 96 | | Index | Type | Description | Always included | 97 | | ----- | ---- | ----------- | --------------- | 98 | | 0 | String | Suffix for streets: `streetID` | Yes | 99 | | 1 | Int | ID of the street (OMC) | Yes | 100 | | 2 | String | Street number, e.g. for `Musterstraße 42a` it's `42a` | No | 101 | | 3 | Int | Unknown | Yes | 102 | | 4 | Int | Unknown, but mostly `-1` (invalid value) | Yes | 103 | | 5 | String | Street name | Yes | 104 | | 6 | String | City name | Yes | 105 | | 7 | String | Street name | Yes | 106 | | 8 | ??? | Unknown | No | 107 | | 9 | String | Street name | Yes | 108 | | 10 | String | Postal code | Yes | 109 | | 11 | String | `ANY` | Yes | 110 | | 12 | String | Either `DIVA_STREET` for a complete street or `DIVA_SINGLEHOUSE` for a point with street number | Yes | 111 | | 13 | Int | Unknown. Propably right part of coordinates in MDV format | Yes | 112 | | 14 | Int | Unknown. Propably up part of coordinates in MDV format | Yes | 113 | | 15 | String | Map name, e.g. `MRCV` or `NAV4` | Yes | 114 | | 16 | String | Acronym of the transport association, e.g. `VVO` | Yes | 115 | 116 | ### POI IDs 117 | 118 | POI IDs contain 13 values separated by colons (`:`). As far as we know the values are: 119 | 120 | | Index | Type | Description | Always included | 121 | | ----- | ---- | ----------- | --------------- | 122 | | 0 | String | Suffix for pois: `poiID` | Yes | 123 | | 1 | Int | ID of the poi | Yes | 124 | | 2 | Int | Unknown. | Yes | 125 | | 3 | Int | Unknown, but mostly `-1` (invalid value) | Yes | 126 | | 4 | String | Name of the poi | Yes | 127 | | 5 | String | City name | Yes | 128 | | 6 | String | Name of the poi | Yes | 129 | | 7 | String | `ANY` | Yes | 130 | | 8 | String | `POI` | Yes | 131 | | 9 | Int | Unknown. Propably right part of coordinates in MDV format | Yes | 132 | | 10 | Int | Unknown. Propably up part of coordinates in MDV format | Yes | 133 | | 11 | String | Map name, e.g. `MRCV` or `NAV4` | Yes | 134 | | 12 | String | Acronym of the transport association, e.g. `VVO` | Yes | 135 | 136 | # Departure Monitor 137 | 138 | List out upcoming departures from a given stop id. 139 | 140 | ### Request 141 | 142 | POST `https://webapi.vvo-online.de/dm` 143 | 144 | JSON body: 145 | 146 | | Name | Type | Description | Required | 147 | | ------------------ | ------------- | ---------------------------------------- | -------- | 148 | | `stopid` | String | ID of the stop | Yes | 149 | | `limit` | Int | Maximum number of results | No | 150 | | `time` | String | ISO8601 timestamp, e.g. `2017-02-22T15:40:26Z` | No | 151 | | `isarrival` | Bool | Is the time specified above supposed to be interpreted as arrival or departure time? | No | 152 | | `shorttermchanges` | Bool | unknown in this context | No | 153 | | `mot` | Array[String] | Allowed modes of transport, see below | No | 154 | 155 | Currently accepted modes of transport are `Tram`, `CityBus`, `IntercityBus`, `SuburbanRailway`, `Train`, `Cableway`, `Ferry`, `HailedSharedTaxi`. 156 | 157 | ### Response 158 | 159 | ```js 160 | { 161 | "Name": "Hauptbahnhof", 162 | "Status": { 163 | "Code": "Ok" 164 | }, 165 | "Place": "Dresden", 166 | "ExpirationTime": "\/Date(1487778279147+0100)\/", 167 | "Departures": [ 168 | { 169 | "Id": "65597047", 170 | "LineName": "3", 171 | "Direction": "Wilder Mann", 172 | "Platform": { 173 | "Name": "3", 174 | "Type": "Platform" 175 | }, 176 | "Mot": "Tram", 177 | "RealTime": "\/Date(1487778230000+0100)\/", 178 | "ScheduledTime": "\/Date(1487778060000+0100)\/", 179 | "State": "Delayed", 180 | "RouteChanges": [ 181 | "509223" 182 | ], 183 | "Diva": { 184 | "Number": "11003", 185 | "Network": "voe" 186 | } 187 | }, 188 | { 189 | "Id": "65598309", 190 | "LineName": "8", 191 | "Direction": "Südvorstadt", 192 | "Platform": { 193 | "Name": "4", 194 | "Type": "Platform" 195 | }, 196 | "Mot": "Tram", 197 | "RealTime": "\/Date(1487778356000+0100)\/", 198 | "ScheduledTime": "\/Date(1487778300000+0100)\/", 199 | "State": "InTime", 200 | "Diva": { 201 | "Number": "11008", 202 | "Network": "voe" 203 | } 204 | } 205 | ] 206 | } 207 | ``` 208 | 209 | ``` 210 | curl -X "POST" "https://webapi.vvo-online.de/dm" \ 211 | -H "Content-Type: application/json;charset=UTF-8" \ 212 | -d $'{ 213 | "stopid": "33000028", 214 | "limit": 2, 215 | "mot": [ 216 | "Tram", 217 | "CityBus", 218 | "IntercityBus", 219 | "SuburbanRailway", 220 | "Train", 221 | "Cableway", 222 | "Ferry", 223 | "HailedSharedTaxi" 224 | ] 225 | }' 226 | ``` 227 | 228 | 229 | # Trip Details 230 | 231 | Get details about the stations involved in a particular trip. 232 | 233 | ## Request 234 | 235 | POST https://webapi.vvo-online.de/dm/trip 236 | 237 | ### JSON Body: 238 | 239 | | Name | Type | Description | Required | 240 | | --------- | --------- | ----------------------------------------------------------------- | -------- | 241 | | `tripid` | String | The "id" received from the departure monitor (Departures\[\*\].Id). | Yes | 242 | | `time` | String | The current time as unix timestamp plus timezone. Has to be in the future. Most likely from a departure monitor response (Departures\[\*\].RealTime / Departures\[\*\].ScheduledTime). | Yes | 243 | | `stopid` | String | ID of a stop in the route. This stop will be marked with Position=Current in the response. | Yes | 244 | | `mapdata` | Bool | Unknown. Seems to have no effect. | No | 245 | 246 | 247 | ``` 248 | curl -X "POST" "https://webapi.vvo-online.de/dm/trip" \ 249 | -H 'Content-Type: application/json; charset=utf-8' \ 250 | -d $'{ 251 | "tripid": "71313709", 252 | "time": "/Date(1512563081000+0100)/", 253 | "stopid": "33000077" 254 | }' 255 | ``` 256 | 257 | ## Response 258 | ``` 259 | { 260 | "Stops": [ 261 | ... 262 | { 263 | "Id": "33000076", 264 | "Place": "Dresden", 265 | "Name": "Laibacher Straße", 266 | "Position": "Previous", 267 | "Platform": { 268 | "Name": "2", 269 | "Type": "Platform" 270 | }, 271 | "Time": "\/Date(1512563021000+0100)\/" 272 | }, 273 | { 274 | "Id": "33000077", 275 | "Place": "Dresden", 276 | "Name": "Großglocknerstraße", 277 | "Position": "Current", 278 | "Platform": { 279 | "Name": "2", 280 | "Type": "Platform" 281 | }, 282 | "Time": "\/Date(1512563081000+0100)\/" 283 | }, 284 | { 285 | "Id": "33000078", 286 | "Place": "Dresden", 287 | "Name": "Friedhof Leuben", 288 | "Position": "Next", 289 | "Platform": { 290 | "Name": "2", 291 | "Type": "Platform" 292 | }, 293 | "Time": "\/Date(1512563141000+0100)\/" 294 | }, 295 | ... 296 | ], 297 | "Status": { 298 | "Code": "Ok" 299 | }, 300 | "ExpirationTime": "\/Date(1512565171371+0100)\/" 301 | } 302 | ``` 303 | 304 | 305 | # Query a Trip 306 | 307 | Query how to get from station "Hauptbahnhof" (stopid 33000028) to station 308 | "Bahnhof Neustadt" (stopid 33000016). 309 | 310 | ## Request 311 | 312 | POST https://webapi.vvo-online.de/tr/trips 313 | 314 | ### JSON body 315 | 316 | | Name | Type | Description | Required | 317 | | ------------------ | ----------- | ----------------- | -------- | 318 | | `origin` | String | stopid of start station | yes | 319 | | `destination` | String | stopid of destination station | yes | 320 | | `shorttermchanges` | Bool | unknown | no (missing behaves like `shorttermchanges = false`) | 321 | | `time` | String | ISO8601 timestamp | no | 322 | | `isarrivaltime` | Bool | is `time` arrival or departure | no | 323 | 324 | ```bash 325 | curl -X "POST" "https://webapi.vvo-online.de/tr/trips?format=json" \ 326 | -H 'Content-Type: application/json; charset=utf-8' \ 327 | -H 'X-Requested-With: de.dvb.dvbmobil' \ 328 | -d $'{ 329 | "destination": "33000016", 330 | "isarrivaltime": false, 331 | "mobilitySettings": { 332 | "mobilityRestriction": "None" 333 | }, 334 | "origin": "33000028", 335 | "shorttermchanges": true, 336 | "standardSettings": { 337 | "footpathToStop": 5, 338 | "includeAlternativeStops": true, 339 | "maxChanges": "Unlimited", 340 | "mot": [ 341 | "Tram", 342 | "CityBus", 343 | "IntercityBus", 344 | "SuburbanRailway", 345 | "Train", 346 | "Cableway", 347 | "Ferry", 348 | "HailedSharedTaxi" 349 | ], 350 | "walkingSpeed": "Normal" 351 | }, 352 | "time": "2017-12-08T21:36:42.775Z" 353 | }' 354 | ``` 355 | 356 | ## Response 357 | 358 | ```json 359 | { 360 | "Routes": [ 361 | ... 362 | { 363 | "Duration": 11, 364 | "FareZoneDestination": 10, 365 | "FareZoneOrigin": 10, 366 | "Interchanges": 0, 367 | "MapData": [ 368 | "Tram|5657496|4621684|5657555|4621712|5657572|4621722|5657589|4621733|5657611|4621746|5657637|4621762|5657694|4621796|5657694|4621796|5657700|4621800|5657729|4621819|5657795|4621859|5657861|4621902|5657888|4621922|5657930|4621954|5657978|4621990|5657978|4621990|5658017|4622019|5658176|4622138|5658240|4622191|5658279|4622224|5658347|4622282|5658358|4622291|5658377|4622302|5658414|4622319|5658476|4622350|5658551|4622387|5658551|4622387|5658574|4622398|5658588|4622406|5658595|4622411|5658607|4622421|5658621|4622432|5658628|4622440|5658629|4622441|5658638|4622450|5658661|4622474|5658682|4622494|5658692|4622502|5658702|4622509|5658765|4622541|5658816|4622567|5658852|4622582|5658870|4622587|5658888|4622592|5658901|4622595|5658937|4622602|5658957|4622607|5658957|4622607|5658966|4622609|5658990|4622613|5659010|4622615|5659021|4622615|5659035|4622614|5659058|4622612|5659091|4622606|5659388|4622527|5659435|4622516|5659441|4622514|5659473|4622506|5659512|4622508|5659520|4622508|5659556|4622511|5659556|4622511|5659562|4622512|5659581|4622513|5659603|4622512|5659946|4622487|5659981|4622486|5660008|4622484|5660032|4622487|5660053|4622494|5660065|4622499|5660090|4622515|5660123|4622534|5660124|4622534|5660124|4622534|5660134|4622541|5660148|4622549|5660244|4622401|5660271|4622315|5660278|4622254|5660285|4622217|5660291|4622151|" 369 | ], 370 | "MapPdfId": "VVO_5A2B062D3", 371 | "MotChain": [ 372 | { 373 | "Changes": [ 374 | "510690" 375 | ], 376 | "Direction": " Btf Trachenberge", 377 | "Diva": { 378 | "Network": "voe", 379 | "Number": "11003" 380 | }, 381 | "Name": "3", 382 | "Type": "Tram" 383 | } 384 | ], 385 | "PartialRoutes": [ 386 | { 387 | "Duration": 11, 388 | "MapDataIndex": 0, 389 | "Mot": { 390 | "Changes": [ 391 | "510690" 392 | ], 393 | "Direction": " Btf Trachenberge", 394 | "Diva": { 395 | "Network": "voe", 396 | "Number": "11003" 397 | }, 398 | "Name": "3", 399 | "Type": "Tram" 400 | }, 401 | "PartialRouteId": 0, 402 | "RegularStops": [ 403 | { 404 | "ArrivalTime": "/Date(1512769800000-0000)/", 405 | "DataId": "33000028", 406 | "DepartureTime": "/Date(1512769800000-0000)/", 407 | "Latitude": 5657497, 408 | "Longitude": 4621685, 409 | "MapPdfId": "VVO_5A2B062D4", 410 | "Name": "Hauptbahnhof", 411 | "Place": "Dresden", 412 | "Platform": { 413 | "Name": "3", 414 | "Type": "Railtrack" 415 | }, 416 | "Type": "Stop" 417 | }, 418 | { 419 | "ArrivalTime": "/Date(1512769860000-0000)/", 420 | "DataId": "33000032", 421 | "DepartureTime": "/Date(1512769860000-0000)/", 422 | "Latitude": 5657693, 423 | "Longitude": 4621797, 424 | "Name": "Hauptbahnhof Nord", 425 | "Place": "Dresden", 426 | "Platform": { 427 | "Name": "1", 428 | "Type": "Platform" 429 | }, 430 | "Type": "Stop" 431 | }, 432 | { 433 | "ArrivalTime": "/Date(1512769920000-0000)/", 434 | "DataId": "33000029", 435 | "DepartureTime": "/Date(1512769920000-0000)/", 436 | "Latitude": 5657981, 437 | "Longitude": 4621985, 438 | "Name": "Walpurgisstraße", 439 | "Place": "Dresden", 440 | "Platform": { 441 | "Name": "1", 442 | "Type": "Platform" 443 | }, 444 | "Type": "Stop" 445 | }, 446 | { 447 | "ArrivalTime": "/Date(1512770040000-0000)/", 448 | "DataId": "33000005", 449 | "DepartureTime": "/Date(1512770040000-0000)/", 450 | "Latitude": 5658549, 451 | "Longitude": 4622390, 452 | "Name": "Pirnaischer Platz", 453 | "Place": "Dresden", 454 | "Platform": { 455 | "Name": "4", 456 | "Type": "Platform" 457 | }, 458 | "Type": "Stop" 459 | }, 460 | { 461 | "ArrivalTime": "/Date(1512770100000-0000)/", 462 | "DataId": "33000015", 463 | "DepartureTime": "/Date(1512770100000-0000)/", 464 | "Latitude": 5658956, 465 | "Longitude": 4622609, 466 | "Name": "Synagoge", 467 | "Place": "Dresden", 468 | "Platform": { 469 | "Name": "2", 470 | "Type": "Platform" 471 | }, 472 | "Type": "Stop" 473 | }, 474 | { 475 | "ArrivalTime": "/Date(1512770220000-0000)/", 476 | "DataId": "33000014", 477 | "DepartureTime": "/Date(1512770220000-0000)/", 478 | "Latitude": 5659556, 479 | "Longitude": 4622513, 480 | "Name": "Carolaplatz", 481 | "Place": "Dresden", 482 | "Platform": { 483 | "Name": "4", 484 | "Type": "Platform" 485 | }, 486 | "Type": "Stop" 487 | }, 488 | { 489 | "ArrivalTime": "/Date(1512770340000-0000)/", 490 | "DataId": "33000013", 491 | "DepartureTime": "/Date(1512770340000-0000)/", 492 | "Latitude": 5660122, 493 | "Longitude": 4622537, 494 | "Name": "Albertplatz", 495 | "Place": "Dresden", 496 | "Platform": { 497 | "Name": "2", 498 | "Type": "Platform" 499 | }, 500 | "Type": "Stop" 501 | }, 502 | { 503 | "ArrivalTime": "/Date(1512770460000-0000)/", 504 | "DataId": "33000016", 505 | "DepartureTime": "/Date(1512770460000-0000)/", 506 | "Latitude": 5660290, 507 | "Longitude": 4622151, 508 | "MapPdfId": "VVO_5A2B062D5", 509 | "Name": "Bahnhof Neustadt", 510 | "Place": "Dresden", 511 | "Platform": { 512 | "Name": "2", 513 | "Type": "Platform" 514 | }, 515 | "Type": "Stop" 516 | } 517 | ], 518 | "Shift": "None" 519 | } 520 | ], 521 | "Price": "2,30", 522 | "PriceLevel": 1, 523 | "RouteId": 1 524 | }, 525 | ... 526 | ], 527 | "SessionId": "367417461:efa4", 528 | "Status": { 529 | "Code": "Ok" 530 | } 531 | } 532 | ``` 533 | 534 | 535 | # Route Changes 536 | 537 | Get information about route changes because of construction work or such. 538 | 539 | ## Request 540 | 541 | POST https://webapi.vvo-online.de/rc 542 | 543 | ### JSON body 544 | 545 | | Name | Type | Description | Required | 546 | | ----------- | ----------- | -------------- | -------- | 547 | | `shortterm` | Bool | unknown. I diffed the output with and without -> no diff | no | 548 | 549 | I also tried to pass other keys like mot, name, id, change, ... (each camel, pascal and lower case) 550 | but no error and no change in result. So it looks like you need to fetch all route changes for the 551 | whole VVO and filter yourself. 552 | 553 | ```bash 554 | curl -X "POST" "https://webapi.vvo-online.de/rc" \ 555 | -H 'Content-Type: application/json; charset=utf-8' \ 556 | -d $'{ "shortterm": true }' 557 | ``` 558 | 559 | ## Response 560 | 561 | ```json 562 | { 563 | "Changes": [ 564 | ... 565 | { 566 | "Description": "

\n

Beschreibung

\n

Buslinie 79:
Umleitung nur in Richtung Overbeckstraße zwischen den Haltestellen Rethelstraße und Mengsstraße über den Fahrweg Rethelstraße - Werftstraße.

\n

Haltestellenanpassungen

\n

", 567 | "Id": "511595", 568 | "LineIds": [ 569 | "428296" 570 | ], 571 | "PublishDate": "/Date(1512400560000+0100)/", 572 | "Title": "Dresden - Mengsstraße, Vollsperrung wegen Asphaltarbeiten", 573 | "Type": "Scheduled", 574 | "ValidityPeriods": [ 575 | { 576 | "Begin": "/Date(1512529200000+0100)/", 577 | "End": "/Date(1512788400000+0100)/" 578 | } 579 | ] 580 | }, 581 | ... 582 | ], 583 | "Status": { 584 | "Code": "Ok" 585 | } 586 | } 587 | ``` 588 | 589 | (sometimes they come back: ``) 590 | 591 | 592 | # Lines 593 | 594 | Get information about which lines do service which stations. 595 | 596 | ## Request 597 | 598 | POST https://webapi.vvo-online.de/stt/lines 599 | 600 | ### JSON body 601 | 602 | | Name | Type | Description | Required | 603 | |----------|--------|----------------|----------| 604 | | `stopid` | String | ID of the stop | Yes | 605 | 606 | ```bash 607 | curl -X "POST" "https://webapi.vvo-online.de/stt/lines" \ 608 | -H 'Content-Type: application/json; charset=utf-8' \ 609 | -d $'{ "stopid": "33000293" }' 610 | ``` 611 | 612 | ## Response 613 | 614 | ```json 615 | { 616 | "Lines": [ 617 | { 618 | "Name": "41", 619 | "Mot": "Tram", 620 | "Changes": [ 621 | "5482", 622 | "5480", 623 | "5481" 624 | ], 625 | "Directions": [ 626 | { 627 | "Name": "Dresden Südvorstadt", 628 | "TimeTables": [ 629 | { 630 | "Id": "voe:11041: :H:j19:2", 631 | "Name": "Ferienfahrplan - gültig vom 06.07. bis 18.08.2019" 632 | } 633 | ] 634 | }, 635 | { 636 | "Name": "Dresden Bühlau Ullersdorfer Platz", 637 | "TimeTables": [ 638 | { 639 | "Id": "voe:11041: :R:j19:2", 640 | "Name": "Ferienfahrplan - gültig vom 06.07. bis 18.08.2019" 641 | } 642 | ] 643 | } 644 | ], 645 | "Diva": { 646 | "Number": "11041", 647 | "Network": "voe" 648 | } 649 | }, 650 | { 651 | "Name": "64", 652 | "Mot": "CityBus", 653 | "Changes": [ 654 | "5481", 655 | "5466", 656 | "4472" 657 | ], 658 | "Directions": [ 659 | { 660 | "Name": "Dresden Kaditz Am Vorwerksfeld", 661 | "TimeTables": [ 662 | { 663 | "Id": "voe:21064: :H:j19:17", 664 | "Name": "Aktualisierter Standardfahrplan - gültig ab 21.06.2019" 665 | }, 666 | { 667 | "Id": "voe:21064: :H:j19:18", 668 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019" 669 | } 670 | ] 671 | }, 672 | { 673 | "Name": "Dresden Reick Hülße-Gymnasium", 674 | "TimeTables": [ 675 | { 676 | "Id": "voe:21064: :R:j19:17", 677 | "Name": "Aktualisierter Standardfahrplan - gültig ab 21.06.2019" 678 | }, 679 | { 680 | "Id": "voe:21064: :R:j19:18", 681 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019" 682 | } 683 | ] 684 | } 685 | ], 686 | "Diva": { 687 | "Number": "21064", 688 | "Network": "voe" 689 | } 690 | }, 691 | { 692 | "Name": "74", 693 | "Mot": "CityBus", 694 | "Directions": [ 695 | { 696 | "Name": "Dresden Marienallee", 697 | "TimeTables": [ 698 | { 699 | "Id": "voe:21074:D:H:j19:1", 700 | "Name": "Standardfahrplan (gültig ab 07.01.2019)" 701 | } 702 | ] 703 | }, 704 | { 705 | "Name": "Dresden Mathias-Oeder-Straße", 706 | "TimeTables": [ 707 | { 708 | "Id": "voe:21074:D:R:j19:1", 709 | "Name": "Standardfahrplan (gültig ab 07.01.2019)" 710 | } 711 | ] 712 | } 713 | ], 714 | "Diva": { 715 | "Number": "21074D", 716 | "Network": "voe" 717 | } 718 | }, 719 | { 720 | "Name": "74", 721 | "Mot": "CityBus", 722 | "Directions": [ 723 | { 724 | "Name": "Dresden Marienallee", 725 | "TimeTables": [ 726 | { 727 | "Id": "voe:21074: :H:j19:11", 728 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019" 729 | } 730 | ] 731 | }, 732 | { 733 | "Name": "Dresden Jägerpark Heideblick", 734 | "TimeTables": [ 735 | { 736 | "Id": "voe:21074: :R:j19:11", 737 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019" 738 | } 739 | ] 740 | } 741 | ], 742 | "Diva": { 743 | "Number": "21074", 744 | "Network": "voe" 745 | } 746 | }, 747 | { 748 | "Name": "261", 749 | "Mot": "IntercityBus", 750 | "Directions": [ 751 | { 752 | "Name": "Dresden Hauptbahnhof", 753 | "TimeTables": [ 754 | { 755 | "Id": "voe:15261:m:H:j19:1", 756 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018" 757 | } 758 | ] 759 | }, 760 | { 761 | "Name": "Sebnitz Busbahnhof", 762 | "TimeTables": [ 763 | { 764 | "Id": "voe:15261:m:R:j19:1", 765 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018" 766 | } 767 | ] 768 | } 769 | ], 770 | "Diva": { 771 | "Number": "15261m", 772 | "Network": "voe" 773 | } 774 | }, 775 | { 776 | "Name": "305", 777 | "Mot": "IntercityBus", 778 | "Directions": [ 779 | { 780 | "Name": "Bischofswerda Bahnhof", 781 | "TimeTables": [ 782 | { 783 | "Id": "voe:27305: :H:j19:1", 784 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018" 785 | }, 786 | { 787 | "Id": "voe:27305: :H:j19:4", 788 | "Name": "Fahrbahnerneuerung S 158 in Rammenau" 789 | }, 790 | { 791 | "Id": "voe:27305: :H:j19:6", 792 | "Name": "Fahrbahnerneuerung S 158 in Rammenau + Fischhausstraße" 793 | }, 794 | { 795 | "Id": "voe:27305: :H:j19:7", 796 | "Name": "Bau Fischhausstraße 29. JUli bis 16. August 2019" 797 | } 798 | ] 799 | }, 800 | { 801 | "Name": "Dresden Augsburger Straße", 802 | "TimeTables": [ 803 | { 804 | "Id": "voe:27305: :R:j19:1", 805 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018" 806 | } 807 | ] 808 | }, 809 | { 810 | "Name": "Dresden Ammonstraße / Budapester Straße", 811 | "TimeTables": [ 812 | { 813 | "Id": "voe:27305: :R:j19:4", 814 | "Name": "Fahrbahnerneuerung S 158 in Rammenau" 815 | }, 816 | { 817 | "Id": "voe:27305: :R:j19:6", 818 | "Name": "Fahrbahnerneuerung S 158 in Rammenau + Fischhausstraße" 819 | }, 820 | { 821 | "Id": "voe:27305: :R:j19:7", 822 | "Name": "Bau Fischhausstraße 29. JUli bis 16. August 2019" 823 | } 824 | ] 825 | } 826 | ], 827 | "Diva": { 828 | "Number": "27305", 829 | "Network": "voe" 830 | } 831 | } 832 | ], 833 | "Status": { 834 | "Code": "Ok" 835 | }, 836 | "ExpirationTime": "/Date(1563544805289+0200)/" 837 | } 838 | ``` 839 | 840 | # Sources 841 | * http://data.linz.gv.at/katalog/linz_ag/linz_ag_linien/fahrplan/EFA_XML_Schnittstelle_20151217.pdf 842 | * http://data.linz.gv.at/katalog/linz_ag/linz_ag_linien/fahrplan/LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf 843 | * http://data.linz.gv.at/katalog/linz_ag/linz_ag_linien/fahrplan/LINZ_LINIEN_Schnittstelle_EFA_V1.pdf 844 | * http://mobilitaet21.de/wp-content/uploads/2016/03/Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf 845 | * https://www.yumpu.com/de/document/read/10943659/efa-version-10-mentz-datenverarbeitung-gmbh 846 | * http://dati.retecivica.bz.it/dataset/575f7455-6447-4626-a474-0f93ff03067b/resource/c4e66cdf-7749-40ad-bcfd-179f18743d84/download/dokumentationxmlschnittstelleapbv32014-08-28.pdf 847 | 848 | # TODO 849 | 850 | - https://webapi.vvo-online.de/map/pins 851 | - (https://webapi.vvo-online.de/tr/handyticket) 852 | -------------------------------------------------------------------------------- /documentation/widgets.md: -------------------------------------------------------------------------------- 1 | Base URL: `http://widgets.vvo-online.de` 2 | 3 | # Abfahrten 4 | 5 | Get a list of upcoming departures from a given stop with a few filter options. 6 | 7 | ### Request 8 | 9 | GET `http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do` 10 | 11 | Params: 12 | 13 | | Name | Type | Description | Required | 14 | | :---------- | ------- | ---------------------------------------- | :------- | 15 | | `hst` | String | Name of the stop | Yes | 16 | | `vz` | Int | Time offset, e.g. `1` minute in the future | No | 17 | | `ort` | String | City to further specify the stop | No | 18 | | `vm` | String | Comma-separated list of allowed transport modes, see below | No | 19 | | `lim` | Int | Maximum number of results | No | 20 | | `timestamp` | Int | Unix timestamp for when to search | No | 21 | | `iso` | unknown | unknown | No | 22 | 23 | 24 | Possible transport modes are listed [here](http://widgets.vvo-online.de/abfahrtsmonitor/Verkehrsmittel.do). Currently included are `Rufbus`, `Fähre`, `Regionalbus`, `S-Bahn`, `Seil-/Schwebebahn`, `Stadtbus`, `Straßenbahn`, `Zug`. 25 | 26 | ### Response 27 | 28 | ```js 29 | [ 30 | [ 31 | "4", // Line identifier 32 | "Radebeul West", // Destination 33 | "1" // Time in minutes until arrival 34 | ], 35 | [ 36 | "1", 37 | "Prohlis", 38 | "2" 39 | ] 40 | ] 41 | ``` 42 | 43 | ``` 44 | curl -X "GET" "http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?hst=postplatz&vz=0&ort=Dresden&lim=2×tamp=1487172338" 45 | ``` 46 | 47 | # Haltestelle 48 | 49 | Find specific stops given a partial name or search query. 50 | 51 | ### Request 52 | 53 | GET `http://widgets.vvo-online.de/abfahrtsmonitor/Haltestelle.do` 54 | 55 | Params: 56 | 57 | | Name | Type | Description | Required | 58 | | ----- | ------ | ----------- | -------- | 59 | | `ort` | String | City name | No | 60 | | `hst` | String | Stop name | Yes | 61 | 62 | ### Response 63 | 64 | ```js 65 | [ 66 | [ 67 | [ 68 | "Dresden" 69 | ] 70 | ], 71 | [ 72 | [ 73 | "Helmholtzstraße", 74 | "Dresden", 75 | "33000742" 76 | ] 77 | ] 78 | ] 79 | ``` 80 | 81 | ``` 82 | curl -X "GET" "http://widgets.vvo-online.de/abfahrtsmonitor/Haltestelle.do?ort=Dresden&hst=Helmholtz" 83 | ``` 84 | 85 | # TODO 86 | 87 | http://widgets.vvo-online.de/abfahrtsmonitor/Verkehrsmittel.do 88 | -------------------------------------------------------------------------------- /kuerzel/kuerzel.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | import sys 4 | import requests 5 | from bs4 import BeautifulSoup 6 | 7 | content = requests.get('https://www.dvb.de/de-de/fahrplan/haltestellenauskunft/haltestellenkuerzel/').text 8 | soup = BeautifulSoup(content, 'html.parser') 9 | 10 | tables = soup.find_all('table') 11 | 12 | if len(sys.argv) != 2: 13 | print('`dresden` or `umland`?') 14 | sys.exit(1) 15 | 16 | if sys.argv[1].lower() == 'dresden': 17 | for table in tables[0:2]: 18 | for tr in table.find_all('tr')[1:]: 19 | tds = tr.find_all('td') 20 | name, kuerzel = tds 21 | print('{};{}'.format(name.text.strip(), 22 | kuerzel.text.strip())) 23 | elif sys.argv[1].lower() == 'umland': 24 | for tr in tables[2].find_all('tr')[1:]: 25 | tds = tr.find_all('td') 26 | ort, name, kuerzel = tds 27 | print('{}, {};{}'.format(name.text.strip(), 28 | ort.text.strip(), 29 | kuerzel.text.strip())) 30 | else: 31 | print('`dresden` or `umland`?') 32 | sys.exit(1) 33 | -------------------------------------------------------------------------------- /kuerzel/kuerzel_dresden.csv: -------------------------------------------------------------------------------- 1 | Aachener Straße;AAC 2 | Am Anger;AAN 3 | Am Altfrankener Park;AAP 4 | Alberthafen;ABH 5 | Altenberger Platz;ABP 6 | Abzweig nach Reick;ABR 7 | Am Brüchigt;ABT 8 | Altburgstädtel;ABU 9 | Achtbeeteweg;ABW 10 | Altcotta;ACO 11 | Altdobritz;ADB 12 | An der Flutrinne;ADF 13 | Auf der Höhe;ADH 14 | An der Obstplantage;ADO 15 | An der Rennbahn;ADR 16 | An den Winkelwiesen;ADW 17 | Agentur für Arbeit;AFA 18 | Am Festspielhaus;AFE 19 | Altfranken;AFR 20 | Am Galgenberg;AGB 21 | Arno-Holz-Allee;AHA 22 | Am Hellerhof;AHH 23 | Ahlbecker Straße;AHL 24 | Am Hellerrand;AHR 25 | Altkaitz;AKA 26 | Altkaditz;AKD 27 | Altklotzsche;AKL 28 | Alaunplatz;ALA 29 | Altenberger Straße;ALB 30 | Altleuben;ALN 31 | Altlockwitz;ALO 32 | Albertplatz;ALP 33 | Atlplauen;ALT 34 | Altleubnitz;ALZ 35 | Amselgrund;AMG 36 | Am Lehmberg;AML 37 | Altmockritz;AMO 38 | Amalie-Dietrich-Platz;AMP 39 | Amselsteg;AMS 40 | Altmarkt;AMT 41 | Altnaußlitz;ANA 42 | Angelikastraße;ANG 43 | Altnossener Straße;ANS 44 | Am Olter;AOL 45 | Altomsewitz;AOM 46 | Altpieschen;API 47 | An der Post;APO 48 | Alexander-Puschkin-Platz;APU 49 | Am Querfeld;AQU 50 | Altreick;ARE 51 | Arkonastraße;ARK 52 | Am Steinacker;ASA 53 | Arno-Schellenberg-Straße;ASC 54 | Am Schöpsdamm;ASD 55 | Alter Schlachthof;ASH 56 | Am Steinigt;ASI 57 | Am Steinkreuz;ASK 58 | Adalbert-Stifter-Weg;AST 59 | Am Trachauer Bahnhof;ATB 60 | Alfred-Thiele-Straße;ATH 61 | Alttolkewitz;ATO 62 | Alttrachau;ATR 63 | Alttorna;ATT 64 | Augsburger Straße;AUG 65 | Am Urnenfeld;AUR 66 | Am Weißen Adler;AWA 67 | Am Weißiger Bach;AWB 68 | Altwilschdorf;AWD 69 | A.-Weineck-Straße;AWK 70 | Albert-Wolf-Platz;AWP 71 | Am Waldrand;AWR 72 | Am Wiesenrand;AWS 73 | Altwachwitz;AWW 74 | Am Zwingerteich;AZT 75 | Babisnauer Straße;BAB 76 | Bärensteiner Straße;BAE 77 | Bamberger Straße;BAM 78 | Bannewitzer Straße;BAN 79 | Borsbergblick;BBB 80 | Budapester Straße;BDP 81 | Bodemerweg;BDW 82 | Beckerstraße;BEC 83 | Beerenhut;BEH 84 | Bernhardstraße;BER 85 | Bahnhof Grenzstraße;BFG 86 | Bahnhof Klotzsche;BFK 87 | Bahnhof Neustadt;BFN 88 | Bahnhof Reick;BFR 89 | Berggartenstraße;BGG 90 | Berggießhübler Straße;BGH 91 | Burgkstraße;BGK 92 | Burgenlandstraße;BGL 93 | Bürgerstraße;BGR 94 | Bergfelderweg;BGW 95 | Bahnhofstraße;BHF 96 | Bonhoefferplatz;BHP 97 | Berthold-Haupt-Straße;BHT 98 | Bischofsplatz;BIP 99 | Birkenhainer Straße;BIR 100 | Bischofsweg;BIW 101 | Birkenstraße;BKS 102 | Bergmannstraße;BMA 103 | Bahnhof Mitte;BMI 104 | Böhmertstraße;BMS 105 | Bf. Neustadt (Hansastraße);BNH 106 | Bönischplatz;BNP 107 | Bünaustraße;BNS 108 | Oberloschwitz;BOLO 109 | Boxdorfer Straße;BOX 110 | Bremer Straße;BRM 111 | Breitscheidstraße;BRS 112 | Brunnenweg;BRU 113 | Bedrich-Smetana-Straße;BSM 114 | Bautzner/Rothenburger Str.;BTZ 115 | Buchenstraße;BUC 116 | Bühlau Ullersdorfer Platz;BUE 117 | Bunsenstraße;BUN 118 | Betriebshof Walterstraße;BWA 119 | Weißer Hirsch;BWHI 120 | Bärwalder Straße;BWR 121 | Cäcilienstraße;CAC 122 | Calberlastraße;CAL 123 | Cämmerswalder Straße;CAM 124 | Carolaplatz;CAP 125 | C.-David-Friedrich-Straße;CDF 126 | Chamissostraße;CHA 127 | Chemnitzer Straße;CHE 128 | Clausen-Dahl-Straße;CLD 129 | Campingplatz Mockritz;CMO 130 | Conertplatz;CNP 131 | Cottaer Straße;COA 132 | Cossebauder Straße;COB 133 | Comeniusplatz;COP 134 | Corinthstraße;COR 135 | Coventrystraße;COV 136 | Coschütz;COZ 137 | Cossebaude Bahnhof;CSB 138 | Coschützer Straße;CSS 139 | Cunnersdorfer Straße;CUD 140 | Cunewalder Straße;CUW 141 | Clara-Viebig-Straße;CVI 142 | Clara-Zetkin-Straße;CZN 143 | Dahlienweg;DAH 144 | Dampfschiffstraße;DAM 145 | Dorothea-Erxleben-Straße;DEX 146 | Dorfhainer Straße;DFH 147 | Deutsches Hygiene-Museum;DHM 148 | Droste-Hülshoff-Straße;DHS 149 | Diakonissenkrankenhaus;DIK 150 | Dölzschener Straße;DLZ 151 | Dörnichtweg;DNW 152 | Dorfstraße;DOF 153 | Dohnaer Straße;DOH 154 | Dölzschen;DOL 155 | Dorfplatz Oberpoyritz;DOP 156 | Dornblüthstraße;DOR 157 | Dreyßigplatz;DRP 158 | Dora-Stock-Straße;DSS 159 | Dürerstraße;DUR 160 | Dammweg;DWE 161 | Erna-Berger-Straße;EBE 162 | Ebertplatz;EBP 163 | Eugen-Bracht-Straße;EBR 164 | Eisenbahnstraße;EBS 165 | Enno-Heidebroek-Straße;EHS 166 | Eichbergstraße;EIC 167 | Erich-Kästner-Straße;EKA 168 | Elisabethstraße;ELI 169 | Elsterweg;ELS 170 | ElbePark;EPK 171 | Eschebachstraße;ESB 172 | Elbschlösser;ESL 173 | Ernst-Toller-Straße;ETO 174 | Fabricestraße;FAS 175 | Hp. Freiberger Straße;FBG 176 | Fußweg nach Borthen;FBO 177 | Fetscherplatz;FEP 178 | Blasewitzer/Fetscherstraße;FET 179 | Flugzeugwerke;FGW 180 | Friedhof Leuben;FHL 181 | Fraunhofer-Inst.-Zentrum;FIZ 182 | Johannstadt Fähre;FJOF 183 | Frankenbergstraße;FKB 184 | Kleinzschachwitz, Fähre;FKLF 185 | Flensburger Straße;FLE 186 | Flughafenstraße;FLH 187 | Försterlingstraße;FLR 188 | Flughafen;FLU 189 | Flügelweg;FLW 190 | Fritz-Meinhardt-Straße;FME 191 | Fehrmannweg;FMW 192 | Neustadt, Fähre;FNEU 193 | Niederpoyritz, Fähre;FNPO 194 | Pillnitz, Fähre;FPIL 195 | Freiheit;FRE 196 | Friedensstraße;FRI 197 | Festspielhaus Hellerau;FSH 198 | Fernsehturm;FST 199 | Fontane-Center;FTC 200 | Tolkewitz, Fähre;FTOL 201 | Fürstenhainer Straße;FTS 202 | Fuchsberg;FUB 203 | Flughafen West;FWE 204 | Freibad Wostra;FWO 205 | Gabelsbergerstraße;GAB 206 | Gamigstraße;GAM 207 | Gasanstaltstraße;GAS 208 | Gondelweg;GDW 209 | Georg-Arnhold-Bad;GEA 210 | Geblerstraße;GEB 211 | Gerichtsstraße;GER 212 | Großenh./F.-Reuter-Straße;GFS 213 | Gustav-Freytag-Straße;GFT 214 | Gewerbegebiet Gittersee;GGG 215 | Großglocknerstraße;GGL 216 | Gewerbegebiet Kaditz;GKA 217 | Gottfried-Keller-Straße;GKE 218 | Görlitzer Straße;GLS 219 | Gompitzer Höhe;GMH 220 | Gombsener Straße;GMS 221 | Grüner Weg;GNW 222 | Gorbitzer Straße;GOB 223 | Gohlis;GOH 224 | Gönnsdorf;GON 225 | Gorbitz, Betriebshof;GOR 226 | Gottleubaer Straße;GOT 227 | Gohliser Weg;GOW 228 | Georg-Palitzsch-Straße;GPA 229 | Gret-Palucca-Straße;GPS 230 | Göppersdorfer Weg;GPW 231 | Grundstraße;GRD 232 | Grenzstraße;GRE 233 | Grillparzerstraße;GRI 234 | Btf. Gruna (Tiergartenstraße);GRN 235 | Gerokstraße;GRO 236 | Großenhainer Platz;GRP 237 | Gartenstraße;GRS 238 | Grunaer Weg;GRW 239 | Guerickestraße;GUE 240 | Güntzplatz;GUN 241 | Gustavheim;GUS 242 | Gutenbergstraße;GUT 243 | Gasthof Weißig;GWE 244 | St.-Benno-Gymnasium;GYM 245 | Hamburger Straße;HAM 246 | Hans-Oster-Straße;HAO 247 | Hellerberge;HBE 248 | Hauptbahnhof;HBF 249 | Hauptbahnhof Nord;HBN 250 | Heeresbäckerei;HBR 251 | Hutbergschule;HBS 252 | Hugo-Bürkner-Straße;HBU 253 | Hans-Dankner-Straße;HDA 254 | Hebbelplatz;HEB 255 | Heckenweg;HEC 256 | Heidefriedhof;HEF 257 | Hegereiterstraße;HEG 258 | Hepkeplatz;HEK 259 | Hellerau Kiefernweg;HEL 260 | Hepkestraße;HEP 261 | Zum Heiderand;HER 262 | Heidestraße;HES 263 | Hüfnerweg;HFW 264 | Hülße-Gymnasium;HGM 265 | Hutbergstraße;HGS 266 | Hellerhofstraße;HHO 267 | Hohe Straße;HHS 268 | Helmholzstraße;HHZ 269 | Hirtenstraße;HIR 270 | Hugo-Junkers-Ring;HJR 271 | Liststraße (Harkortstraße);HKT 272 | Höckendorfer Weg;HKW 273 | Hellersiedlung;HLS 274 | Hermann-Michel-Straße;HMI 275 | Hendrichstraße;HNS 276 | Hänichenweg;HNW 277 | Hohlweg;HOH 278 | Hornweg;HOR 279 | Heilbronner Straße;HOS 280 | Hp. Dobritz;HPD 281 | Heideparkstraße;HPK 282 | Hp. Plauen;HPL 283 | Hp. Pieschen;HPP 284 | Hp. Strehlen;HPS 285 | Hp. Weixdorf Bad;HPW 286 | Helena-Rott-Straße;HRS 287 | Hermann-Seidel-Straße;HSE 288 | Heinrich-Schütz-Straße;HSS 289 | Hp.Trachau;HTR 290 | Heinrich-Tessenow-Weg;HTW 291 | Hubertusplatz;HUB 292 | Hülßestraße;HUL 293 | Hüblerplatz;HUP 294 | Heinrich-Zille-Straße;HZS 295 | Industriegebiet Nord;IDN 296 | Infineon Nord;IFN 297 | Infineon Süd;IFS 298 | Ikarusweg;IKW 299 | Industriegelände;IND 300 | Innsbrucker Straße;INN 301 | Industriepark Klotzsche;IPK 302 | Johannes-Brahms-Straße;JBR 303 | Jacobistraße;JCS 304 | Jüngststraße;JGS 305 | Josef-Herrmann-Straße;JHE 306 | Johannisfriedhof;JHF 307 | Junghansstraße;JHS 308 | Johannstadt;JOH 309 | Josephinenstraße;JOP 310 | Julius-Otto-Straße;JOT 311 | Jägerpark;JPK 312 | Justizvollzugsanstalt;JUZ 313 | Julius-Vahlteich-Straße;JVA 314 | Jacob-Winter-Platz;JWP 315 | Kaditz Am Vorwerksfeld;KAD 316 | Kapellenweg;KAP 317 | Karcherallee;KAR 318 | Kasseler Straße;KAS 319 | Kauschaer Straße;KAU 320 | Kaditzer Straße;KDS 321 | Kelterei;KEL 322 | Keppgrundstraße;KEP 323 | Keulenbergstraße;KEU 324 | Krügerstraße;KGS 325 | Kongresszentrum;KGZ 326 | Krhs. Friedrichstadt;KHF 327 | Krhs. St. Joseph-Stift;KHJ 328 | Krankenhaus Neustadt;KHN 329 | Königsheimplatz;KHP 330 | Infineon;KIN 331 | Kirschenstraße;KIR 332 | Käthe-Kollwitz-Ufer;KKU 333 | Käthe-Kollwitz-Platz;KKW 334 | Kleestraße;KLE 335 | Kleinzschachwitz, Fähre;KLF 336 | Kolpingstraße;KLG 337 | Kleinnaundorfer Straße;KLN 338 | Klosterteichplatz;KLP 339 | Kölner Straße;KLS 340 | Klettestraße;KLT 341 | Karl-Laux-Straße;KLX 342 | Kleinzschachwitz, Freystraße;KLZ 343 | Karl-Marx-Straße;KMX 344 | Knappestraße;KNA 345 | Körnerplatz;KNP 346 | Koblenzer Straße;KOB 347 | Kohlsdorfer Landstraße;KOH 348 | Kopernikusstraße;KOP 349 | Koreanischer Platz;KOR 350 | Koloniestraße;KOS 351 | Kotteweg;KOT 352 | Kotzschweg;KOZ 353 | Kipsdorfer Straße;KPS 354 | Krebser Straße;KRB 355 | Krebser Straße Nord;KRN 356 | Kretschmerstraße;KRT 357 | Karlshagener Weg;KRW 358 | Kurzer Schritt;KSC 359 | Kadenstraße;KSE 360 | Kastanienstraße;KST 361 | Künstlerhaus;KTN 362 | Kurt-Tucholsky-Straße;KTS 363 | Kaitzer Straße;KTZ 364 | Kurhausstraße;KUR 365 | Laibacher Straße;LAI 366 | Lassallestraße;LAS 367 | Lauterbacher Straße;LAU 368 | Laubegast;LBG 369 | Leubnitzer Höhe;LBH 370 | Leiblstraße;LBL 371 | Leubener Straße;LBN 372 | Liebenauer Straße;LBS 373 | Landesdirektion;LDD 374 | Anton-/Leipziger Straße;LEI 375 | Lenneplatz;LEN 376 | Lengefelder Straße;LFS 377 | Lene-Glatzer-Straße;LGL 378 | Ludwig-Hartmann-Straße;LHA 379 | Lipsiusstraße;LIP 380 | Liststraße;LIS 381 | Lise-Meitner-Straße;LME 382 | Lockwitz;LOC 383 | Louisenstraße;LOI 384 | Lohmener Straße;LOM 385 | Lößnitzstraße;LON 386 | Lohrmannstraße;LOR 387 | Lößnitzweg;LOW 388 | Ludwig-Renn-Allee;LRA 389 | Liebstädter Straße;LST 390 | Leutewitz;LTW 391 | Ludwigstraße;LUD 392 | Luga;LUG 393 | Marienallee;MAA 394 | Marienberger Straße;MAB 395 | Malerstraße;MAL 396 | Manitiusstraße;MAN 397 | Merianplatz;MAP 398 | Maxstraße;MAX 399 | Moritzburger Platz;MBP 400 | Messe, Gleisschleife;MEG 401 | Messering (Halle 1);MEH 402 | Mengsstraße;MEN 403 | Merbitzer Straße;MER 404 | MESSE DRESDEN;MES 405 | Meußlitzer Straße;MEU 406 | Mansfelder Straße;MFS 407 | Maxim-Gorki-Straße;MGS 408 | Mohorner Straße;MHS 409 | Mickten;MIC 410 | Michaelisstraße;MIS 411 | Markusfriedhof;MKF 412 | Mühlenstraße;MLS 413 | Moosleite;MLW 414 | Mockritz;MOC 415 | M.-Oeder-Straße;MOE 416 | Mockritzer Straße;MOK 417 | Mommsenstraße;MOM 418 | Martin-Opitz-Straße;MOP 419 | Mordgrundbrücke;MOR 420 | Mosenstraße;MOS 421 | Moritzburger Weg;MOW 422 | Malterstraße;MTR 423 | Mockethaler Straße;MTS 424 | Münzteichweg;MTW 425 | Mügelner Straße;MUG 426 | Münchner Platz;MUP 427 | Marie-Wittich-Straße;MWI 428 | Nätherstraße;NAE 429 | Neuer Annenfriedhof;NAF 430 | Neuostra;NEA 431 | Neubertstraße;NEU 432 | Niedergohlis Dorfstraße;NGD 433 | Niedergohlis Südstraße;NGS 434 | Alter Postweg;NIC 435 | Nickerner Weg;NIW 436 | Neuländer Straße;NLS 437 | Neustädter Markt;NMT 438 | Neunimptscher Straße;NNI 439 | Nordstraße;NOR 440 | Bahnhof Niedersedlitz;NSD 441 | Niedersedlitzer Platz;NSP 442 | Niedersedlitzer Straße;NST 443 | Niederseidewitzer Weg;NSW 444 | Nöthnitzer Straße;NTN 445 | Nürnberger Platz;NUP 446 | Niederwartha;NWA 447 | Niederwaldplatz;NWP 448 | Niederwaldstraße;NWS 449 | Oberauer Straße;OBE 450 | Ockerwitz;OCW 451 | Otto-Dix-Ring;ODX 452 | Oederaner Straße;OED 453 | Oehmestraße;OEH 454 | P+R Ostragehege;OGP 455 | Obergohlis;OGS 456 | Ockerwitzer Straße;OKW 457 | Oskar-Maune-Straße;OMA 458 | Omsewitz;OMS 459 | Otto-Pilz-Straße;OPI 460 | Oschatzer Straße;OSC 461 | Ob. Station Schwebebahn;OSS 462 | Overbeckstraße;OVE 463 | Palaisplatz;PAP 464 | Plauenscher Ring;PAR 465 | Prof.-Billroth-Straße;PBI 466 | Putbuser Weg;PBW 467 | Pennrich;PEN 468 | Pennricher Straße;PER 469 | Pferderennbahn;PFB 470 | Pfeifferhannsstraße;PFH 471 | Pfotenhauerstraße;PFO 472 | Prager Straße;PGS 473 | Proschhübelstraße;PHS 474 | Pillnitz;PIL 475 | Pirnaischer Platz;PIP 476 | Pillnitzer Platz;PLP 477 | Plauen, Rathaus;PLR 478 | Platanenstraße;PLT 479 | Permoserstraße;PMS 480 | Podemusstraße;POD 481 | Pohlandplatz;POH 482 | Postplatz;POS 483 | Pappritz;PPR 484 | Prellerstraße;PRE 485 | Kaufpark Nickern;PRL 486 | Prohlis;PRO 487 | Prof.-Ricker-Straße;PRS 488 | Pestalozziplatz;PST 489 | Plattleite;PTL 490 | Putjatinplatz;PTP 491 | Pulsnitzer Straße;PUL 492 | Querallee;QUE 493 | Quohrener Straße;QUO 494 | Räcknitzhöhe;RAC 495 | Rähnitzer Allee;RAL 496 | Rankestraße;RAN 497 | Rauensteinstraße;RAU 498 | Robert-Sterl-Straße;RBS 499 | Reichenhaller Straße;RCS 500 | Radeberger Straße;RDB 501 | Radeberger Straße Süd;RDS 502 | Regensburger Straße;REG 503 | Reichenbachstraße;REI 504 | Rennplatzstraße;REN 505 | Rethelstraße;RET 506 | Riegelplatz;RIE 507 | Rißweg;RIS 508 | Reitbahnstraße;RIT 509 | Rathaus Klotzsche;RKL 510 | Rosa-Luxemburg-Platz;RLP 511 | Rudolf-Leonhard-Straße;RLS 512 | Reineckeweg;RNW 513 | Rohrbahn;ROB 514 | Rochwitz, Bühlauer Straße;ROC 515 | Rossendorfer Straße;ROD 516 | Rosenstraße;ROS 517 | Rottwerndorfer Straße;ROT 518 | Rathaus Pillnitz;RPI 519 | Plauen, Rathaus;RPL 520 | Rathaus Pieschen;RPN 521 | Roseggerstraße;RSG 522 | Reisstraße;RSS 523 | Rathaus Leuben;RTL 524 | Rathausstraße;RTS 525 | Rüdesheimer Straße;RUD 526 | Rubensweg;RUW 527 | Sachsenallee;SAA 528 | Saarstraße;SAR 529 | Saßnitzer Straße;SAS 530 | Saxoniastraße;SAX 531 | Schanzenstraße;SAZ 532 | Scharfenberger Straße;SBG 533 | Straßburger Platz;SBP 534 | Schule Gompitz;SCG 535 | Schweriner Straße;SCH 536 | Schaufußstraße;SCU 537 | Südstraße;SDS 538 | Seidnitzcenter;SEC 539 | Seidnitzer Weg;SEI 540 | Semmelweisstraße;SEM 541 | Seewiesenweg;SEW 542 | Stuttgarter Straße;SGS 543 | Stadtgutstraße;SGU 544 | Sagarder Weg;SGW 545 | Saalhausener Straße;SHA 546 | Schwimmhalle Bühlau;SHB 547 | Schwimmhalle Freiberger Pl.;SHF 548 | Schwimmhalle Klotzsche;SHK 549 | Schillerstraße;SHL 550 | Schillerplatz;SIP 551 | Schlehenstraße;SLE 552 | Schillingstraße;SLI 553 | Selliner Straße;SLS 554 | Schlüterstraße;SLT 555 | Staats- und Unibibliothek;SLUB 556 | Schönaer Straße;SNA 557 | Schneebergstraße;SNS 558 | Sosaer Straße;SOS 559 | Sobrigauer Weg;SOW 560 | St.-Pauli-Friedhof;SPF 561 | Spitzhausstraße;SPH 562 | Spitzwegstraße;SPI 563 | Spenerstraße;SPS 564 | Sörnewitzer Straße;SRN 565 | Struppener Straße;SRU 566 | Staffelsteinstraße;SSS 567 | Scharfensteinstraße;SST 568 | Stralsunder Straße;SSU 569 | Steglichstraße;STE 570 | Stauffenbergallee;STF 571 | Straße des 17.Juni;STJ 572 | Striesener Straße;STN 573 | Strehlener Platz;STP 574 | Stephanstraße;STS 575 | Staats- und Unibibliothek;SUB 576 | Südhöhe;SUE 577 | Schunckstraße;SUK 578 | Schulstraße;SUL 579 | Schurichtstraße;SUR 580 | Südvorstadt;SVS 581 | Schiffswerft Laubegast;SWL 582 | Synagoge;SYN 583 | Schweizer Straße;SZS 584 | Tannenstraße;TAN 585 | Trachauer Straße;TAS 586 | Taubenberg;TAU 587 | Tatzberg;TBG 588 | Tübinger Straße;TBS 589 | Theilestraße;TEI 590 | Tharandter Straße;THA 591 | Theaterplatz;THE 592 | Thäterstraße;THS 593 | Tiergartenstraße;TIE 594 | Trinitatisplatz;TIP 595 | Thomas-Mann-Straße;TMS 596 | Tännichtstraße;TNS 597 | Tornaer Straße;TON 598 | Troppauer Straße;TPS 599 | Betriebshof Trachenberge;TRB 600 | Tronitzer Straße;TRO 601 | Trachenberger Platz;TRP 602 | Trattendorfer Straße;TRS 603 | TU Dresden;TU 604 | Technische Universität;TUD 605 | Uhlandstraße;UHL 606 | Universitätsklinikum;UKD 607 | Urnenhain;UNH 608 | Urnenstraße;URN 609 | Veilchenstraße;VEI 610 | Van-Gogh-Straße;VGO 611 | Vollmarstraße;VOL 612 | Vorwerkstraße;VOW 613 | Wächterstraße;WAC 614 | Wasaplatz;WAS 615 | Wilhelm-Busch-Straße Ost;WBO 616 | Würzburger Straße;WBR 617 | Wilhelm-Busch-Straße;WBU 618 | Wachbergstraße;WCH 619 | Weidentalstraße;WDS 620 | Webergasse;WEB 621 | Westendstraße;WEE 622 | Werftstraße;WEF 623 | Weißig (Einkaufszentrum);WEI 624 | Wernerstraße;WER 625 | Wägnerstraße;WGS 626 | Wieckestraße;WIE 627 | Wilschdorf Industriegebiet;WIG 628 | Wilhelminenstraße;WIL 629 | Wilder Mann;WIM 630 | Winterbergstraße;WIN 631 | Wilischstraße;WIS 632 | Wittenberger Straße;WIT 633 | Wilschdorfer Landstraße;WLS 634 | Wilder-Mann-Straße;WMS 635 | Windmühlenweg;WMW 636 | Wölfnitz;WOL 637 | Wölfnitzer Ring;WOR 638 | Wostra;WOS 639 | Weberplatz;WPL 640 | Walpurgisstraße;WPS 641 | Weißdornstraße;WSD 642 | Washingtonstraße;WSH 643 | Waldschlößchen;WSO 644 | Weißeritzstraße;WSR 645 | Waldschlößchenstraße;WSS 646 | Waltherstraße;WTH 647 | Waldteichstraße;WTS 648 | Wurzener Straße;WUZ 649 | Wasserwerk Tolkewitz;WWT 650 | Weixdorf;WXD 651 | Zeithainer Straße;ZEH 652 | Zur Elbinsel;ZEI 653 | Zellescher Weg;ZEL 654 | Zschonergrundmühle;ZGM 655 | Zachengrundring;ZGR 656 | Zum Hutbergblick;ZHB 657 | Zur Neuen Brücke;ZNB 658 | Zinnowitzer Straße;ZNW 659 | Zoo;ZOO 660 | Zur Steinhöhe;ZSH 661 | Zschonergrundstraße;ZSO 662 | Zschierener Straße;ZSS 663 | Zschertnitz;ZTZ 664 | Zum Windkanal;ZUW 665 | Zweibrüderweg;ZWE 666 | Zwinglistraße;ZWI 667 | Zwickauer Straße;ZWU 668 | Zschertnitzer Straße;ZZN 669 | -------------------------------------------------------------------------------- /kuerzel/kuerzel_umland.csv: -------------------------------------------------------------------------------- 1 | Bonnewitz, Bonnewitz;BON 2 | Borthen, Borthen;BTN 3 | An der Triebe, Boxdorf (Moritzburg);ADT 4 | Am Grunde, Boxdorf (Moritzburg);AGD 5 | Am Weiher, Boxdorf (Moritzburg);AMW 6 | Baumwiese, Boxdorf (Moritzburg);BAW 7 | Bebelplatz, Boxdorf (Moritzburg);BEB 8 | Schule Boxdorf, Boxdorf (Moritzburg);BSC 9 | Ernst-Wagner-Straße, Boxdorf (Moritzburg);EWA 10 | Feuerwehr Boxdorf, Boxdorf (Moritzburg);FBX 11 | Querweg, Boxdorf (Moritzburg);QEW 12 | Auerstraße, Coswig (b Dresden);AUE 13 | Coswig Zentrum/Börse, Coswig (b Dresden);CWB 14 | Salzstraße VGM, Coswig (b Dresden);EVSA 15 | Radebeuler Straße, Coswig (b Dresden);RAD 16 | Rathaus Coswig, Coswig (b Dresden);RCW 17 | Steinbacher Weg, Coswig (b Dresden);SBW 18 | Salzstraße, Coswig (b Dresden);SLZ 19 | Am Dathepark, Freital;ADA 20 | Am Windberg, Freital;AWI 21 | Busbahnhof Deuben, Freital;BBD 22 | Burgker Straße, Freital;BUR 23 | Meßweg, Freital;MEW 24 | Neumarkt, Freital;NEM 25 | Platz des Friedens, Freital;PDF 26 | Burgk, Schule, Freital;SCB 27 | Schachtstraße, Freital;SCS 28 | Schule Kleinnaundorf, Freital;SKN 29 | Steigerstraße, Freital;STG 30 | Windbergallee, Freital;AWI 31 | Burgk, Zschiedge, Freital;ZSC 32 | Gombsen, Gombsen;GBS 33 | Neugombsen, Gombsen;NGO 34 | Rudolf-Walther-Straße, Gompitz;RWS 35 | Autobahnmeisterei, Goppeln;ABM 36 | Goppeln, Goppeln;GOP 37 | Borsbergstraße, Graupa;BOB 38 | Bonnewitzer Straße, Graupa;BWS 39 | Tschaikowskiplatz, Graupa;GRA 40 | Tiefer Grund, Graupa;TGR 41 | Dresdner Straße, Heidenau;DRD 42 | Bf. Heidenau, Heidenau;HDN 43 | K.-Kollwitz-Straße, Heidenau;KKS 44 | Haußmannplatz, Kreischa;HAP 45 | Klinikum Kreischa, Kreischa;KLK 46 | Kreischa, Kreischa;KRE 47 | Dorfplatz Pesterwitz, Pesterwitz;DFP 48 | Obere Straße, Pesterwitz;OBS 49 | Pesterwitz, Pesterwitz;PES 50 | Wurgwitzer Straße, Pesterwitz;WWS 51 | Zum Weinberg, Pesterwitz;ZWB 52 | Altserkowitz, Radebeul;ASE 53 | Bergblick, Radebeul;BBL 54 | Borstraße, Radebeul;BOR 55 | Dr.-Külz-Straße, Radebeul;DKU 56 | Eduard-Bilz-Straße, Radebeul;EBI 57 | Eisenbahnbrücke, Radebeul;EIS 58 | Fichtestraße, Radebeul;FIS 59 | Flemmingstraße, Radebeul;FLM 60 | Forststraße, Radebeul;FOR 61 | Fritz-Schulze-Straße, Radebeul;FSR 62 | Gutenbergstraße, Radebeul;GBG 63 | Gerhart-Hauptmann-Straße, Radebeul;GHA 64 | Gradsteg, Radebeul;GST 65 | Hauptstraße, Radebeul;HPT 66 | Hospiz, Radebeul;HRD 67 | Hp. Radebeul-Weintraube, Radebeul;HWT 68 | Johannisbergstraße, Radebeul;JHA 69 | Kaufland, Radebeul;KLR 70 | Landesbühnen Sachsen, Radebeul;LDB 71 | Moritzburger Straße, Radebeul;MOG 72 | Nizzastraße, Radebeul;NIZ 73 | Radebeul Ost, Radebeul;RBO 74 | Radebeul West, Radebeul;RBW 75 | Reichsstraße, Radebeul;RES 76 | Schildenstraße, Radebeul;SIL 77 | Schloß Wackerbarth, Radebeul;SWA 78 | Wasastraße, Radebeul;WAA 79 | Zillerstraße, Radebeul;ZIL 80 | Zinzendorfstraße, Radebeul;ZIZ 81 | Röhrsdorf, Röhrsdorf (b Pirna);ROE 82 | Fußweg nach Sobrigen, Sobrigau;FSO 83 | Hummelmühle, Sobrigau;HUM 84 | Sechserhaus, Sobrigau;SHS 85 | Florian-Geyer-Weg, Weinböhla;EFYW 86 | Haltepunkt Weinböhla, Weinböhla;EHWB 87 | Weinböhla Kirchplatz, Weinböhla;EWBK 88 | Gellertstraße, Weinböhla;GES 89 | Köhlerstraße, Weinböhla;KOL 90 | Weinböhla, Weinböhla;WBL 91 | -------------------------------------------------------------------------------- /stations/csv2geojson.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import json 3 | 4 | stations = [] 5 | 6 | with open('stations.csv') as csv_file: 7 | reader = csv.reader(csv_file, delimiter=';') 8 | for row in reader: 9 | stations.append(row) 10 | 11 | # [['Nummer', 'Name mit Ort', 'Name ohne Ort', 'Ort', 'Tarifzone 1 ', 'Tarifzone 2', 'Tarifzone 3', 'WGS84_X', 'WGS84_Y'], 12 | # ['de:14612:1', 'Dresden Bahnhof Mitte', 'Bahnhof Mitte', 'Dresden', '0100', '', '', '13,723395', '51,055642'], 13 | 14 | geostations = [] 15 | for station in stations[1:]: 16 | feature = { 17 | "type": "Feature", 18 | "properties": { 19 | "number": station[0], 20 | "nameWithCity": station[1], 21 | "name": station[2], 22 | "city": station[3], 23 | "tariffZone1": station[4], 24 | "tariffZone2": station[5], 25 | "tariffZone3": station[6] 26 | }, 27 | "geometry": { 28 | "type": "Point", 29 | "coordinates": [ 30 | float(station[7].replace(',', '.')), 31 | float(station[8].replace(',', '.')) 32 | ] 33 | } 34 | } 35 | geostations.append(feature) 36 | 37 | geojson = { 38 | "type": "FeatureCollection", 39 | "features": geostations 40 | } 41 | 42 | with open('stations.json', 'w') as geojson_file: 43 | geojson_file.write(json.dumps(geojson)) --------------------------------------------------------------------------------