iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
自我挑戰組

30 天養大一個開源專案:baodao-skill 從零開始系列 第 12

【Day 12】YouBike 全台即時站況:一支統一 feed、台臺之亂,和欄位命名的兩派鬥爭

  • 分享至 

  • xImage
  •  

先講結論:baodao-skill 現在查得到全台灣 YouBike 2.0 的即時站況——可借幾台、可還幾個空位、有沒有電輔車。youbike-realtime 免金鑰免登入,2026-09-10 實測 9,521 站、14 個服務區一次取回,資料更新時間跟查詢時刻只差約一分鐘。

這個 skill 有兩層資料源。第一層是 youbike.com.tw 地圖實際在用的統一 JSON feed:

curl -sm 60 https://apis.youbike.com.tw/json/station-yb2.json -o /tmp/youbike_all.json

約 6.2MB,全台一站不漏。它的價值在覆蓋率:高雄、台南這些市府開放平台沒有(或境外連不上)的縣市,統一 feed 都有,而且每站都有電輔車明細(yb1/yb2/eyb)。代價是它不是公開文件化的 API,欄位可能無預警調整,所以第二層各市府 feed 留作備援。這支 feed 被 Incapsula 擋 GitHub Actions 的故事之前寫過,這裡不重複,只記結論:從台灣 IP 一切正常。

真正花時間的是兩個資料個性。

第一個是「台臺之亂」。站名裡「台」和「臺」混用:統一 feed 全台有 385 站名含「臺」。使用者打「台大」找車,名叫「臺大」的站會全部漏掉。解法是搜尋前把站名和關鍵字都 gsub("臺";"台") 正規化再比對,一行 jq 的事,但不寫進 skill 就會一直漏。

第二個是市府備援 feed 的欄位命名分兩派:台北派用 available_rent_bikes / available_return_bikes(數字型),其他三市派用 sbi / bemp(字串型,新北又叫 sbi_quantity)。同一個 jq 篩選式不能跨派使用,skill 裡兩派的寫法分開收錄。

還有一個小陷阱:area_code 是字串而且含英文字("0A" 是苗栗、"10" 是新竹科學園區),比對時不能當數字;lat/lng 也是字串,算最近站點前要 tonumber。找附近五站有車的完整 jq 都收在 skill 裡了。

到這裡交通類就位:垃圾車知道幾點來,YouBike 知道哪裡有車。台灣的開放資料繼續證明同一件事——資料都在,只是每個來源都有自己的脾氣要摸。


上一篇
【Day 11】寄信到台灣:郵遞區號、Big5,和 Windows 才能查的 3+3
下一篇
【Day 13】農曆與節氣不用 API:閏年 24 錯 21 的流傳公式,和太陽視黃經的 15 度
系列文
30 天養大一個開源專案:baodao-skill 從零開始15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言