個人,我是火車的粉絲。他們是一個很好的,雖然慢,但是要繞過這個國家的方法。加拿大不是鐵路交通最佳候選人,但是,在海岸之間的相當大面積,然而,通過鐵路確實在溫莎和魁北克市之間運行了他們的走廊的日常火車服務。
不幸的是,旅行者鐵路必須在加拿大生產工業鐵軌,通常觸發延誤。在註意到一些火車有極為正常的延誤,似乎通過火車了解每個典型性能是有益的。通過不公開提供這些數據。
但是,他們確實提供了一些關於到達以及出發時間的數據。挖掘提供任何類型的瀏覽器所提供的數據,檢查借助於軌道站點,可以查詢超過預定/實際到達數據。結果是RaintStats.ca,及時的威盛的屏幕。在休息後加入我,當我完全恰好這一切的作品時,以及在獲得下一列火車票時,如何選擇冠軍。
獲取數據
通過確實為先前,當前以及第二天提供常規數據。這將讓我們開發一系列旅行數據,但是只有一定有一定的時間。幸運的是,我們可以終止Chrome的檢查員以及發現此GET請求:
http://reservia.viarail.ca/tsi/gettrainstatus.aspx?l=en&etsiccode=via& tirainnumber=87&departuredate=2015-12-01& arrivaldate=2015-12-01 &TrainInstanceate=2015-12-01 &TT=1449033500354.
這裡有幾個多汁參數。 TsitrainNumber無疑是我們正在尋找的火車號碼。離境是火車離開的日期,以及抵達的日期是它到達的時候。 TrainInstanceate同樣似乎將被設置為留下火車的日期。考慮到這一點,是時候跳入Python了,並且利用了驚人的請求庫來創建一些請求。
該數據由雙向Unicode文本組成,可以以不同的方式解釋或編譯而不是下面的顯示。要查看,請在露出隱藏Unicode字符的編輯器中打開數據。
發現有關雙向Unicode字符的更多信息
顯示隱藏的字符
payload = {‘l’:’en’,
‘tsiccode’:’via’,
‘testrainnumber’:train_number,
‘離開’:trip_date,
‘Arrigaldate’:Trip_date,
‘trainnstanceate’:trip_date}
r = requests.get(’http://reservia.viarail.ca/tsi/gettrainstatus.aspx' ;,
params = payload)
查看原始
Request.py.
由github舉行
此代碼使我們能夠在任何類型的日期上獲取任何類型的列車編號。經過一些測試,我們發現Via的數據返回2015年4月,為我們提供超過6個月的數據。每次旅行,我們都會獲得安排以及實際到達以及每個站的出發時間。保持信息,我們可以迅速確定列車的延遲。
使用Page數據被獲取為HTML,使用BeauteSoup被攻擊腳本以提取所有值。然後,此腳本為跳閘數據生成對象,並在利用SQLalchemy將它們存儲在PostgreSQL數據庫中。這使得簡單簡單,以便稍後獲得對數據的訪問。
最後一步是迭代所有列車數字以及拉動數據的日子。此腳本只需使用一些嵌套循環來獲取數據並存儲它。還有一個腳本抓住前一天的數據,並將其存儲在數據庫中。這是在Cron作業上設置的,因此數據庫保持新鮮。
建立(廉價)網站
TrainStats.ca網站
此時,我們有超過12,000次旅行的到達數據。雖然我們可以手動運行查詢以及撰寫腳本以產生繪圖,但在線將數據更有趣。這表明它是時候開發網站了。讓事情看起來很棒,網上不是我的強壯,所以[菲爾·埃爾德森]跳進去做一些網上發展。
要添加約束,我們希望將該站點盡可能地運行。平台作為Heroku這樣的服務產品,每月大約20美元。來自Dimitalocean的在線個人服務器將至少5美元費用。最便宜的選擇是製作靜態站點。
靜態網頁是回溯到地理位基的日子。您可以保存文件,但不能在服務器上執行任何類型的處理。幸運的是,這適用於我們提供的數據類型。所有聚合的跳閘數據可能會導出到JSON文件,以及客戶端的JavaScript可以縮短數據以及屏幕圖。
TrainStats網站包括某些HTML,CSS以及在瀏覽器中運行的JavaScript以及與數據的JSON數據集合。數據集每天生成通過一個更多的cron作業,這使得所有處理能夠在一個區域上進行一次。 然後,利用亞馬遜Web服務命令行界面將數據推向S3,可以由用戶檢索。 由於數據集很小,並且S3便宜,這使得成本低於正常託管。
結果
這種黑客主要是為了樂趣而開發,但它有一些迷人的調查結果。 在我正常的渥太華到多倫多路線上,我更有可能選擇一個及時的火車,即84%的時間,而不是只滾入車站的情況下,毫不拖延到28%的旅行。 其他一些旅行者也可能發現統計數據。 無論哪種方式,它都是一個令人樂趣的練習,刮掉一個數據集,並在便宜的網絡服務上提供網絡服務。
如果您正在考慮來源,它就在GitHub上進行了。 我們懇請您通過鐵路與它沒有DDO。