摘要:因為自己在學校還有些事情,不知道具體哪天回家,于是就自己寫了一個監控的小程序一功能命令行輸入火車站名和日期,修改查詢周期定時器時間,即可實現周期性的余票查詢并用郵件通知二流程概述命令行輸入信息利用信息,發起請求,查詢余票信息使用模塊來發送郵
因為自己在學校還有些事情,不知道具體哪天回家,于是就自己寫了一個監控的小程序 一.功能: 命令行輸入火車站名和日期,修改查詢周期(定時器時間),即可實現周期性的余票查詢并用郵件通知 二.流程概述 1.命令行輸入信息 2.利用信息,發起https請求,查詢余票信息 3.使用nodemailer模塊來發送郵件 三.坑* 沒想到看著挺簡單的一個東西,踩了不少坑。現在分享一下 1.需要使用readline模塊來實現信息輸入
// 引入readline模塊 var readline = require("readline"); //創建readline接口實例 var rl = readline.createInterface({ input:process.stdin, output:process.stdout }); // question方法 rl.question("你叫什么?",function(answer){ console.log("名字是:"+answer); // 不加close,則不會結束 rl.close(); }); // close事件監聽 rl.on("close", function(){ // 結束程序 process.exit(0); });這個rl.question方法只有一個參數,但是日期,始發站和終點站要三個參數,我是把這個方法嵌套使用的,就像這樣:
l.question("日期: ", (date) => { rl.question("始發站: ", (start) => { rl.question("終點站: ", (end) => {因為還是新手,這個模塊不怎么會用,不知道這么做是不是做錯了* 2.12306接口
/otn/leftTicket/queryA?leftTicketDTO.train_date=" + date + "&leftTicketDTO.from_station=" + startcode + "&leftTicketDTO.to_station=" + endcode + "&purpose_codes=ADULT";
當我們在12306上點擊查詢后,接口URL是這樣的,打開瀏覽器,看一下包的里面就知道了(檢查->Network->query)
3.知道了接口之后,就是自己在程序里面偽造瀏覽器請求,這又里面有幾個坑 (1)12306證書問題https://www.zhihu.com/questio...
-----BEGIN CERTIFICATE----- MIICmjCCAgOgAwIBAgIIbyZr5/jKH6QwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE BhMCQ04xKTAnBgNVBAoNpbm9yYWlsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MQ0wCwYDVQQDEwRTUkNBMB4XDTA5MDUyNTA2NTYwMFoXDTI5MDUyMDA2NTYwMFow RzELMAkGA1UEBhMCQ04xKTAnBgNVBAoTIFNpbm9yYWlsIENlcnRpZmljYXRpb24g QXV0aG9yaXR5MQ0wCwYDVQQX2K/eZRWFfnuk8e5jKDH+gCb29bSo tqPqTbxXWPxIOz8EjyUO3bfR5pQ8ovNTOlks2rS5BdMhoi4sUjCKi5ELiqtyww/X gY5iFqv6D4Pw9QvOUcdRVSbPWo1DwMmH75It6pk/rARIFHEjWwIDAQABo4GOMIGL MB8GA1UdIwQYMBaAFHletne34lKDQ+3HUYhMY4UsAENYMAUdEwQFMAMBAf8w LgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovLzE5Mi4xNjguOS4xNDkvY3JsMS5jcmww CwYDVR0PBAQDAgH+MB0GA1UdDgQWBBR5XrZ3t+JSg0Ptx1GITGOFLABDWDANBgkq hkiG9w0BAQUFAAOBgQDGrAm2U/of1LbOnG2bnnVaBXiVJF8LKPaV23XQ96HU 8xfgSZMJS6U00WHAI7zp0q208RSUft9wDq9ee///VOhzR6Tebg9QfyPSohkBrhXQ envQog555S+C3eJAAVeNCTeMS3N/M5hzBRJAoffn3qoYuOi+284A== -----END CERTIFICATE-----差不多就是加密的字符串
var options = { hostname: "kyfw.12306.cn", path: querypath, ca: [ca] //就是它[]里面的ca就是證書(對象) 使用的時候
var ca = fs.readFileSync("/Users/Someone/Documents/Projects/12306/srca.pem");不對...還有兩個小坑, 第一,12306證書好像是cer格式的...這里用的是pem格式... 好吧,Google一下。。。 第二,證書路徑建議寫絕對路徑,要不有可能會加載不到 (2)請求字符串 上面看到,請求返回的URL為
https://kyfw.12306.cn/otn/leftTicket/queryA?leftTicketDTO.train_date=2017-02-07&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT這里以2月7號北京到上海的車票為栗子 其中BJP和SHH分別是++車站電報碼++,所以如果想通過命令行輸入始發站和終點站來查詢,就要先查詢中文車站名字對應的電報碼,然后構造請求字符串,Google一下,還真有這個 不過可惜是表格,不過沒關系,再Google,excel轉json 這里說明一下,企業有時會用表格記錄數據(一般是項目規劃人員或者不管程序這一塊的人),然后再進行json轉化到實際程序中去,而excel里面就有這個功能,加載項,轉化為json,搞定。 如果不是office2013,也可以用網上的excel轉json在線工具,完成 不過,問題又出現了,excel里面有的站缺電報碼,所以排序,刪除了這些沒有電報碼的車站(不知道為啥沒有) 還有,就是轉化前修改一下表格數據,讓json更方便偶們后續操作
... { "name": "棗陽", "code": "ZYN" }, { "name": "沾益", "code": "ZYM" }, { "name": "張掖", "code": "ZYJ" }, { "name": "張巷", "code": "ZYG" }, ...4.處理返回的數據 (1)分析json看著就腦袋疼,得好好分析一下數據
在data里面:
queryLeftNewDTO.start_train_date //日期 queryLeftNewDTO.start_station_name //始發站 queryLeftNewDTO.end_station_name //終點站 queryLeftNewDTO.station_train_code //車次代碼 queryLeftNewDTO.start_time //開車時間 queryLeftNewDTO.arrive_time //到達時間 queryLeftNewDTO.yz_num //硬座 queryLeftNewDTO.yw_num //硬臥 queryLeftNewDTO.rw_num //軟臥 queryLeftNewDTO.wz_num //無座(2)使用數據 因為一般來說一天會有不止一趟車,所以用數組,數組元素為對象 像這樣:
... for (var i = 0; i < json.data.length; ++i) { start_date[i] = "日期:" + json.data[i].queryLeftNewDTO.start_train_date; start_station_name[i] = "始發站:" + json.data[i].queryLeftNewDTO.start_station_name; ...5.發送通知郵件 之前我寫過一篇博客,簡述了怎樣使用這一模塊 http://blog.csdn.net/sftec/ar... 四.結語 地址:https://github.com/vanishcode... 聲明:新手作品,不喜勿噴 :)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81211.html
摘要:而調用后端服務就應用了的高級特分布式配置管理平臺后端掘金輕量的分布式配置管理平臺。關于網絡深度解讀后端掘金什么是網絡呢總的來說,網絡中的容器們可以相互通信,網絡外的又訪問不了這些容器。 在 Java 路上,我看過的一些書、源碼和框架(持續更新) - 后端 - 掘金簡書 占小狼轉載請注明原創出處,謝謝!如果讀完覺得有收獲的話,歡迎點贊加關注 物有本末,事有終始,知所先后,則近道矣 ......
摘要:春節搶票應該是每個在外游子的必修課,還有不足一個月就要過春節了,現在的你,是不是還奮戰在搶票一線呢說到搶票,之所以現在大家能享受到流暢的移動互聯網購票服務,其實背后都是云計算在加持,沒想到吧,原來看似高深的云計算離我們如此之近。春節搶票應該是每個在外游子的必修課,還有不足一個月就要過春節了,現在的你,是不是還奮戰在搶票一線呢?說到搶票,之所以現在大家能享受到流暢的移動互聯網購票服務,其實背后...
摘要:昨天有個朋友聯系我說不能用了,想起來改版了,所以就重新寫了這個,由于時間緊需要優化,所以優化的任務交給大家了,然后新增加了價格查詢出發時間和到站時間上個效果圖,然后我再上代碼火車票余票查詢和價格查詢這個由于時間緊 昨天有個朋友聯系我QQ說API不能用了,想起來12306改版了,所以就重新寫了這個API,由于時間緊需要優化,所以優化的任務交給大家了,然后新增加了價格查詢-出發時間和到站時...
摘要:科技改變生活,云計算也向政務民生領域逐漸延伸。整個年,各地方政府各民生領域擁抱云計算的速度明顯在加快。阿里云分擔流量壓力年春運火車票售賣量創下歷年新高,而鐵路系統運營網站卻并沒有出現明顯的卡滯。同阿里云的合作是關鍵之一?! ?015年8月19日,國務院通過《關于促進大數據發展的行動綱要》,在全社會引起廣泛影響?! 】萍几淖兩睿朴嬎阋蚕蛘铡⒚裆I域逐漸延伸。整個2015年,各地方政府、各...
閱讀 1507·2021-11-25 09:43
閱讀 4057·2021-11-15 11:37
閱讀 3192·2021-08-17 10:13
閱讀 3503·2019-08-30 14:16
閱讀 3534·2019-08-26 18:37
閱讀 2488·2019-08-26 11:56
閱讀 1128·2019-08-26 10:42
閱讀 609·2019-08-26 10:39