FM631A
手冊上採用的 PTX 資料服務平台因為政府整合資訊的關係, 在 2022 年底就不再提供服務, 要改成使用 TDX 運輸資料流通服務, 本文將說明如何修改程式改用新的平台獲取相同的資訊。
TDX 和 PTX 一樣都可以不註冊使用, 不過會有同一 IP 每日透過程式查詢 50 次的限制, 以下先說明如何使用 TDX 查詢手冊範例中的鐵路班車資訊與特定車站電子看板資訊。
要免註冊存取 TDX, 程式一定要加上 TDX 認得的瀏覽器名稱, 以 Firefox 為例, 我們可以如下設定 user-agent:
若是照手冊上設定成 curl 工具的名稱, 是會被 TDX 擋掉的。
你可以在慣用的瀏覽器開啟網頁開發者工具, 切換到主控台頁次, 執行 navigator.userAgent
指令, 即可得到瀏覽器的設定名稱:
實際上不需要輸入完整的內容, 只要前面的名稱/版本即可。
TDX 的 API 網址和 PTX 幾乎一樣, 只要修改小地方即可:
就可以存取同樣的服務了。實際的 API 網址可在 TDX 網站上查詢。
這裡以 1202 班次為例, 統合以上所說, 查詢這班次火車的起訖站資訊:
根據以上, 就可以把原始範例改成這樣:
lab10_tdx.py
如果不想受限於每天 50 次查詢, 請先至 TDX 網站註冊會員, 註冊後需要一段時間審核, 審核通過會收到通知信件, 即可登入使用。
要以會員身份使用 TDX API, 必須知道你的金鑰資訊, 請在登入後的頁面點選建立更多金鑰:
往下捲動找到你的預設 API Key, 按一下編輯:
就可以看到你的金鑰內含的兩項資訊:
實際上要以會員身份使用 TDX API, 必須分成以個階段:
上述過程聽起來就很麻煩, 詳細過程可以參考 〈TDX運輸資料流通服務API介接範例程式碼說明〉, 或是〈「TDX 運輸資料流通服務平台」含 Python 範例程式,PTX 平台的升級版~〉, 我們已經將整個過程包裝成好用的 tdx 模組, 可以大幅簡化程式。
tdx 模組也已經包含在範例檔中, 使用前請先上傳到控制版上。
tdx 模組使用上很簡單, 步驟如下:
以 Client Id 及 Client Secret 建立 TDX 物件:
傳入 TDX API 網址呼叫 TDX.get_json() 取得查詢結果轉換後的 JSON 物件:
是不是很簡單呢?這個物件會在叫用 API 之前確認 Access Token 的有效時間, 若已經過期, 就會自動重新索取。如果查詢出錯, 會傳回一個這樣格式的物件:
有了 tdx 模組, 我們就可以將原本的範例程式改寫, 不管如何使用 TDX API 都沒有問題 (好啦, 其實還是有限制, 每一 IP 每秒 50 次):
lab10_tdx_member.py