kumoRail項目概述01:GetLate模塊
kumoRail預覽圖及公衆號二維碼 kumoRail是我接觸web編程之後的第一個idea,其目的在於給鐵道迷們提供運轉和拍車上的一些便利,從一年前斷斷續續的做到現在,總算成型了5個功能:正晚點歷史、交路、配屬、時刻和電報碼 查詢。至此稍作一個停歇,也是做一個總結,好好理一下做這個項目的思路體會,爲自己以後再來回顧和重構它的時候,留存一點記憶,也讓更多希望了解這個項目的朋友能夠更容易的看懂它。 kumoRail最早只有正晚點歷史一個部分。12306網站只提供1小時前和3小時后的正晚點信息查詢,所以我們的目標就是要設計一個長時間一直運行的爬蟲來不斷在車到站時候收集該車的整晚點信息,然後寫入數據庫裏面。我將這個進程,或者是叫模塊,命名為 GetLate ,不過,不是睡覺起晚了的意思哈。不過呢現在看起來,它結構過於原始,也不符合Object-oriented的思想,不過總有留存一些方法和思想,得以在再次重構的時候進行參考罷。 getlate.py裏面,loadModule函數只是爲了導入模塊,真正起作用的是getData函數。他會不斷的運行以收集數據。 在getData中,首先導入了schqdb、staqdb、ressdb三個讀寫數據庫的對象,log是寫log文件的對象,因爲supervisor的寫日志會有延遲,故而爲之。queryCache是一個list,會把需要進行查詢的到站信息緩存在這裏,待車到站之後再進行查詢的。 這裏有一個“窗口”的思想。“窗口”有兩個,指的就是在cache中加入待查到站信息和進行查詢的時間範圍。提前加入信息,在過了預定的到站時間3分鐘后開始進行查詢,若查詢成功,沒有晚點則drop掉該條,長時間晚點則更新預定的到站時間,在那個時間再進行查詢,錯誤的話亦會保留,再進行再次查尋。 我本來的想法是在車到站之後3-5分鐘内進行多次查詢,但是這實際上非常不合適。第一個是已經查到正確值的車次會進行再次的查詢,會在數據庫裏面形成重複的數據,浪費流量和數據庫資源。第二個問題是某些車次會產生長時間的晚點,但是在這幾分鐘内,我們收集過後,它的晚點再發變數,我們就收集不到它正確的信息。後來我也想過,事實上最理想的方法是提前在數據庫裏面建立一個該日該車次于該站的到站信息,後面再進行填充和更新。不