用于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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
未检测到“空格”的java ASCII码   音频如何在Java中设置SourceDataLine的音量   java MyBatissSpringBoot无法使用作为bean注入的数据源   Java字谜递归列表<List<String>>仅存储空列表<Strings>   java显示30px高的JPanel,然后用minecraft填充剩余空间   java JOGL平滑度   Java:按完整与否对1d对象数组进行排序   arraylist仅当java结构不存在时才将对象添加到java结构中   无法初始化java渲染库在安卓 studio 4.1.1上出现错误   java SpringBoot ClassCastException   java解析文本文件,基于字数   java=运算符引发异常   java使点可拖动并存储新坐标JavaFx   JavaWebSphereApplicationServer:EJB模块和JMS路由器