全国高铁列车时刻表数据获取方案
📋 任务概述
用户需求:获取最新的全国高铁列车时刻表,用于后续旅行规划
挑战:
- 12306 官方数据反爬严格(验证码、IP 限制、加密)
- 数据量巨大(5000+ 线路,10000+ 车次)
- 数据动态更新(季度调图、临时加开)
✅ 解决方案
推荐方案:第三方 API + 本地缓存
核心思路:
- 使用第三方 API 服务(天行数据/聚合数据)实时查询
- 查询结果缓存到本地 SQLite 数据库
- 优先查缓存,缓存没有再调用 API
- 定期(每周)更新热门线路
优势:
- ✅ 合法合规(购买商业 API 服务)
- ✅ 数据稳定可靠
- ✅ 无需维护复杂爬虫
- ✅ 有免费额度(100 次/天)
- ✅ 成本可控(¥0.01-0.02/次)
📁 已创建文件
/root/.openclaw/workspace/travel/scripts/train_schedule/
├── README.md # 完整方案说明文档
├── QUICKSTART.md # 5 分钟快速上手指南
├── query.py # Python 查询脚本
├── update_cache.sh # 批量更新缓存脚本
└── train_schedule.db # SQLite 数据库(首次查询后创建)
🚀 快速开始
步骤 1:申请 API Key(5 分钟)
推荐:天行数据(完全免费,100 次/天)
- 访问:https://www.tianapi.com
- 注册账号
- 开通"火车票务查询"接口
- 复制 API Key
步骤 2:测试查询
cd /root/.openclaw/workspace/travel/scripts/train_schedule
# 查询北京→上海
python query.py --from 北京 --to 上海 --api tianapi --key YOUR_API_KEY
步骤 3:批量缓存热门线路
# 批量查询并缓存 35 条热门线路
./update_cache.sh YOUR_API_KEY
💡 在旅行规划中的使用
场景 1:规划时查询车次
# 规划陕西行程时,查询北京→西安
python query.py --from 北京 --to 西安 --api tianapi --key YOUR_KEY
# 输出示例:
# G655 北京西→西安北 07:38-12:38 5h ¥515
写入行程规划:
**交通**:
- 北京西→西安北:高铁 G655(07:38-12:38,¥515)
> ⚠️ 具体车次请以 12306 查询为准
场景 2:查询多个城市
# 西安出发到周边城市
python query.py --from 西安 --to 宝鸡 --api tianapi --key YOUR_KEY
python query.py --from 西安 --to 咸阳 --api tianapi --key YOUR_KEY
python query.py --from 西安 --to 汉中 --api tianapi --key YOUR_KEY
场景 3:建立本地数据库
# 第一次查询后自动缓存
python query.py --from 北京 --to 西安 --api tianapi --key YOUR_KEY
# 24 小时内再次查询会使用缓存(不消耗 API 额度)
python query.py --from 北京 --to 西安 --api tianapi --key YOUR_KEY
# 输出:✓ 从缓存获取到 45 条车次信息
📊 API 服务商对比
| 服务商 | 免费额度 | 价格 | 推荐度 | 文档 |
|---|---|---|---|---|
| 天行数据 | 100 次/天 | 免费 | ⭐⭐⭐⭐⭐ | https://www.tianapi.com |
| 聚合数据 | 100 次/天 | 免费 | ⭐⭐⭐⭐ | https://www.juhe.cn |
| 阿里云市场 | 100 次/月 | ¥0.02/次 | ⭐⭐⭐ | https://market.aliyun.com |
| 万维易源 | 50 次/天 | ¥0.015/次 | ⭐⭐⭐ | https://www.showapi.com |
推荐:天行数据(完全免费,额度充足)
💰 成本估算
免费方案
- 天行数据:100 次/天免费
- 用途:日常旅行规划完全够用
付费方案(如需更多查询)
- 单价:¥0.01-0.02/次
-
月度预算:
- 1000 次/月:¥10-20
- 10000 次/月:¥100-200
优化策略
- 缓存优先:24 小时内相同查询不消耗额度
- 批量查询:一次性缓存热门线路
- 多 Key 轮换:申请多个账号
🔧 技术实现
查询脚本(query.py)
功能:
- 支持天行数据、聚合数据
- SQLite 本地缓存(24 小时有效期)
- 命令行参数查询
- 自动创建数据库和表
使用方法:
python query.py --from 出发站 --to 到达站 --date 日期 --api 数据源 --key API_KEY
批量更新脚本(update_cache.sh)
功能:
- 批量查询 35 条热门线路
- 自动缓存到数据库
- 显示统计信息
使用方法:
./update_cache.sh YOUR_API_KEY
数据库结构
-- 车次表
CREATE TABLE trains (
id INTEGER PRIMARY KEY,
train_no TEXT, -- 车次号(如 G655)
from_station TEXT, -- 出发站
to_station TEXT, -- 到达站
departure_time TEXT, -- 出发时间
arrival_time TEXT, -- 到达时间
duration TEXT, -- 历时
query_date TEXT, -- 查询日期
created_at TIMESTAMP -- 创建时间
);
-- 站点表
CREATE TABLE stations (
id INTEGER PRIMARY KEY,
station_name TEXT, -- 站点名称
station_code TEXT, -- 站点代码
city_name TEXT, -- 城市名
province TEXT -- 省份
);
⚠️ 注意事项
1. API 使用限制
- 天行数据:100 次/天,次日 0 点重置
- 不要频繁调用(建议间隔 1-2 秒)
- 优先使用缓存
2. 车站名称
使用标准名称:
- ✅ 北京、北京西、北京南
- ❌ 北京市、北京站(除非确实叫这个名)
3. 数据准确性
- API 数据来自 12306,但可能有延迟
- 重要:最终购票前请在 12306 官方渠道核实
- 在行程规划中标注"⚠️ 具体车次请以 12306 查询为准"
4. 查询日期
- 12306 提前 15 天放票
- 查询未来太远的日期可能没有结果
- 建议查询 7-15 天内的车次
📈 后续优化
短期(1-2 周)
- 申请天行数据 API Key
- 测试查询功能
- 缓存热门线路(北京、上海、西安等)
- 集成到旅行规划流程
中期(1-2 月)
- 建立定时任务(每周更新缓存)
- 添加更多数据源(作为备选)
- 优化查询性能
- 添加 Web 界面(可选)
长期(3-6 月)
- 积累完整时刻表数据库
- 实现智能推荐(最佳车次、换乘方案)
- 票价监控(低价提醒)
- 余票监控(自动抢票)
📚 参考资源
API 服务商
- 天行数据:https://www.tianapi.com
- 聚合数据:https://www.juhe.cn
- 阿里云市场:https://market.aliyun.com
官方数据源
- 12306 官网:https://www.12306.cn
- 铁路客服:12306
技术文档
-
README.md- 完整方案说明 -
QUICKSTART.md- 5 分钟快速上手 -
query.py- 查询脚本源码
🎯 下一步行动
立即可做
-
申请 API Key(5 分钟)
- 访问 https://www.tianapi.com
- 注册并开通"火车票务查询"
- 复制 API Key
-
测试查询(2 分钟)
cd /root/.openclaw/workspace/travel/scripts/train_schedule python query.py --from 北京 --to 上海 --api tianapi --key YOUR_KEY -
批量缓存(10 分钟)
./update_cache.sh YOUR_KEY
旅行规划时
- 查询目标线路车次
- 选择合适车次写入规划
- 标注"⚠️ 具体车次请以 12306 查询为准"
- 建议用户提前 7-15 天购票
创建日期:2026-03-14
维护者:Travel Agent
版本:v1.0