获取并显示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() 是必需的,如果没有安装,它将无法运行。通过使用 termcolor 和 tabulate 包,命令行输出是通过使用这些包创建的,从而节省了大量需要自己编写的代码。
系统要求(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 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6979544724071b30fa6b13b1ab712054b612a8a461df01101ea7ddde362bc788 |
|
MD5 | b2c25fa4086ffeddc1dc3b139d58406f |
|
BLAKE2b-256 | 101770700121fa25791a7582197567539ea10e59963e4f8ba15adc0e55b9639d |