srt-booking

srt-booking

热门

使用SRTrain库在韩国搜索、预订、查看和取消SRT车票。当用户询问SRT座位可用性、预订、取消或售罄重试计划时使用。

6422Star
735Fork
更新于 2026/7/21
SKILL.md
readonly只读
name
srt-booking
description

使用SRTrain库在韩国搜索、预订、查看和取消SRT车票。当用户询问SRT座位可用性、预订、取消或售罄重试计划时使用。

SRT 预订

技能功能

SRTrain 之上使用 scripts/srt_booking.py 辅助脚本来处理 SRT 查询和按车厢查看座位号,预订和取消则通过重新确认固定列车/预订后使用 SRTrain 进行。

使用场景

  • "帮我找从水西到釜山的SRT"
  • "明天上午的SRT有空位就帮我订"
  • "帮我查看SRT 5号车厢的空座位"
  • "帮我看看SRT 11A座位是否空着"
  • "优先显示靠窗的SRT空位"
  • "查看我的预订记录"
  • "取消这个SRT预订"

不使用场景

  • 需要自动完成支付的情况
  • 试图直接在聊天窗口发送密码的情况
  • 不是SRT而是KTX/Korail预订的情况

前提条件

  • Python 3.10+
  • python3 -m pip install SRTrain

所需环境变量

  • KSKILL_SRT_ID
  • KSKILL_SRT_PASSWORD

凭据解析顺序

  1. 如果环境变量中已存在,则直接使用。
  2. 如果代理正在使用自己的秘密存储(1Password CLI、Bitwarden CLI、macOS Keychain等),则可以从那里获取并注入为环境变量。
  3. ~/.config/k-skill/secrets.env(默认回退)——纯 dotenv 文件,权限 0600
  4. 如果都没有,则询问用户并存储到2或3中。

存储到默认路径只是回退方案,并非强制。

输入

  • 出发站
  • 到达站
  • 日期:YYYYMMDD
  • 期望开始时间:HHMMSS
  • 人数和乘客类型
  • 座位偏好:普通席/特等席
  • 座位详细条件:车厢等级、车厢号、座位号、仅显示空座、搜索优先级

工作流程

0. 全局安装缺失的包

如果 python3 -c 'import SRT' 失败,不要使用其他实现绕过,而是先尝试全局安装 Python 包。

python3 -m pip install SRTrain

1. 确保凭据可用

检查 KSKILL_SRT_IDKSKILL_SRT_PASSWORD 环境变量是否已设置。如果没有,则按照上述凭据解析顺序获取。

不要因为缺少秘密信息而直接抓取网站或寻找其他非官方途径。

2. 先搜索

首先使用辅助脚本查询并汇总候选列车。

python3 scripts/srt_booking.py search 水西 釜山 20260328 080000 --time-limit 120000 --limit 5

3. 在产生副作用前汇总选项

在预订前,始终简要汇总以下信息:

  • 出发/到达时间
  • 普通席/特等席可用性
  • 预计票价

4. 当用户询问座位号时查看详细座位

search 的座位可用性是列车级别的标志。当用户询问具体座位,如“剩余座位号”、“按车厢查看座位”、“特定座位”、“靠窗/顺向座位”、“预订前确认座位”时,在预订前调用 seats

python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id>

如果只想查看特定车厢的空座,使用 --car-no--available-only

python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id> --car-no 5 --available-only

要检查特定座位是否空着,添加 --seat

python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id> --car-no 5 --seat 11A

如果不指定特定车厢,则从中间车厢开始搜索。使用 --car-priority center|low|high 更改车厢搜索顺序,使用 --seat-priority forward-window|window-forward|row-low 更改座位排序优先级。

显示详细座位响应时,优先汇总以下信息:

  • 每节车厢的 available_seat_count
  • 剩余座位号(available_seats
  • 每个座位的 directionposition
  • 如果请求了特定座位,则显示 requested_seat_available

此功能不会选择或占用座位。实际预订仅在下一步进行。

5. 仅在确定列车后进行预订

预订有副作用,因此仅在选定确切列车后进行。

python3 - <<'PY'
import os
from SRT import Adult, SRT, SeatType

srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
trains = srt.search_train("水西", "釜山", "20260328", "080000", time_limit="120000")
reservation = srt.reserve(
    trains[0],
    passengers=[Adult(1)],
    special_seat=SeatType.GENERAL_FIRST,
)
print(reservation)
PY

6. 查看或取消

在取消前,重新确认目标预订。

python3 - <<'PY'
import os
from SRT import SRT

srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
reservations = srt.get_reservations()
print(reservations)
PY

完成条件

  • 如果是查询请求,候选列车已汇总
  • 如果是详细座位查询,每节车厢的剩余座位号或特定座位是否空着已汇总
  • 如果是预订请求,预订结果、票价和购买期限已确认
  • 如果是取消请求,已明确取消了哪个预订

失败模式

  • 登录错误:检查账户信息或SRT站点策略是否变更
  • 售罄:重新搜索其他时间段或座位类型
  • 座位选择页面格式变更:需要更新辅助脚本解析器
  • 网络错误:短暂重试,但避免激进轮询

备注

  • 详细座位查看以只读方式读取SRT网页座位选择页面
  • SRTrain 是SRT专用库,使技能意图更清晰
  • 不自动化完成支付
  • 自动重试循环应保持简短和保守,以保护账户