台灣公車 Open Data

前言

最近有機會研究了一下台灣公車的 Open Data,發現各個縣市政府都是各自為政,相關的文件也是有不同程度的缺失,需要自行各個突破,幫自己做個記錄。

公車必備資訊

不管是哪個城市,公車都需要以下的資訊。

路線


  1. 路線名稱
  2. 路線 ID
  3. 路線起點
  4. 路線終點

站牌


  1. 站牌名稱
  2. 站牌 ID
  3. 站牌位置(經緯度)
  4. 站牌屬於去或回程
  5. 站牌在路線中的順序

預計到達時間


  1. 路線 ID
  2. 站牌 ID
  3. 站牌預計到達時間

台北市

資料來源:

資料格式:

  • JSON
  • XML

使用心得:

主要的問題有 2 個:

  1. Open Data 的來源不一致是個問題,路線與站牌是一個,到站時間是另一個。
  2. 預計到達時間 API,不知為何針對單條路線進行查詢的時候,台北市政府的網站常常都會回應 Cache Miss,取而代之的就只能下載全部的路線的到站時間再做後置處理。

新北市

資料來源:

資料格式:

  • JSON
  • XML
  • CSV

使用心得:

主要的問題有 3 個:

  1. 路線的資料中沒有起點與終點站 Orz,雖然站牌的資料中是有路線的起點與終點,但是…是錯的!最後只能到新北市政府的公車動態網站抓資料了。
  2. 預計到達時間的單位是分鐘,台北市的單位是秒。
  3. 某些路線的預計到達時間的站牌 ID 竟然會與站牌 API 抓到的不一致,舉例來說站牌 API 回傳的站牌 ID 是 “801”,預計到達時間的站牌 ID 回傳的是 “0801” 我也真是無語了。

高雄市

資料來源:

資料格式:

  • XML
  • JSON (隱藏版)

使用心得:

主要的問題有 3 個:

  1. 預計到達時間是使用真實到站時間,比如說現在時間是 15:00,143 路線的車會再 3 分鐘後到達站牌 A,API 回傳的到站時間會是 15:03
  2. 站牌屬於去或回程的代碼相較於台北與新北市的有所不同 (0: 去, 1: 回),高雄市用得是另一組代碼 (1: 去, 2: 回)
  3. Open Data 上有直接標明有 Json 格式的 API 只有一部分,但我又很不想爬 XML,經過了一番努力找到了公車的 JSON 版的資料,不過網站上都沒有標明這種做法,而且 JSON 格式也不是完全的正確,需要再後置處理。Json 版與 XML 版的 URL 就是差了幾個字 (xml => json),舉例取得公車站點資料的 URL 如下:

[XML]

http://ibus.tbkc.gov.tw/xmlbus/StaticData/GetStop.xml?routeIds=111

[JSON]

http://ibus.tbkc.gov.tw/xmlbus/StaticData/GetStop.json?routeIds=111

總結

好像跟前言差不多,大概就是各個政府的 Open Data 說明文件都不是很齊全,都得開發人員自己想辦法去對照,還有格式也都不太統一,希望政府未來可以統籌規劃吧。