本章節將會教您如何從PTX服務平台公共運輸整合資訊流通服務平台,撈取政府公開的公車站牌或是即時的公車位置資料,並且將資料匯入資料庫當中。
PTX資料撈取與儲存
PTX API 服務
首先我們先進入PTX官方網站,點選紅框處的「線上API說明」。
點選後我們可以看到有許多API,可以提供給我們進行撈取使用,這邊就先以公路客運公車站牌為例,點選GET /v2/Bus/StopOfRoute/InterCity 取得公路客運路線與站牌資料,可以看到這個API有提供許多可供篩選的選項,例如只要前50筆資料或是只要某縣市範圍的公車站牌資料等等…
我們將滑鼠移到$format,點選XML格式並按下左下角的「Try it out!」。
點開後我們可以看到PTX幫 將PTX資料輸入至資料庫中.md 我們預設帶出30筆公車站牌資料,在URI中可以觀察到top=30,意思是我們只要取前30筆資料即可;format=JSON的意思則是要求PTX將我們要查詢的資料依照XML或是JSON的資料格式回傳,方便我們後續針對資料進行處理。我們先複製紅框處的Request URI,並且打開EXCEL。
XML資料匯入Excel
打開Excel後點選「資料」→「取得外部資料」→「從其他來源」→「從XML資料匯入」,然後將剛剛複製下列的URI貼至檔案名稱並按「開啟」。
1 | https://ptx.transportdata.tw/MOTC/v2/Bus/StopOfRoute/InterCity?$top=30&$format=XML |
過程中Excel會問你XML資料結構與資料匯入位置等問題,我們直接按「確定」就可以了。
過一段時間後,Excel會自動透過REST API從PTX中撈取30條公路客運站牌資料,並且將其匯入活頁簿當中。如果我們想要撈取全部的公車站牌資料,則須將URI中的top=30刪除,改成下列網址,但由於資料量較為龐大,所以可能撈取的時間也會相對較久。公車站牌資料撈取完成後,將Excel以CSV的格式儲存於桌面中,待下一步匯入使用。
1 | https://ptx.transportdata.tw/MOTC/v2/Bus/StopOfRoute/InterCity?$format=XML |
Csv資料匯入MySQL中
DBeaver CSV Database
打開DBeaver這個SQL Client軟體,並且新增新的資料庫,這邊選擇CSV作為資料庫類型。
點選Browse,選擇桌面作為路徑,接著點選Test Connection測試該路徑中是否有相對應的資料,若確任沒有問題後點選完成。
此時回到資料庫進行查看,可以看到一個名為CSV - Desktop的資料庫,點開後打開資料表,在資料表中可以看到Stop資料表。對Stop資料表按右鍵,點選「在SQL Console中查看資料」(中英文有所差異),如果搜尋出來時發現中文為亂碼的狀態,我們透過記事本將Stop.csv檔案打開,看右下角的編碼格式,若是ANSI則另存新檔並挑選UTF-8格式。
上述操作完成後,我們就可以透過SQL語法正常操作公路客運的資料,例如…
透過條件式篩選基隆地區的公車站牌。
1 | SELECT * FROM Stop WHERE LocationCityCode ='KEE' ; |
或是統計基隆地區有多少站牌。
1 | SELECT COUNT(*) FROM Stop WHERE LocationCityCode ='KEE' ; |
將CSV Database匯入MySQL
對Stop點選右鍵,並按輸出資料。
點選Database作為輸出目標。
點選以前新增的Ubuntu虛擬機與資料庫。
點選好目標資料庫後,目標資料夾會呈現「?」,此時點選左下角的Auto assign,正常情況下會預設與資料來源表相同名稱(Stop);
接下來點選Columns..來調整一下每個欄位的字串長度。
將紅框處的string(32767)更改為string(100),UpdateTime欄位的屬性改為Datetime,全部修改完成後點選OK。
當你看到這個畫面時,表示DBeaver準備好開始幫你從CSV資料庫複製資料至MySQL當中,Start大力地給他按下去。
若運行完成後,csv table的資料就會複製到MySQL資料庫內,未來若專題或是工作上遇到資料量龐大的CSV檔,EXCEL無法處理時,都可以透過這個方法進行資料上的處理。