2022年10月30日 星期日

運輸資料流通服務 tdx 範例

交通部把 「公共運輸整合資訊流通服務平台 ptx」 改版升級成 「運輸資料流通服務 tdx」。 查詢公車站牌、 公車目前位置等等資訊變得更方便了! 請見 範例程式 以及 市公車 API 清單與示範

tdx 會員 API 金鑰 首先, 你需要註冊一個會員帳號, 然後就會自動取得一組 ID 跟 Secret。

把這組 ID 跟 Secret 填入範例程式的 tdx-credential.sh, 即可執行並取得一個 json 檔, 內含 access_token。 請把程式中的 $TDX_TOKEN_DIR/tdx-credential.json 改成你自己設定的路徑, 不要 放在 apache2 (或其他網頁伺服器) 讀得到的地方。 路徑必須是所有人可執行; 檔案本身必須是所有人可讀取。 (主要是需要讓網頁伺服器執行者 www-data 讀取。) 。

這個 tdx-credential.sh 可以設定成用 cron 每天半夜執行, 因為它取得的 access_token 每 24 小時就會過時作廢。 不知為什麼, 我用 httpie 套件提供的 http 指令去取得 access_token, 如果從命令列執行就會成功; 但如果放在 cron job 裡面就會失敗。 懶得研究了, 還是採用官網提供的 curl 範例比較簡單。

然後你的程式就可以去讀取 access_token, 用它來呼叫 tdx 的服務。 例如可以在命令列上作實驗:
export TDX_TOKEN_DIR="..." # 自己填
export TDX_ACCESS_TOKEN=$(jq .access_token $TDX_TOKEN_DIR/tdx-credential.json | sed 's/"//g')
curl -H 'accept: application/json' -H "authorization: Bearer $TDX_ACCESS_TOKEN" "https://tdx.transportdata.tw/api/basic/v2/Bus/RealTimeByFrequency/City/Taichung/151" > ~/151.json
又例如範例程式的 bus-pos.php 就去呼叫 api/basic/v2/Bus/RealTimeByFrequency/City/Taichung/151 之類的, 取得目前在路上跑的所有台中市 151 號公車的位置, 並將傳回的陣列轉成一個 geojson 檔。 測試網址。 新的介面使用起來比舊的介面簡單很多, 也有很多語言的 範例程式。 不過 「台灣等公車」 還算好用, 結果我現在好像沒什麼動力自己寫查詢公車資訊的程式了 :-)

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。