跳转到主要内容

获取并显示VBB/BVG公共交通的实时发车时间

项目描述

这个小型工具会获取并显示德国柏林和勃兰登堡的单个车站的VBB/BVG公共交通线路的实时发车时间。在这里,VBB是“柏林-勃兰登堡交通联盟”而BVG是“柏林交通局”。

这个工具部分是为了作为一个教学示例(尽管是一个玩具示例)来使用Pandas并生成一些输出,以便输入到基于Web的控制台,例如使用Dashing创建的(待完成)。

示例输出

以下是在命令行上“Möckernbrücke”的示例输出(包括可选的--header

$ vbbvg --stop Möckernbrücke --header
Now: 14:06:04
Stop-Name: U Möckernbrücke (Berlin)
Stop-ID: 9017104

Wait    Departure    Line    Destination
------  -----------  ------  ----------------------------
00:48   14:07        U1      U Uhlandstr. (Berlin)
02:48   14:09        U7      S+U Rathaus Spandau (Berlin)
02:48   14:09        U1      S+U Warschauer Str. (Berlin)
04:48   14:11        U7      U Rudow (Berlin)

这显示了从一站的等待和发车时间(分别以MM:SS和HH:MM格式显示),仅限于所有最早独特的线路目的地列的组合。这通常是作为典型用例,在“离开办公室前”感兴趣的唯一信息。这个工具会过滤这些组合,计算等待时间,并将它们作为输出中的第一列插入。还有许多其他命令行选项,您可以通过键入python vbbvg -h来了解更多。

安装和测试

您可以通过克隆存储库并使用pip安装它。安装后,您将通过程序或通过CLI访问系统范围(或您的虚拟环境)的vbbvg

pip install -e .

requirements.txt文件中有一个依赖项列表(有关更多信息,请阅读下一节),您可以使用命令pip install -r requirements.txt安装它们。

要运行这个小“测试套件”,请下载并解压此存储库或克隆它,然后在解压的归档中运行命令 python setup.py test。当然,这需要可用的 pytest 包(虽然未列在要求中,但使用 pip install pytest 很容易安装)。

依赖关系

这个工具部分是为了作为一个使用 Pandas 极大简化与表格(DataFrame 对象)工作所需代码的教学示例而开发的。《BeautifulSoup4》和《html5lib》包是可选的依赖关系,但对于 pandas.read_html() 是必需的,如果没有安装,它将无法运行。通过使用 termcolortabulate 包,命令行输出是通过使用这些包创建的,从而节省了大量需要自己编写的代码。

系统要求(Linux)

正如一位 Linux 用户指出的:如果您使用的是 Linux,您可能需要手动安装以下包

sudo apt-get install libxml2-dev libxslt1-dev

如果在运行 pip 时遇到 /usr/bin/ld: cannot find -lz 错误,请在运行 pip 之前安装此包

sudo apt-get install lib32z1-dev

实现

由于 VBB/BVG 没有实时数据访问的 API,因此此数据是通过从 http://mobil.bvg.de 上的网络应用程序抓取(使用 Pandas 抓取,是的!)获取的。您可以使用此页面进行 手动测试(英文)。在那里,作为真实的人,您可以输入目的地名称的一部分,并得到一个匹配的目的地列表以供选择,然后您可以看到您感兴趣的结果表。

为了避免多级抓取,加快速度,并增加一些刺激,使用了一个现有的“开放数据” VBB 数据库 的一部分,该数据库在 CC-BY 3.0 许可 下发布,用于访问 VBB/BVG 公共交通网络的站点名称和 ID(在此处命名为 vbbvg_stops.csv 的简单 CSV 文件)。

结果表以各种格式作为“真实”表格在命令行上输出,下面是使用示例。

用法

命令行

您可以使用 --test--stop <NAME_ID> 选项运行一些示例命令行调用,例如针对 Möckernbrücke 站点

$ vbbvg --test --stop Möckernbrücke

程序化

要程序化使用的主要函数是 vbbvg.get_next_departures(),它返回一个 Pandas DataFrame 对象,您可以将其转换为几乎任何您想要的内容。请参阅以下示例

获取柏林主站的 S7 和 S75 的出发时间

In [1]: import vbbvg

In [2]: df = vbbvg.get_next_departures('9003201', filter_line='S7')

In [3]: df.columns
Out[3]: Index([u'Wait', u'Departure', u'Line', u'Destination'], dtype='object')

In [4]: list(df.to_records())
Out[4]:
[(1, '00:00', u'10:01', u'S75 (Gl. 16)', u'S Westkreuz (Berlin)'),
 (4, '01:10', u'10:03', u'S75 (Gl. 15)', u'S Wartenberg (Berlin)'),
 (14, '04:10', u'10:06', u'S7 (Gl. 16)', u'S Potsdam Hauptbahnhof'),
 (24, '07:10', u'10:09', u'S7 (Gl. 15)', u'S Ahrensfelde Bhf (Berlin)'),
 (62, '21:10', u'10:23', u'S75 (Gl. 15)', u'S Ostbahnhof (Berlin)')]

In [5]: print(df.to_csv())
,Wait,Departure,Line,Destination
1,00:00,10:01,S75 (Gl. 16),S Westkreuz (Berlin)
4,01:10,10:03,S75 (Gl. 15),S Wartenberg (Berlin)
14,04:10,10:06,S7 (Gl. 16),S Potsdam Hauptbahnhof
24,07:10,10:09,S7 (Gl. 15),S Ahrensfelde Bhf (Berlin)
62,21:10,10:23,S75 (Gl. 15),S Ostbahnhof (Berlin)

仪表板

当在某种基于 Web 的仪表板(如由 Dashing 创建的仪表板)中使用此工具时(这是最初预期的用例),应使用站点的 ID 以确保在 VBB/BVG 公共交通网络上提供一个唯一的站点。您可以通过运行带有 --header 选项的测试查询来找到这些 ID。

待办事项

  • 提及 http://fahrinfo.vbb.de/bin/stboard.exe/en?(提供一些额外的过滤功能)

  • 在上面的用法部分中添加更多示例

  • 使代码 多语言,不仅可以在 Python 2.7 上运行,还可以在 3.4/3.5 上运行

  • 测试选项以过滤特定线路类型,如 S-Bahn(‘S.*’)或单行(‘U7’)

  • 在 dhasing.io 之类的真实仪表板中使用(原始目的!)

  • 在整个工具中忽略所有停车站名称的情况

  • 存储最后显示的停车站(在 ~/.vvbvg 或类似位置),在没有任何参数或选项调用时重用

  • 在程序化使用时,从结果表中移除索引数字(最左列)

由于时间限制,对于上述任何一项的帮助都受欢迎。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源代码分发

vbbvg-0.0.1.tar.gz (274.1 kB 查看散列值)

上传时间 源代码

由以下组织支持