Python PNR一鍵查票:輸入號碼秒出座位狀態——再也不用刷12306
PNR查詢, 實時座位, 離線腳本, 零廣告, 瑞士軍刀
故事開場:一把瑞士軍刀救了趕火車的你
周五傍晚,你拎著行李沖向站臺,手機信號一格,12306 死活刷不出座位。
廣播里列車即將關門,你卻不知道到底有沒有鋪位。
這時,你從口袋掏出“小白瑞士軍刀”——pnr_status_checker.py
。
終端里輸入:
enter the PNR number
>>> 1234567890
10 秒后屏幕跳出:
train name : Howrah Express
from station : Howrah Jn
to station : New Delhi
chart prepared : True
passenger 1 : CNF S4 23
直接沖上車,安心補票。
痛點解決:再也不用開瀏覽器、看廣告,一條命令實時查座位。
完整代碼(≤1000字符,直接展示)
import requests
api_key = "<your API KEY>" # 替換成自己的
base_url = "https://api.railwayapi.com/v2/pnr-status/pnr/"
pnr = input("請輸入 PNR 號碼:")
url = f"{base_url}{pnr}/apikey/{api_key}/"
data = requests.get(url).json()if data["response_code"] == 200:print("車次:", data["train"]["name"])print("出發:", data["from_station"]["name"])print("到達:", data["to_station"]["name"])print("日期:", data["doj"])print("圖表已生成:" if data["chart_prepared"] else "圖表未生成")for p in data["passengers"]:print(f"乘客{p['no']}:{p['current_status']} / {p['booking_status']}")
else:print("未找到記錄")
代碼解析
功能塊 1:一鍵拼 URL
把 PNR 和 API Key 拼成完整請求,零配置。
url = f"{base_url}{pnr}/apikey/{api_key}/"
功能塊 2:狀態解析
response_code == 200
即成功,直接讀 JSON 里的車次、座位。
if data["response_code"] == 200:print("車次:", data["train"]["name"])
功能塊 3:乘客循環
循環打印每位乘客的當前/預訂狀態,一目了然。
for p in data["passengers"]:print(f"乘客{p['no']}:{p['current_status']}")
如果還想更厲害
擴展點子 1:命令行參數
加 --pnr 1234567890
,腳本秒跑。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--pnr', required=True)
args = parser.parse_args()
擴展點子 2:GUI 輸入框
用 tkinter
做窗口,輸入 PNR 即查詢。
import tkinter.simpledialog as sd
pnr = sd.askstring("PNR", "請輸入 PNR 號碼")
總結
pnr_status_checker.py
這把 30 行瑞士軍刀,把“開瀏覽器→登錄→驗證碼→排隊”四步壓縮成“輸入 PNR+回車”。
你無需賬號、無需廣告,就能在 Windows/Mac/Linux 上秒查列車座位。
再加兩行參數或 GUI,它就從腳本升級成隨身票務助手。
下次再趕火車,直接敲命令,座位實時到手!
源碼獲取
完整代碼已開源,包含詳細的注釋文檔:
🔗 [GitCode倉庫] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [備用下載] https://pan.quark.cn/s/654cf649e5a6 提取碼:f5VG