前言
最近有機會研究了一下台灣公車的 Open Data,發現各個縣市政府都是各自為政,相關的文件也是有不同程度的缺失,需要自行各個突破,幫自己做個記錄。
公車必備資訊
不管是哪個城市,公車都需要以下的資訊。
路線
- 路線名稱
- 路線 ID
- 路線起點
- 路線終點
站牌
- 站牌名稱
- 站牌 ID
- 站牌位置(經緯度)
- 站牌屬於去或回程
- 站牌在路線中的順序
預計到達時間
- 路線 ID
- 站牌 ID
- 站牌預計到達時間
台北市
資料來源:
資料格式:
- JSON
- XML
使用心得:
主要的問題有 2 個:
- Open Data 的來源不一致是個問題,路線與站牌是一個,到站時間是另一個。
- 預計到達時間 API,不知為何針對單條路線進行查詢的時候,台北市政府的網站常常都會回應 Cache Miss,取而代之的就只能下載全部的路線的到站時間再做後置處理。
新北市
資料來源:
資料格式:
- JSON
- XML
- CSV
使用心得:
主要的問題有 3 個:
- 路線的資料中沒有起點與終點站 Orz,雖然站牌的資料中是有路線的起點與終點,但是…是錯的!最後只能到新北市政府的公車動態網站抓資料了。
- 預計到達時間的單位是分鐘,台北市的單位是秒。
- 某些路線的預計到達時間的站牌 ID 竟然會與站牌 API 抓到的不一致,舉例來說站牌 API 回傳的站牌 ID 是 “801”,預計到達時間的站牌 ID 回傳的是 “0801” 我也真是無語了。
高雄市
資料來源:
資料格式:
- XML
- JSON (隱藏版)
使用心得:
主要的問題有 3 個:
- 預計到達時間是使用真實到站時間,比如說現在時間是 15:00,143 路線的車會再 3 分鐘後到達站牌 A,API 回傳的到站時間會是 15:03
- 站牌屬於去或回程的代碼相較於台北與新北市的有所不同 (0: 去, 1: 回),高雄市用得是另一組代碼 (1: 去, 2: 回)
- 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 說明文件都不是很齊全,都得開發人員自己想辦法去對照,還有格式也都不太統一,希望政府未來可以統籌規劃吧。