基于12306实时数据的多策略购票方案规划工具
- 实时余票查询 — 直连12306 API,查询真实车次和余票信息
- 列车时刻表 — 查看任意车次(如G2、D31)的完整停靠站时刻表
- 3365个车站 — 覆盖全国所有火车站
- 车次搜索 — 输入G2、D31等车次号直接查询时刻表
| 策略 | 说明 | 自动化 |
|---|---|---|
| 🚄 直达(有票) | 直接查询目标区间余票 | ✅ 自动查询 |
| ⏳ 直达(可候补) | 无票车次可提交候补 | ✅ 自动识别 |
| 🎯 买长乘短 | 买到更远站点,在目标站提前下车 | ✅ 自动查询更远站点余票 |
| 🔄 中转换乘 | 经大型枢纽站换乘,分段展示可自由搭配 | ✅ 自动查询 + 智能兼容性筛选 |
| ✂️ 同车换乘 | 同一趟车在中间站拆分购票,无需下车换乘 | ✅ 自动查询分段方案 |
| 📝 买短乘长 | 先买短途票上车再补票 | ✅ 自动查询可行方案 |
每个策略卡片均支持独立的排序和筛选:
排序方式:
- 🕐 出发时间(升序/降序)
- 🕕 到达时间(升序/降序)
- ⏱️ 耗时(升序/降序)
- 💰 预估价格(升序/降序)
- 🔄 换乘时间(仅换乘/分段策略)
筛选条件:
- 出发时间范围(如 08:00 ~ 12:00)
- 到达时间范围(如 14:00 ~ 18:00)
- 支持跨午夜筛选(如 22:00 ~ 06:00)
- 筛选框可选填,不填则不限制
直接从12306 API的 yp_info(票面信息)字段解析真实票价,而非估算:
- ✅ 有真实票价时显示
¥553起(无 ≈ 前缀) ⚠️ 无真实票价时回退到估算,显示≈¥553起- 鼠标悬停可查看所有可用席别的具体价格
- 覆盖所有席别:商务座、一等座、二等座、软卧、硬卧、硬座、无座
中转换乘 & 同车换乘 均采用左右双列布局:
- 左侧显示第一段车次,右侧显示第二段车次
- 点击左侧车次,自动筛选可衔接的右侧车次
- 选中组合后底部显示方案汇总:总耗时、总花费、换乘间隔
- 中转换乘支持跨日期换乘(自动查询次日车次)
查询过程中进度条平滑更新,实时显示当前查询状态:
- 直达查询:
正在查询12306直达车次... - 买长乘短:
正在查询买长乘短 3/10(G1234)... - 中转换乘:
正在查询中转站 济南西(5/20,已找到3个方案)... - 同车换乘:
正在查询同车分段 2/10(D5678)... - 买短乘长:
正在查询买短乘长 1/8(G9012)...
- 🔍 车站搜索(支持中文、拼音、电报码模糊搜索)
- 📊 余票统计(商务座/一等座/二等座/软卧/硬卧/硬座/无座)
- 📋 独立时刻表查询(输入G2等车次号查询)
- 🎯 买长乘短自动查询(弹窗展示可行方案)
- 📂 策略卡片折叠/展开(点击标题栏切换)
- ⬆️ 回到顶部按钮(页面滚动后右下角出现)
- 📱 响应式设计,手机可用
- 🎨 暖色主题,视觉舒适
无需安装任何东西,打开浏览器就能用!
👉 点击访问在线版
自定义域名
www.bhllll.xyz已绑定 Vercel,国内可直接访问。
首次打开可能需要等待 10-30 秒(免费服务器冷启动),之后秒开。
无需安装 Node.js,下载即用!
- 前往 Releases 页面
- 下载对应系统的文件:
- Windows 用户 → 下载
train-planner-win-x64.exe,双击运行 - Mac 用户 (Intel) → 下载
train-planner-macos-x64 - Mac 用户 (M系列) → 下载
train-planner-macos-arm64 - Linux 用户 → 下载
train-planner-linux-x64
- Windows 用户 → 下载
- 双击运行(Mac/Linux 需先
chmod +x再./运行) - 浏览器会自动打开,开始使用!
如果已安装 Node.js:
# 克隆项目
git clone https://github.com/1311523821/train-planner.git
cd train-planner
# Windows 用户:双击 启动.bat
# Mac/Linux 用户:双击 启动.command脚本会自动安装依赖、启动服务并打开浏览器。
git clone https://github.com/1311523821/train-planner.git
cd train-planner
npm install
npm start
# 访问 http://localhost:3000- Fork 本仓库到你的 GitHub
- 访问 vercel.com,用 GitHub 登录
- 点击 New Project → 导入你 fork 的仓库
- 点击 Deploy,等待部署完成
- 获得一个
xxx.vercel.app的访问地址
或使用 Vercel CLI:
npm i -g vercel
vercel --prod.vercel.app 域名在国内可能无法访问,建议绑定自定义域名:
- 在阿里云/腾讯云等购买域名
- 添加 DNS CNAME 记录:
www→cname.vercel-dns.com - 在 Vercel 项目 Settings → Domains 中添加域名
- 选择 Connect to an environment → Production(不要选 307 重定向)
- Vercel 会自动签发 SSL 证书
- Fork 本仓库
- 访问 render.com,用 GitHub 登录
- New → Web Service → 选择你的仓库
- 设置:
- Build Command:
npm install - Start Command:
node server.js
- Build Command:
- 点击 Create Web Service
git clone https://github.com/1311523821/train-planner.git
cd train-planner
npm install
PORT=80 node server.js- 前端: 纯 HTML + CSS + JavaScript(零框架依赖)
- 后端: Node.js + Express(12306 API代理)
- 数据源: 12306 官方API
- 车站数据:
/otn/resources/js/framework/station_name.js - 余票查询:
/otn/leftTicket/queryG - 列车时刻:
/otn/czxx/queryByTrainNo - 换乘查询: 多段余票查询 + 时间匹配算法
- 车站数据:
train-planner/
├── server.js # Express后端(12306 API代理 + 换乘算法)
├── public/
│ └── index.html # 前端单页应用
├── vercel.json # Vercel 部署配置
├── render.json # Render 部署配置
├── 启动.bat # Windows 一键启动
├── 启动.command # Mac/Linux 一键启动
├── package.json
├── README.md
└── .gitignore
- 余票数据来自12306官网API,实时更新
- 票价数据:从12306返回的
yp_info(票面信息)字段解析,为实际票价 - 本工具仅提供查询和策略建议,不进行实际购票
- "买长乘短"、"买短乘长"等策略需要在12306官网/APP完成购票
MIT
- 全策略进度显示:买长乘短、同车换乘、买短乘长三个策略新增逐车次进度提示
- 查询过程中实时显示「正在查询买长乘短 3/10(G1234)...」
- 进度条平滑更新,不再长时间卡在同一个百分比
- 中转换乘流式进度优化:已在 v1.3.3 中实现,本版本补齐其余策略
- 多策略方案修复:修复买长乘短和中转换乘不显示的 bug
- 买长乘短:原来只检查终点站,现在遍历目的地之后所有站点(从近到远)
- 中转换乘:原来与同车换乘重复调用
/api/transfer导致 12306 限流,现在独立请求
- 同车换乘重构:改为真正的同车分段逻辑(同一趟车在中间站拆分购票),与中转换乘明确区分
- 策略卡片最小化:多策略方案中每个策略支持点击标题栏折叠/展开
- 错误保护:每个策略查询步骤独立 try-catch,单个失败不影响其他策略渲染
- 命名统一:「分段购票」更名为「同车换乘」
- 同车换乘升级:改为左右两列布局,左侧选第一段、右侧选第二段,与中转换乘体验一致
- 方案汇总:左右各选一个车次后,底部显示总耗时、总花费、换乘间隔等完整信息
- 回到顶部按钮:页面滚动后右下角出现浮动按钮,一键回到顶部
- 价格提示修复:鼠标悬停价格时,提示框不再超出屏幕边界
- 修复同车换乘查询报错
- 中转换乘改为左右两列交互布局:左侧第一段、右侧第二段,点击自动筛选可衔接车次
- 恢复换乘排序筛选
- 中转换乘重构:覆盖全天所有有票车次,不再遗漏凌晨和深夜时段
- 分段展示:第一段和第二段分开显示,界面更清晰
- 点击交互:点击第一段自动筛选可衔接的第二段
- 修复安全漏洞:车站搜索等输入框的 XSS 风险
- 修复多个崩溃场景:异常数据、空值等情况下的页面报错
- 修复换乘时间计算错误:超过24小时的长途列车换乘时间显示异常
- 换乘车次扩容:覆盖更多凌晨和深夜时段的可行方案
- 真实票价:从12306数据直接获取实际票价,不再靠估算
- 价格区分:有真实票价显示 ¥,估算显示 ≈¥
- 初始版本
- 6种购票策略:直达、候补、买长乘短、中转换乘、同车换乘、买短乘长
- 12306实时余票查询
- 列车时刻表查询
- 排序与筛选功能
- 响应式设计