{"skill":{"slug":"railway-12306","displayName":"Railway 12306","summary":"中国铁路12306火车票查询助手。支持余票查询、智能推荐车次、价格对比、时刻表查询。 核心能力： - 实时余票查询（支持高铁/动车/普速） - 智能推荐车次（最快/最便宜/直达/中转） - 多日期价格对比 - 车站代码自动转换 - 农历节假日智能提醒 触发场景：当用户询问\"火车票\"、\"高铁\"、\"动车\"、\"1230...","description":"---\nname: railway-12306\nversion: 1.0.0\ndescription: |\n  中国铁路12306火车票查询助手。支持余票查询、智能推荐车次、价格对比、时刻表查询。\n  核心能力：\n  - 实时余票查询（支持高铁/动车/普速）\n  - 智能推荐车次（最快/最便宜/直达/中转）\n  - 多日期价格对比\n  - 车站代码自动转换\n  - 农历节假日智能提醒\n  触发场景：当用户询问\"火车票\"、\"高铁\"、\"动车\"、\"12306\"、\"余票\"、\"车次\"或需要查询铁路出行信息时激活。\n  输出物：车次列表 + 余票信息 + 价格对比 + 出行建议。\nauthor: WYQ\ntags:\n  - 出行\n  - 火车票\n  - 12306\n  - 中国\n  - 交通\n---\n\n# 🚄 Railway 12306 Skill\n\n中国铁路12306火车票智能查询助手，帮你快速找到最合适的车次。\n\n## 🎯 Purpose\n\n提供便捷的12306火车票查询服务，解决手动查票繁琐、车次选择困难的痛点。本技能通过调用公开查询接口，实现余票查询、智能推荐、价格对比等功能。\n\n**⚠️ 重要说明：**\n- 本skill仅提供查询功能，不支持购票\n- 数据来源于12306公开查询接口\n- 不涉及账号登录，无需个人信息\n- 建议查询频率控制在每3秒一次以内\n\n## ⏰ When to Use\n\n- ✅ 用户询问\"火车票\"、\"高铁\"、\"动车\"、\"12306\"\n- ✅ 查询从A地到B地的车次\n- ✅ 询问\"哪天回去最好\"、\"车票贵不贵\"\n- ✅ 需要对比多日期价格\n- ❌ 用户仅询问飞机票（请使用flight-search skill）\n- ❌ 需要实际购票（请引导用户访问12306官网/APP）\n\n## 🧠 Process\n\n### 步骤1：参数提取与智能补全\n\n从用户输入中提取：\n- **出发地**：城市名或车站名（如\"北京\"、\"北京南\"）\n- **目的地**：城市名或车站名\n- **日期**：\n  - 明确日期：\"明天\"、\"2月25日\"、\"周五\"\n  - 模糊需求：\"初八之后\"、\"这周末\"\n  - 默认：今天\n\n**农历日期处理：**\n如果用户提到农历日期（如\"正月初八\"），使用 lunar-calendar skill 转换为公历。\n\n```bash\n# 示例：查询正月初八\npython /home/node/.openclaw/workspace/skills/lunar-calendar/scripts/lunar_calculator.py \\\n  --lunar \"2026-01-08\" --leap false\n```\n\n### 步骤2：车站代码转换\n\n12306使用三字码，需要转换：\n- 读取 `references/station_codes.json` 获取车站代码\n- 支持模糊匹配（如\"北京\"→可能是\"BJP\"北京、\"VNP\"北京南）\n- 如有多个匹配，询问用户确认\n\n### 步骤3：调用查询脚本\n\n```bash\n# 基础查询\nnode scripts/query_tickets.js \\\n  --from \"北京\" \\\n  --to \"上海\" \\\n  --date \"2026-02-25\"\n\n# 多日期对比\nnode scripts/query_tickets.js \\\n  --from \"丽水\" \\\n  --to \"上海\" \\\n  --date \"2026-02-25,2026-02-27,2026-02-28\" \\\n  --compare-dates\n\n# 智能推荐\nnode scripts/query_tickets.js \\\n  --from \"丽水\" \\\n  --to \"上海\" \\\n  --date \"2026-02-27\" \\\n  --recommend \\\n  --prefer \"fastest\"  # 或 \"cheapest\" / \"direct\"\n```\n\n### 步骤4：结果解析与呈现\n\n**输出格式：**\n```\n🚄 丽水 → 上海 (2026-02-27 周五)\n\n【推荐车次】⭐\nG7344  07:20-09:56  2h36m  二等座¥199  有票\n├─ 优势：最早到达，全天可利用\n└─ 余票：二等座99张、一等座20张\n\n【经济实惠】💰\nG7368  09:28-12:00  2h32m  二等座¥177  有票\n├─ 优势：最便宜，中午到达\n└─ 余票：二等座充足\n\n【其他选择】\nG7310  16:08-18:54  2h46m  二等座¥185  有票\nG7350  18:53-21:35  2h42m  二等座¥185  有票\n\n💡 建议：\n- 推荐 G7344（早班）或 G7368（省钱）\n- 所有车次余票充足，随时可买\n- 周五回去最佳，周末在上海休息\n```\n\n### 步骤5：智能建议\n\n基于用户需求和查询结果，提供：\n- **时间建议**：工作日vs周末、早班vs晚班\n- **价格建议**：最优性价比车次\n- **出行建议**：到站后交通、行李提醒\n- **购票建议**：是否需要抢票、候补\n\n## 📖 References\n\n### 必读文件\n\n1. **references/station_codes.json** - 车站代码映射表\n   ```json\n   {\n     \"北京\": \"BJP\",\n     \"北京南\": \"VNP\",\n     \"上海\": \"SHH\",\n     \"上海虹桥\": \"AOH\",\n     \"丽水\": \"LSP\"\n   }\n   ```\n\n2. **references/seat_types.json** - 座位类型编码\n   ```json\n   {\n     \"二等座\": \"O\",\n     \"一等座\": \"M\",\n     \"商务座\": \"9\",\n     \"硬座\": \"1\",\n     \"硬卧\": \"3\",\n     \"软卧\": \"4\"\n   }\n   ```\n\n### 可选参考\n\n- **references/holiday_tips.md** - 节假日出行提醒\n- **references/station_transfer.md** - 主要城市站间换乘指南\n\n## 🛠️ Scripts\n\n### scripts/query_tickets.js\n\n**主查询脚本**，使用Node.js实现，无需Python环境。\n\n**功能：**\n- 余票查询\n- 多日期对比\n- 智能推荐\n- 价格排序\n\n**依赖：**\n- Node.js 内置模块（https, querystring）\n- 无需额外安装npm包\n\n**关键逻辑：**\n```javascript\n// 1. 构造12306查询URL\nconst url = `https://kyfw.12306.cn/otn/leftTicket/query?` +\n  `leftTicketDTO.train_date=${date}&` +\n  `leftTicketDTO.from_station=${fromCode}&` +\n  `leftTicketDTO.to_station=${toCode}&` +\n  `purpose_codes=ADULT`;\n\n// 2. 设置请求头（重要：避免被拦截）\nconst headers = {\n  'User-Agent': 'Mozilla/5.0 ...',\n  'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init',\n  'Cookie': '_jc_save_fromStation=...'  // 模拟Cookie\n};\n\n// 3. 解析返回数据（JSON格式）\n// data.result 是列表，每项是管道符分隔的字符串\n// 需要按位置提取：车次|出发站|到达站|时间|余票...\n```\n\n### scripts/convert_station.js\n\n**车站代码转换**\n\n```bash\nnode scripts/convert_station.js --name \"北京\"\n# 输出：BJP (北京) | VNP (北京南) | ...\n```\n\n### scripts/compare_dates.js\n\n**多日期价格对比**\n\n```bash\nnode scripts/compare_dates.js \\\n  --from \"丽水\" \\\n  --to \"上海\" \\\n  --dates \"2026-02-25,2026-02-27,2026-02-28\"\n```\n\n## 🚨 Error Handling\n\n### 常见错误与解决\n\n**1. 车站名称无法识别**\n```\n❌ 未找到车站\"北京西\"\n💡 提示：是否是\"北京西站\"(BXP)?\n```\n\n**2. 无余票**\n```\n❌ 2026-02-27 丽水→上海 无直达车票\n💡 建议：\n  - 尝试其他日期（2月25日有票）\n  - 考虑中转方案（经杭州）\n```\n\n**3. 查询频率过高**\n```\n⚠️ 查询过于频繁，请等待3秒\n```\n\n**4. 农历日期错误**\n```\n❌ \"正月初八\"需要指定年份\n💡 是指2026年正月初八吗？(2026-02-24)\n```\n\n## 🎯 Use Cases\n\n### Case 1: 基础查询\n\n**用户输入：**\n\"帮我查一下明天从丽水到上海的火车票\"\n\n**处理流程：**\n1. 提取：丽水→上海，明天（2026-02-22）\n2. 转换车站代码：LSP → AOH/SHH\n3. 调用查询脚本\n4. 展示结果 + 智能推荐\n\n### Case 2: 农历日期查询\n\n**用户输入：**\n\"初八之后从丽水回上海，哪天回去最好\"\n\n**处理流程：**\n1. 识别\"初八\"需要农历转换\n2. 调用 lunar-calendar 确认：初八=2月24日\n3. 查询2月25日-28日车票\n4. 对比后推荐最佳日期\n\n### Case 3: 智能推荐\n\n**用户输入：**\n\"周五回上海，要最早到的车\"\n\n**处理流程：**\n1. 确定周五=2026-02-27\n2. 查询所有车次\n3. 按到达时间排序\n4. 推荐G7344（07:20发，09:56到）\n\n## 📊 Output Format\n\n### 标准输出\n\n```markdown\n🚄 {出发地} → {目的地} ({日期} {星期})\n\n【推荐车次】⭐\n{车次}  {发车}-{到达}  {耗时}  {座位}¥{价格}  {余票状态}\n├─ 优势：{推荐理由}\n└─ 余票：{详细余票}\n\n【经济实惠】💰\n{车次}  ...\n\n【其他选择】\n{车次}  ...\n{车次}  ...\n\n💡 建议：\n- {出行建议1}\n- {出行建议2}\n- {购票提示}\n```\n\n### 多日期对比\n\n```markdown\n📅 价格日历 (丽水 → 上海)\n\n2月25日(周三) 💰最便宜\n├─ G7368  09:28发  ¥177  有票\n└─ 建议：工作日，价格最优\n\n2月27日(周五) ⭐推荐\n├─ G7344  07:20发  ¥199  有票\n└─ 建议：周五回，周末休息\n\n2月28日(周六)\n├─ G7368  09:28发  ¥177  有票\n└─ 建议：周末，相对轻松\n```\n\n## 🔒 Safety & Privacy\n\n- ✅ 仅查询公开数据，无需登录\n- ✅ 不存储用户个人信息\n- ✅ 不缓存查询历史\n- ⚠️ 控制查询频率，避免IP封禁\n- ⚠️ 提醒用户前往官方渠道购票\n\n## 🚀 Future Enhancements\n\n**v1.1 计划：**\n- [ ] 支持候补监控\n- [ ] 价格追踪（历史价格曲线）\n- [ ] 换乘方案推荐\n- [ ] 与农历节假日自动关联\n\n**v2.0 计划：**\n- [ ] 集成携程/去哪儿价格对比\n- [ ] 飞机+火车组合方案\n- [ ] 实时正晚点查询\n\n## 📝 Development Notes\n\n**创建时间**：2026-02-21  \n**作者**：玉斧（wangyuqin2@xiaohongshu.com）  \n**动机**：解决手动查询火车票繁琐的问题  \n**参考**：基于12306公开查询接口  \n**许可**：MIT License\n\n---\n\n**⚡ Quick Start:**\n\n```bash\n# 查询明天的票\nnode scripts/query_tickets.js --from \"丽水\" --to \"上海\" --date \"tomorrow\"\n\n# 智能推荐\nnode scripts/query_tickets.js --from \"丽水\" --to \"上海\" --date \"2026-02-27\" --recommend\n\n# 多日期对比\nnode scripts/query_tickets.js --from \"丽水\" --to \"上海\" --dates \"2026-02-25,2026-02-27\" --compare\n```\n","topics":["中国","出行","火车票","交通"],"tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":188,"installsAllTime":7,"installsCurrent":0,"stars":0,"versions":1},"createdAt":1771664245546,"updatedAt":1778491597572},"latestVersion":{"version":"1.0.0","createdAt":1771664245546,"changelog":"初始版本：中国铁路12306火车票智能查询助手","license":null},"metadata":null,"owner":{"handle":"wangyuqin378-cpu","userId":"s176s03bnerdhqcjh16xta53y5884ks5","displayName":"wangyuqin378-cpu","image":"https://avatars.githubusercontent.com/u/226378357?v=4"},"moderation":null}