Nodejs 版 12306 查询余票小工具
Nodejs 版 12306 查询余票小工具
Nodejs 版 12306 查询余票小工具
一个 Nodejs 写的查询 12306 余票的小工具,查询到指定车次的车票后会反馈到邮箱
github: https://github.com/isxiaoxin/12306
gitee: https://gitee.com/isxiaoxin/nodejs_12306
已实现的功能
-
根据中文站点名称去查找对应的站点代号
-
支持查询单个 /多个车次数据
-
定时监控余票数量
-
检测到指定车次票数的变化后发送新结果到邮箱
使用方法
1 、把代码克隆到本地
$ git clone https://github.com/isxiaoxin/12306.git
2 、安装依赖
$ npm install
// 或 yarn install
3 、配置 config.js 内的信息
车次信息需要自行到 12306 网站搜集
date: '2020-09-03', // 出发日期 格式:yyyy-mm-dd 如:2020-08-31
from: '广州', // 起始站中文
to: '郴州', // 到达站中文
type: 'ADULT', // 乘客类型 成人:ADULT,学生:0X00
trainNo: 'G822', // 需要监测的车次 多个车次用|隔开 如:G822|G1112 可忽略大小写
mail: '', // 邮箱地址 默认是 qq 邮箱 其他邮箱需要改 nodemailer 的配置
pass: '', // 邮箱的 smtp 授权码 不是 qq 密码 放心填写
4 、执行命令
node start.js
执行之后是这样的 终端也能看到此次查询的信息 this.logger 为 true 时会输出 可自行更改
默认每隔 1 分钟查询余票,有需要可自行调整 start.js 里的 this.interval
检测到余票后会收到这样一个邮件,可自行调整邮件模板或样式
其他
-
在不使用进程守护的情况下只能通过
ctrl + c
关闭查询(小菜鸡没用过 mac 哈哈) -
有需要进程守护的可自行使用 pm2 - https://www.jianshu.com/p/e15fd72727fe
-
如果
setInterval
满足不了需求可自行使用 node-schedule
最后
目前只是实现出来第一版,有任何问题或建议可以给我提 issue 或者咨询我,代码里有我的联系方式噢~
可以把其他类型的票搞上
仅供参考,哈哈
https://github.com/arrowing/dig-12306
不错不错,赞一个!虽然用不上~哈哈
挺好,最近正在学 node
3q 有问题可以一起探讨鸭
哈哈 感谢支持
哈哈 膜拜大佬
现在 12306 的后补机制,在获取到车站放票,没来的及购买票会不会就没了
需要做一个类似监控软件,求个大佬联系方式
是的
vx: xiaosin2333
已加
当然,下面是一个简化的 Node.js 版 12306 查询余票小工具的示例代码。请注意,由于 12306 官网的接口存在反爬虫机制且可能变动,直接访问其 API 可能会遇到访问限制。为了演示目的,以下代码将假设有一个可用的 API 接口来查询余票信息。
const axios = require('axios');
const querystring = require('querystring');
async function checkTicketAvailability(from, to, date, trainNo) {
const apiUrl = 'https://api.example.com/check_ticket'; // 假设的 API 地址
const params = querystring.stringify({
from: from,
to: to,
date: date,
train_no: trainNo
});
try {
const response = await axios.get(apiUrl, { params });
if (response.data && response.data.success) {
console.log('余票信息:', response.data.tickets);
} else {
console.error('查询失败:', response.data.message);
}
} catch (error) {
console.error('请求出错:', error.message);
}
}
// 示例调用
checkTicketAvailability('北京', '上海', '2023-10-01', 'G1');
说明:
- 该代码使用
axios
库来发送 HTTP 请求。 querystring.stringify
用于将查询参数转换为 URL 查询字符串。checkTicketAvailability
函数接受出发地、目的地、日期和车次号作为参数,并查询余票信息。- 请将
apiUrl
替换为实际的 12306 或第三方提供的可用 API 地址。 - 由于反爬虫机制,实际使用中可能需要额外的处理,如设置请求头、使用代理等。