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-薩