摘要:因為自己在學(xué)校還有些事情,不知道具體哪天回家,于是就自己寫了一個監(jiān)控的小程序一功能命令行輸入火車站名和日期,修改查詢周期定時器時間,即可實現(xiàn)周期性的余票查詢并用郵件通知二流程概述命令行輸入信息利用信息,發(fā)起請求,查詢余票信息使用模塊來發(fā)送郵
因為自己在學(xué)校還有些事情,不知道具體哪天回家,于是就自己寫了一個監(jiān)控的小程序 一.功能: 命令行輸入火車站名和日期,修改查詢周期(定時器時間),即可實現(xiàn)周期性的余票查詢并用郵件通知 二.流程概述 1.命令行輸入信息 2.利用信息,發(fā)起https請求,查詢余票信息 3.使用nodemailer模塊來發(fā)送郵件 三.坑* 沒想到看著挺簡單的一個東西,踩了不少坑?,F(xiàn)在分享一下 1.需要使用readline模塊來實現(xiàn)信息輸入
// 引入readline模塊 var readline = require("readline"); //創(chuàng)建readline接口實例 var rl = readline.createInterface({ input:process.stdin, output:process.stdout }); // question方法 rl.question("你叫什么?",function(answer){ console.log("名字是:"+answer); // 不加close,則不會結(jié)束 rl.close(); }); // close事件監(jiān)聽 rl.on("close", function(){ // 結(jié)束程序 process.exit(0); });這個rl.question方法只有一個參數(shù),但是日期,始發(fā)站和終點站要三個參數(shù),我是把這個方法嵌套使用的,就像這樣:
l.question("日期: ", (date) => { rl.question("始發(fā)站: ", (start) => { rl.question("終點站: ", (end) => {因為還是新手,這個模塊不怎么會用,不知道這么做是不是做錯了* 2.12306接口
/otn/leftTicket/queryA?leftTicketDTO.train_date=" + date + "&leftTicketDTO.from_station=" + startcode + "&leftTicketDTO.to_station=" + endcode + "&purpose_codes=ADULT";
當(dāng)我們在12306上點擊查詢后,接口URL是這樣的,打開瀏覽器,看一下包的里面就知道了(檢查->Network->query)
3.知道了接口之后,就是自己在程序里面?zhèn)卧鞛g覽器請求,這又里面有幾個坑 (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分別是++車站電報碼++,所以如果想通過命令行輸入始發(fā)站和終點站來查詢,就要先查詢中文車站名字對應(yīng)的電報碼,然后構(gòu)造請求字符串,Google一下,還真有這個 不過可惜是表格,不過沒關(guān)系,再Google,excel轉(zhuǎn)json 這里說明一下,企業(yè)有時會用表格記錄數(shù)據(jù)(一般是項目規(guī)劃人員或者不管程序這一塊的人),然后再進(jìn)行json轉(zhuǎn)化到實際程序中去,而excel里面就有這個功能,加載項,轉(zhuǎn)化為json,搞定。 如果不是office2013,也可以用網(wǎng)上的excel轉(zhuǎn)json在線工具,完成 不過,問題又出現(xiàn)了,excel里面有的站缺電報碼,所以排序,刪除了這些沒有電報碼的車站(不知道為啥沒有) 還有,就是轉(zhuǎn)化前修改一下表格數(shù)據(jù),讓json更方便偶們后續(xù)操作
... { "name": "棗陽", "code": "ZYN" }, { "name": "沾益", "code": "ZYM" }, { "name": "張掖", "code": "ZYJ" }, { "name": "張巷", "code": "ZYG" }, ...4.處理返回的數(shù)據(jù) (1)分析json看著就腦袋疼,得好好分析一下數(shù)據(jù)
在data里面:
queryLeftNewDTO.start_train_date //日期 queryLeftNewDTO.start_station_name //始發(fā)站 queryLeftNewDTO.end_station_name //終點站 queryLeftNewDTO.station_train_code //車次代碼 queryLeftNewDTO.start_time //開車時間 queryLeftNewDTO.arrive_time //到達(dá)時間 queryLeftNewDTO.yz_num //硬座 queryLeftNewDTO.yw_num //硬臥 queryLeftNewDTO.rw_num //軟臥 queryLeftNewDTO.wz_num //無座(2)使用數(shù)據(jù) 因為一般來說一天會有不止一趟車,所以用數(shù)組,數(shù)組元素為對象 像這樣:
... for (var i = 0; i < json.data.length; ++i) { start_date[i] = "日期:" + json.data[i].queryLeftNewDTO.start_train_date; start_station_name[i] = "始發(fā)站:" + json.data[i].queryLeftNewDTO.start_station_name; ...5.發(fā)送通知郵件 之前我寫過一篇博客,簡述了怎樣使用這一模塊 http://blog.csdn.net/sftec/ar... 四.結(jié)語 地址:https://github.com/vanishcode... 聲明:新手作品,不喜勿噴 :)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/81211.html
摘要:而調(diào)用后端服務(wù)就應(yīng)用了的高級特分布式配置管理平臺后端掘金輕量的分布式配置管理平臺。關(guān)于網(wǎng)絡(luò)深度解讀后端掘金什么是網(wǎng)絡(luò)呢總的來說,網(wǎng)絡(luò)中的容器們可以相互通信,網(wǎng)絡(luò)外的又訪問不了這些容器。 在 Java 路上,我看過的一些書、源碼和框架(持續(xù)更新) - 后端 - 掘金簡書 占小狼轉(zhuǎn)載請注明原創(chuàng)出處,謝謝!如果讀完覺得有收獲的話,歡迎點贊加關(guān)注 物有本末,事有終始,知所先后,則近道矣 ......
摘要:春節(jié)搶票應(yīng)該是每個在外游子的必修課,還有不足一個月就要過春節(jié)了,現(xiàn)在的你,是不是還奮戰(zhàn)在搶票一線呢說到搶票,之所以現(xiàn)在大家能享受到流暢的移動互聯(lián)網(wǎng)購票服務(wù),其實背后都是云計算在加持,沒想到吧,原來看似高深的云計算離我們?nèi)绱酥?。春?jié)搶票應(yīng)該是每個在外游子的必修課,還有不足一個月就要過春節(jié)了,現(xiàn)在的你,是不是還奮戰(zhàn)在搶票一線呢?說到搶票,之所以現(xiàn)在大家能享受到流暢的移動互聯(lián)網(wǎng)購票服務(wù),其實背后...
摘要:昨天有個朋友聯(lián)系我說不能用了,想起來改版了,所以就重新寫了這個,由于時間緊需要優(yōu)化,所以優(yōu)化的任務(wù)交給大家了,然后新增加了價格查詢出發(fā)時間和到站時間上個效果圖,然后我再上代碼火車票余票查詢和價格查詢這個由于時間緊 昨天有個朋友聯(lián)系我QQ說API不能用了,想起來12306改版了,所以就重新寫了這個API,由于時間緊需要優(yōu)化,所以優(yōu)化的任務(wù)交給大家了,然后新增加了價格查詢-出發(fā)時間和到站時...
摘要:科技改變生活,云計算也向政務(wù)民生領(lǐng)域逐漸延伸。整個年,各地方政府各民生領(lǐng)域擁抱云計算的速度明顯在加快。阿里云分擔(dān)流量壓力年春運火車票售賣量創(chuàng)下歷年新高,而鐵路系統(tǒng)運營網(wǎng)站卻并沒有出現(xiàn)明顯的卡滯。同阿里云的合作是關(guān)鍵之一?! ?015年8月19日,國務(wù)院通過《關(guān)于促進(jìn)大數(shù)據(jù)發(fā)展的行動綱要》,在全社會引起廣泛影響。 科技改變生活,云計算也向政務(wù)、民生領(lǐng)域逐漸延伸。整個2015年,各地方政府、各...
閱讀 1604·2021-11-25 09:43
閱讀 4161·2021-11-15 11:37
閱讀 3265·2021-08-17 10:13
閱讀 3573·2019-08-30 14:16
閱讀 3604·2019-08-26 18:37
閱讀 2547·2019-08-26 11:56
閱讀 1214·2019-08-26 10:42
閱讀 701·2019-08-26 10:39