用于sbb api的非官方python包装器。
pySBB的Python项目详细描述
Pysbb
这是sbbAPI的非官方python包装器。SBB代表“schweizerische bundes bahnen”(瑞士联邦运输)。
安装
pip3 install pySBB
用法
这个包允许您轻松访问sbb api。使用方法如下:
获取连接
在两个站点之间建立连接非常简单:
import pySBB
connections = pySBB.get_connections("Zürich", "Bern")
for c in connections:
print(c)
示例输出:
Zürich HB (18:32, Plat. 32) -> Bern (19:28, Plat. 32) | 56min
Zürich HB (19:02, Plat. 31) -> Bern (19:58, Plat. 31) | 56min
Zürich HB (19:32, Plat. 32) -> Bern (20:28, Plat. 32) | 56min
Zürich HB (20:02, Plat. 31) -> Bern (20:58, Plat. 31) | 56min
其他参数(请参见connections)了解更多信息:
- via:指定最多5个via位置。
- 日期:连接日期,格式为yyyy-mm-dd
- 时间:连接时间,格式为hh:mm
- is arrival time:默认为false,如果设置为true,则传递的日期和时间是到达时间
- 运输:运输方式;火车、电车、轮船、公共汽车、索道中的一种或多种
- 限制:1-16。指定要返回的连接数。如果多个连接同时断开,则将其计为1。
- 页码:0-3。允许对连接进行分页。基于零,所以第一页是0,第二页是1,第三页是2,依此类推。
- 直接:默认为false,如果设置为true,则只允许直接连接
- Sleeper:默认为false,如果设置为true,则只允许直接连接
- couchette:默认为false,如果设置为true,则只允许包含couchettes的夜间列车,表示direct=true
- bike:默认为false,如果设置为true,则只允许运输自行车的列车
- 可达性:可能的值包括独立登机、辅助登机和高级通知
获取位置
API允许您查找位置,如火车站、地址和其他兴趣点(如钟楼或中国花园)
import pySBB
locations = pySBB.get_locations(query="Lidostrasse 5 Luzern")
for l in locations:
print(l)
示例输出:
Luzern, Lidostr. 5
Verkehrshaus der Schweiz, Luzern, Lidostr. 5
Restaurant Piccard im Verkehrshaus der Schweiz, Luzern, Lidostr. 5
...
更多参数(请参见locations了解更多信息:
- 查询:指定要搜索的位置名
- X:纬度
- Y:经度
- 类型:只有查询参数。指定位置类型,可能的类型有:
- 全部(默认):查找所有类型的位置
- 车站:查找车站(如火车站、汽车站)
- POI:查找兴趣点(如钟楼、中国花园)
- 地址:查找地址(如苏黎世Bahnhofstrasse 33)
获取站牌
站牌是可以在火车站看到的大蓝板。这些也可以通过api获得。
import pySBB
entries = pySBB.get_stationboard("Lugano")
for e in entries:
print(e)
示例输出:
Lugano (18:51, Plat. 2) -> Chiasso
Lugano (18:55, Plat. 4) -> Bellinzona
Lugano (19:05, Plat. 2) -> Chiasso
Lugano (19:22, Plat. 2) -> Monza
Lugano (19:25, Plat. 4) -> Bellinzona
...
其他参数(请参见stationboard)了解更多信息:
- id:返回车站的id。覆盖到桩号参数。
- 限制:要返回的离开连接数。
- 运输:运输方式;火车、电车、轮船、公共汽车、索道中的一种或多种
- 日期:离开连接的日期,格式为yyyy-mm-dd
- 时间:离开连接的时间,格式为hh:mm
- 类型:出发(默认)或到达
对象
这些对象与api使用的对象相同,它们被记录在here
唯一的区别是,任何包含时间或持续时间的字符串都已转换为datetime对象。
有时,它还可以帮助查看api返回的未处理数据,以了解类的结构。未处理的数据存储在_data
参数中的每个对象中,可以这样访问(我还使用json模块将字典格式化成缩进格式)
import pySBB
import json
entry = pySBB.get_stationboard("Lugano", limit=1)[0]
print(json.dumps(entry._data, indent=1))
更多示例
获取所有中转站
以下代码允许您查看给定连接的所有传输站
import pySBB
connection = pySBB.get_connections("Mauraz", "Amriswil", limit=1)[0]
print(connection)
for section in connection.sections:
print(" {}".format(section))
Mauraz (11:48) -> Amriswil (16:05, Plat. 33) | 4h 17min
Mauraz (11:48) -> Pampigny-Sévery (12:04)
Pampigny-Sévery (12:04) -> L'Isle (12:13)
L'Isle (12:13) -> L'Isle, gare (12:15)
L'Isle, gare (12:15) -> Cossonay-Penthalaz, gare (12:35)
Cossonay-Penthalaz, gare (12:35) -> Cossonay-Penthalaz (12:37)
Cossonay-Penthalaz (12:37, Plat. 1) -> Yverdon-les-Bains (13:00, Plat. 1)
Yverdon-les-Bains (13:00, Plat. 1) -> Zürich HB (14:56, Plat. 13)
Zürich HB (14:56, Plat. 33) -> Amriswil (16:05, Plat. 2)
使用坐标获得通过的站点
下面的代码将把传递的所有站名打印在一起和它的坐标。
import pySBB
connection = pySBB.get_connections("Brugg", "Basel", limit=1)[0]
print(connection)
for section in connection.sections:
for passList in section.journey.passList:
station = passList.station
print(" {} {}".format(station.name, station.coordinate))
Brugg AG (11:41, Plat. 2) -> Basel SBB (12:24, Plat. 2) | 43min
Brugg AG (47.48085, 8.208829)
Frick (47.507341, 8.01309)
Rheinfelden (47.551208, 7.792162)
Basel SBB (47.547403, 7.589577)
进入第一个车站时,请进入所有后续车站
以下代码打印第一艘船在给定日期离开“Luzern Bahnhofquai”的所有站点:
import pySBB
entry = pySBB.get_stationboard("Luzern Bahnhofquai", transportations="ship", datetime="2019-10-10 12:00", limit=1)[0]
print(entry)
for passList in entry.passList:
print(" {}".format(passList))
Luzern Bahnhofquai (12:00, Plat. 1) -> Vitznau
Verkehrshaus-Lido (12:10)
Hertenstein (See) (12:30)
Weggis (12:40)
Vitznau (12:54)