db-vendo-client/readme.md

93 lines
6.6 KiB
Markdown
Raw Permalink Normal View History

2024-12-07 16:16:31 +00:00
# db-vendo-client
2016-06-22 01:39:04 +02:00
2025-01-20 20:30:58 +00:00
**A client for the new "vendo"/"movas" Deutsche Bahn APIs, a drop-in replacement for [hafas-client](https://github.com/public-transport/hafas-client/).**
2024-12-07 23:56:34 +00:00
![ISC-licensed](https://img.shields.io/github/license/public-transport/db-vendo-client.svg)
2020-04-18 17:15:46 +02:00
[![support Jannis via GitHub Sponsors](https://img.shields.io/badge/support%20Jannis-donate-fa7664.svg)](https://github.com/sponsors/derhuerst)
2016-06-22 01:39:04 +02:00
2025-02-11 21:16:23 +00:00
This is an early version. What works:
2025-01-03 11:39:55 +00:00
* `journeys()`, `refreshJourney()` including tickets
2025-01-14 22:16:09 +00:00
* `locations()`, `nearby()`,
2024-12-11 23:57:49 +00:00
* `departures()`, `arrivals()` boards
2024-12-18 02:02:05 +00:00
* `trip()`
2016-06-22 01:39:04 +02:00
2024-12-07 23:48:17 +00:00
What doesn't work (yet, see TODO's scattered around the code):
2024-12-11 23:57:49 +00:00
* `journeys()` details like scheduledDays, stop/station groups, some line details ...
2025-01-03 11:39:55 +00:00
* loadFactor and other details in boards
2025-02-11 21:16:23 +00:00
* certain stop details like products for `locations()` and geopositions and remarks for boards this can be remedied with `enrichStations` in the config (turned on by default), enriching location info with [db-hafas-stations](https://github.com/derhuerst/db-hafas-stations).
2025-01-03 11:39:55 +00:00
* some query options/filters (e.g. routingMode for journeys, direction for boards)
2025-01-08 23:02:57 +00:00
* all other endpoints (`tripsByName()`, `radar()`, `journeysFromTrip()`, `reachableFrom()`, `remarks()`, `lines()`, `station()`)
2017-11-13 00:38:09 +01:00
2025-01-03 11:39:55 +00:00
Depending on the configured profile, db-vendo-client will use multiple different DB APIs that offer varying functionality, so choose wisely:
2025-02-11 21:16:23 +00:00
| | `db` Profile | `dbnav` Profile | `dbweb` Profile
| ------------- | ------------- | ------------- | ------------- |
| no API key required | ✅ | ✅ | ✅ |
| max duration boards | 12h | 1h | 1h |
| remarks | not for boards | for boards only most important remarks | all remarks on boards and journeys |
| cancelled trips | contained with cancelled flag in journeys, not contained in boards | contained with cancelled flag | contained with cancelled flag |
| tickets | only for `refreshJourney()`, mutually exclusive with polylines | only for `refreshJourney()`, mutually exclusive with polylines | only for `refreshJourney()`, mutually exclusive with polylines |
| polylines | only for `refreshJourney()` (mutually exclusive with tickets) and for `trip()` (only for HAFAS trip ids) | only for `refreshJourney()/trip()`, mutually exclusive with tickets | only for `refreshJourney()/trip()`, mutually exclusive with tickets |
| trip ids used | HAFAS trip ids for journeys, RIS trip ids for boards (static on train splits?) | HAFAS trip ids | HAFAS trip ids |
| line.id/fahrtNr used | actual fahrtNr | actual fahrtNr for journeys, unreliable/route id for boards and `trip()` | unreliable/route id |
| adminCode/operator | ✅ | only for journeys | only operator |
| stopovers | not in boards | not in boards | ✅ |
| `stop()` | ✅ | ✅ | ❌ |
| assumed backend API stability | less stable | more stable | less stable |
| quotas | 60 requests per minute for journeys, unknown for boards (IPv4) | 60 requests per minute (IPv4) | ? (IPv6) |
2025-01-03 11:39:55 +00:00
2024-12-16 20:22:36 +00:00
Feel free to report anything that you stumble upon via Issues or create a PR :)
2024-12-07 23:48:17 +00:00
2025-01-14 22:16:09 +00:00
Also consult the **[documentation](docs/readme.md)**.
2016-06-22 01:39:04 +02:00
2024-12-07 16:16:31 +00:00
## Background
2025-01-20 20:30:58 +00:00
After DB has switched to the new "vendo"/"movas" platform for bahn.de and DB Navigator, the old [HAFAS](https://de.wikipedia.org/wiki/HAFAS) API (see [hafas-client](https://github.com/public-transport/hafas-client/)) seems now to have been shut off. This project aims to enable easy switching to the new APIs. However, not all information will be available from the new APIs.
2025-02-11 21:16:23 +00:00
Actually, db-vendo-client is a wrapper around multiple different APIs, currently the bahn.de API for `dbweb`, the DB Navigator API for the `dbnav` profile, and a combination of the DB Navigator API and the regio-guide RIS API for the `db` profile. See some [notes about the various new APIs at DB](docs/db-apis.md).
2024-12-10 17:57:56 +00:00
Strictly speaking, permission is necessary to use this library with the DB APIs.
2016-06-22 01:39:04 +02:00
## Usage
2025-01-08 18:35:13 +00:00
Use it as a dependency, e.g. just replacing [hafas-client](https://github.com/public-transport/hafas-client/):
```
npm i db-vendo-client
```
See an example in [api.js](api.js). It shows how you can use `db-vendo-client` together with [hafas-rest-api](https://github.com/public-transport/hafas-rest-api/) in order to run a [FPTF](https://github.com/public-transport/friendly-public-transport-format) API server. The [Dockerfile](Dockerfile) serves this API (using the `dbnav` profile):
2025-01-08 18:35:13 +00:00
```
docker run \
-e USER_AGENT=my-awesome-program \
-e DB_PROFILE=dbnav \
-p 3000:3000 \
ghcr.io/public-transport/db-vendo-client
2025-01-08 18:35:13 +00:00
```
2017-11-13 00:38:09 +01:00
2025-01-15 02:07:13 +00:00
You may want to generate a client for your programming language for this REST API using the [OpenAPI schema](docs/openapi.yaml) ([open in Swagger Editor](https://editor.swagger.io/?url=https://raw.githubusercontent.com/public-transport/db-vendo-client/refs/heads/main/docs/openapi.yaml)). Note
2025-01-20 20:30:58 +00:00
that this is to be seen more as a starting point for implementation, e.g. some profile-specific details like tickets are missing from this API definition.
2025-01-15 02:04:20 +00:00
2024-12-07 16:16:31 +00:00
There are [community-maintained TypeScript typings available as `@types/hafas-client`](https://www.npmjs.com/package/@types/hafas-client).
2025-01-20 20:30:58 +00:00
> [!IMPORTANT]
> Depending on your use case, it is very important that you employ caching, either with a simple [HTTP proxy cache](https://github.com/traines-source/time-space-train-planner/blob/master/deployments/nginx-cache.conf) in front of the REST API or by using [cached-hafas-client](https://github.com/public-transport/cached-hafas-client) (where, of course, you can just drop in a `db-vendo-client` instead of a `hafas-client` instance). Also see [db-rest](https://github.com/derhuerst/db-rest), which does this and some more plumbing.
## Related Projects
2024-12-07 16:16:31 +00:00
- [hafas-client](https://github.com/public-transport/hafas-client/) including further related projects
2024-12-07 23:56:34 +00:00
- [hafas-rest-api](https://github.com/public-transport/hafas-rest-api/) expose a hafas-client or db-vendo-client instance as a REST API
2024-12-07 16:16:31 +00:00
- [db-rest](https://github.com/derhuerst/db-rest/) for the legacy DB HAFAS endpoint
- [`*.transport.rest`](https://transport.rest/)  Public APIs wrapping some HAFAS endpoints.
2016-06-22 01:39:04 +02:00
## Contributing
2024-12-07 23:56:34 +00:00
If you **have a question**, **found a bug** or want to **propose a feature**, please [open an Issue](https://github.com/public-transport/db-vendo-client/issues).
2020-03-18 21:32:05 +01:00
2024-12-07 23:56:34 +00:00
This project needs help! Check the [list of "help wanted" Issues](https://github.com/public-transport/db-vendo-client/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).
If you're contributing code, please read the [contribution guidelines](contributing.md).