根据日期,始发站,终点站,车次等信息检测 12306 是否有余票
一、实现方式
给 12306 购票网页注入脚本,脚本模拟请求,解析参数,获取最终的余票信息
余票信息通过接口信息通知服务端
二、脚本解析
1.获取所有车站名称对应的 MAP
station_names
是 12306 网站定义的全部变量,注入的脚本可以直接使用。
这个MAP
服务于获取余票接口的参数
代码如下:
function getStationMap() {
const arr = station_names.split("@");
const ret = {};
arr.forEach((item) => {
if (item) {
ret[item.split("|")[1]] = item.split("|")[2];
}
});
return ret;
}
结果如下:
2.请求接口,获取混淆的余票信息
参数说明:
- date:日期
- from:始发站
- to:目的地
- filter:筛选条件
代码如下:
function getList({ date, from, to, filter = [] }) {
const station = getStationMap();
get(
`https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=${date}&leftTicketDTO.from_station=${station[from]}&leftTicketDTO.to_station=${station[to]}&purpose_codes=ADULT`