Nodejs 版 12306 查询余票小工具

发布于 1周前 作者 bupafengyu 来自 nodejs/Nestjs

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 时会输出 可自行更改

image-20200903101729933

默认每隔 1 分钟查询余票,有需要可自行调整 start.js 里的 this.interval

检测到余票后会收到这样一个邮件,可自行调整邮件模板或样式

小鑫

其他

  • 在不使用进程守护的情况下只能通过 ctrl + c 关闭查询(小菜鸡没用过 mac 哈哈)

  • 有需要进程守护的可自行使用 pm2 - https://www.jianshu.com/p/e15fd72727fe

  • 如果 setInterval 满足不了需求可自行使用 node-schedule

最后

目前只是实现出来第一版,有任何问题或建议可以给我提 issue 或者咨询我,代码里有我的联系方式噢~


12 回复

可以把其他类型的票搞上
仅供参考,哈哈
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');

说明

  1. 该代码使用 axios 库来发送 HTTP 请求。
  2. querystring.stringify 用于将查询参数转换为 URL 查询字符串。
  3. checkTicketAvailability 函数接受出发地、目的地、日期和车次号作为参数,并查询余票信息。
  4. 请将 apiUrl 替换为实际的 12306 或第三方提供的可用 API 地址。
  5. 由于反爬虫机制,实际使用中可能需要额外的处理,如设置请求头、使用代理等。
回到顶部