srt-booking

srt-booking

熱門

韓國 SRT 車票查詢、預訂、查看與取消,使用 SRTrain 函式庫。當使用者詢問 SRT 座位空位、訂票、取消或售罄重試方案時使用。

6422星標
735分支
更新於 2026/7/21
SKILL.md
唯讀
名稱
srt-booking
描述

韓國 SRT 車票查詢、預訂、查看與取消,使用 SRTrain 函式庫。當使用者詢問 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 專用函式庫,使技能意圖更明確
  • 不自動化完成付款
  • 為保護帳號,自動重試迴圈應保持簡短且保守