cnpm install node-schedule --save
- node端选择dom节点工具
cheerio
cnpm install cheerio --save
- 腾讯发短信的依赖包
qcloudsms_js
cnpm install qcloudsms_js
- 热更新包,诺豆的妈妈,
nodemon
(其实不用也可以)
cnpm install nodemon --save-dev
开发请求余票接口
接着 touch index.js
创建核心js文件,开始编码:
首先引入所有依赖
const axios = require(‘axios’)
const querystring = require(“querystring”); //序列化对象,用qs也行,都一样
let QcloudSms= require(“qcloudsms_js”);
let cheerio = require(‘cheerio’);
let schedule = require(‘node-schedule’);
然后我们先定义请求参数,来一个obj
let obj = {
data: {
lineId: 111130, //路线id
vehTime: 0722, //发车时间,
startTime: 0751, //预计上车时间
onStationId: 564492, //预定的站点id
offStationId: 17990,//到站id
onStationName: ‘宝安交通运输局③’, //预定的站点名称
offStationName: “深港产学研基地”,//预定到站名称
tradePrice: 0,//总金额
saleDates: ‘17’,//车票日期
beginDate: ‘’,//订票时间,滞空,用于抓取到余票后填入数据
},
phoneNumber: 123123123, //用户手机号,接收短信的手机号
cookie: ‘JSESSIONID=TESTCOOKIE’, // 抓取到的cookie
day: “17”//定17号的票,这个主要是用于抢指定日期的票,滞空则为抢当月所有余票
}
接着声明一个名为 queryTicket
的类,为啥要用类呢,因为基于第五个需求点,多个用户抢票的时候,我们分别 new
一下就行了,
同时我们希望能够记录请求余票的次数,和当抢到票后自动停止查询余票的操作,所以给他加上个计数变量 times
和是否停止的变量,布尔值 stop
编写代码:
class QueryTicket{
/**
*Creates an instance of QueryTicket.
-
@param {Object} { data, phoneNumber, cookie, day }
-
@param data {Object} 请求余票接口的requery参数
-
@param phoneNumber {Number} 用户手机号,短信需要用到
-
@param cookie {String} cookie信息
-
@params day {String} 某日的票,如’18’
-
@memberof QueryTicket 请求余票接口
*/
constructor({ data, phoneNumber, cookie, day }) {
this.data = data
this.cookie = cookie
this.day = day
this.phoneNumber = phoneNumber
this.postData = querystring.stringify(data)
this.times = 0; //记录次数
let stop = false //通过特定接口才能修改stop值,防止外部随意串改
this.getStop = function () { //获取是否停止
return stop
}
this.setStop = function (ifStop) { //设置是否停止
stop = ifStop
}
}
}
下面开始定义原型方法,为了方便维护,我们把逻辑拆分成各个函数
class QueryTicket{
constructor({ data, phoneNumber, cookie, day }) {
//constructor代码…
}
init(){}//初始化
handleQueryTicket(){}//查询余票的逻辑
requestTicket(){} //调用查询余票接口
handleBuyTicket(){} //购票相关逻辑
requestOrder(){}//调用购票接口
handleInfoUser(){}//通知用户的逻辑
sendMSg(){} //发短信接口
}
所有数据都是基于查询余票的操作,因此我们先开发这部分功能
class QueryTicket{
constructor({ data, phoneNumber, cookie,