A wrapper around the DB Website API for querying train connections.
Project description
🚆 weiche
This is an unofficial library wrapper around the API of the Deutsche Bahn (DB) website for identifying connections. It returns realtime, live data. If you do not need this in your project I strongly recommend not to use this API as it might break any moment if DB changes the API for getting station and train connections.
It has a API compatibility layer to the
schiene package for
easy drop-in replacement as
schiene no longer
works.
Requirements
- Python 3.10 and above
- requests package for the synchronous API and Schiene wrapper
- aiohttp for the asynchronous API
Features
- Get connections between two stations
- Search stations by name
- Get station information
Setup
$ python -m venv /path/to/venv $ /path/to/venv/bin/python -m pip install weiche[sync,async,schiene]
Usage
Use the synchronous API
from datetime import datetime
from weiche import SynchronousApi
api = SynchronousApi()
amsterdam_query = api.search_locations('Amsterdam', limit=1)
amsterdam = amsterdam_query[0]
munich_query = api.search_locations('München Hbf', limit=1)
munich = munich_query[0]
api.search_connections(
at=datetime(2025,5,10,18,0,0),
from_location=munich.id,
to_location=amsterdam.id,
limit=10,
)
Response from Synchronous API
The return format is an object which can also be found in the objects.py file.
Look for the Connection class and see the API definition there.
Use the asynchronous API
import asyncio
from datetime import datetime
from weiche import AsynchronousApi
async def search():
api = AsynchronousApi()
amsterdam_query = await api.search_locations('Amsterdam', limit=1)
amsterdam = amsterdam_query[0]
munich_query = await api.search_locations('München Hbf', limit=1)
munich = munich_query[0]
return await api.search_connections(
at=datetime(2025,5,10,18,0,0),
from_location=munich.id,
to_location=amsterdam.id,
limit=10,
)
asyncio.get_event_loop().run_until_complete(search())
Response from Asynchronous API
The return format is an object which can also be found in the objects.py file.
Look for the Connection class and see the API definition there.
Use the schiene compatibility layer
from weiche import Schiene
Schiene().connections('Mannheim HbF', 'Stuttgart HbF')
Response from Schiene Layer
[{'arrival': '15:47',
'canceled': False,
'departure': '14:30',
'details': '',
'price': 55.0,
'products': ['ICE'],
'time': '01:16',
'transfers': 0,
'ontime': True,
'delay': None},
{'arrival': '16:21',
'canceled': False,
'departure': '14:38',
'details': '',
'price': 50.99,
'products': ['SBAHN', 'ICE'],
'time': '01:42',
'transfers': 1,
'ontime': True,
'delay': None},
{'arrival': '16:25',
'canceled': False,
'departure': '14:46',
'details': '',
'price': 50.99,
'products': ['ICE', 'REGIONAL'],
'time': '01:23',
'transfers': 1,
'ontime': True,
'delay': None},
{'arrival': '16:45',
'canceled': False,
'departure': '15:31',
'details': '',
'price': 55.0,
'products': ['ICE'],
'time': '01:14',
'transfers': 0,
'ontime': True,
'delay': None},
{'arrival': '17:27',
'canceled': False,
'departure': '15:34',
'details': '',
'price': 55.0,
'products': ['ICE', 'REGIONAL'],
'time': '01:53',
'transfers': 1,
'ontime': True,
'delay': None},
{'arrival': '17:15',
'canceled': False,
'departure': '15:35',
'details': '',
'price': 21.8,
'products': ['REGIONAL', 'REGIONAL'],
'time': '01:40',
'transfers': 1,
'ontime': True,
'delay': None},
{'arrival': '17:44',
'canceled': False,
'departure': '15:35',
'details': '',
'price': 21.8,
'products': ['REGIONAL', 'REGIONAL'],
'time': '02:09',
'transfers': 1,
'ontime': True,
'delay': None},
{'arrival': '17:33',
'canceled': False,
'departure': '15:36',
'details': '',
'price': 24.99,
'products': ['SBAHN', 'ICE'],
'time': '02:06',
'transfers': 1,
'ontime': False,
'delay': {'delay_departure': 0, 'delay_arrival': 9}},
{'arrival': '18:20',
'canceled': False,
'departure': '16:38',
'details': '',
'price': 47.99,
'products': ['SBAHN', 'ICE'],
'time': '01:42',
'transfers': 1,
'ontime': True,
'delay': None},
{'arrival': '18:24',
'canceled': False,
'departure': '16:46',
'details': '',
'price': 50.99,
'products': ['ICE', 'REGIONAL'],
'time': '01:38',
'transfers': 1,
'ontime': True,
'delay': None}]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file weiche-0.9.1.dev1.tar.gz.
File metadata
- Download URL: weiche-0.9.1.dev1.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a10ea66f5d81d074771c7b59b2782d5ba76b23300fbbcc5782bb9f6f62ee2ef
|
|
| MD5 |
b12fa2f0baf16b65129924fbdcdd9380
|
|
| BLAKE2b-256 |
93000ee592ad83dd012d84ec871506c969e35f58ee0f96327b82be3b36027d50
|