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