CFR SA 是罗马尼亚国家铁路基础设施管理公司,提供在线实时信息服务(基于具有回发视图状态发送和事件验证功能的 ASPX 表格),用于获取有关出发、到达、火车到达车站的站台以及行程延误的近实时数据和更新。当时,整个系统缺乏 API,甚至缺乏一个适合最终用户的、易于使用且易于查找的界面。
这个基于 Flask 的 API 根据 URL API 端点中的请求从 CFR Web 应用程序中提取数据,并输出可重用的 JSON 数据。该程序从 ASP.Net 的 __VIEWSTATE 变量中抓取所有信息。
您需要在系统上安装 Python 3.6+ 和 Pipenv。
$ apt安装python3 python3-pip $ pip3 安装 pipelinev
克隆存储库并安装模块依赖项:
$ git 克隆 https://github.com/BodoMinea/cfr-iris-scraper.git $ cd CFR-虹膜-刮刀 $ Pipenv 安装
按照 Flask 文档中的指定运行 API 服务器。
$ pipelinenv 运行烧瓶运行
您可能需要编辑 Pipfile 以匹配您本地的 Python 版本才能成功安装
python_version = "3.6.9"
Flask 默认情况下仅监听本地请求。建议保持这样并为大型部署安装反向代理,但要从 LAN 访问测试机器,请运行:
$ Pipenv 运行烧瓶运行 --host 0.0.0.0
这将绑定到所有可用的接口。
现在你可以将浏览器指向 http://localhost:5000/station/ID 来看看它的神奇之处。 ID是唯一的站单元代码; http://localhost:5000/get-stations/ 端点提供了一个列表。
例如,要获取包含布加勒斯特北火车站(我国主要且最大的车站)当前出发/到达板和延误信息的 JSON 对象,您可以将浏览器或 URL 变量指向您正在使用的任何应用程序数据发送至:http://localhost:5000/station/10017。
就像获取某个火车站当前的车次一样,您可以获取某趟车次的当前信息。 CFR 提供诸如延误、火车经过的最后一站(延误 7 分钟)、下一站和其他有用信息等信息。
只需将浏览器指向 http://localhost:5000/train/ID,其中 ID 是火车的唯一编号。您可以从车站信息源获取这些 ID。例如,您可以通过访问 http://localhost:5000/train/1651 检索从布加勒斯特北到苏恰瓦北的火车 IR 1651 的信息(截至 2017 年 4 月有效)。
API 中还包含一个 Web 客户端。前往 http://localhost:5000/static/station.html、http://localhost:5000/static/train.html 或 http://localhost:5000/static/train.html?tren=9351 (预定义列车号)来查看它。
虽然官方应用程序本身可以工作,但看起来可能不太好,但罗马尼亚开发人员尽最大努力创建了一些非常酷的开源项目以及与交通和基础设施相关的在线服务。请参阅此实时地图、GTFS 转换器专有的、此旅行规划器等。
使用此 API 和其他公共资源,您可以创建自己风格的车站出发板、延误通知服务、外观酷炫的移动应用程序,同时学习如何编程和使用结构化数据?
这是一个完全开源的项目,基于开源模块和库构建,并根据 Do What the Fuck You Want to Public License Version 2 获得许可。
此外,您要对您使用它所做的事情承担全部责任 - 请记住,CFR SA 和 InfoFer(构建其软件的国有铁路 IT 公司)并不是特别透明或对第三方开发人员友好。如果您进行大规模抓取或开发一些可公开访问的服务,这些服务会从同一台服务器生成大量流量,或者出于各种原因将其数据克隆到数据库,那么您可能会遇到一些麻烦,就像这位热衷者在制作网络时所做的那样行程规划器使用其网站上的 CFR Calatori 时间表。
但对于修修补补、摆弄和处理实时数据,如果错误不是来自 CFR 本身,显然不会让任何人感到困惑,你应该没问题,并且站在法律的正确一边,至少从我的经验来看是这样。也许他们会在某个时候提供自己的 API,并提供适当的规则和许可。
请求未经身份验证,也没有实施速率限制,因此它根本不准备在网络上公开。
这并不是特别快,因为 CFR 网页也不是特别快。您可能需要后台请求和缓存。发出初始请求后,它将等待 8 秒后再解析数据。如果网页上尚未显示数据,则会再等待 20 秒。此后,API 将输出一个空白对象 - 这可能意味着抓取的 Web 服务已关闭,响应速度非常慢,或者当前确实没有在该特定车站停靠的行程(在夜间或在小站,例如例子)。已修复:如果 API 关闭,您将收到 5xx 错误状态。
这是抓取和解析,因此对 CFR 网页的任何结构更新(尽管在不久的将来不太可能发生)都可能会破坏这一点。
火车信息源不提供有关火车延误的详细信息以及 Infofer 随其服务提供的其他有用信息。这将在未来更新。修复:所有公共 IRIS 信息均在此 API 上输出。
CFR SA 通过 Informatica Feroviara 提供的公共信息 Web 服务:http://appiris.infofer.ro/SosPlcRO.aspx、http://appiris.infofer.ro/MyTrainRO.aspx、http://appiris.infofer.ro /MersTrenRo.aspx。这是来自基础设施管理部门的信息,而不是特定客运航空公司的信息。官方乘客时间表可在此处找到:http://mersultrenurilor.infofer.ro,以及每年年底更新时间表的静态 XML 数据源:http://data.gov.ro/organization/sc-informatica-feroviara-萨