本文已過時作廢。 請改看新版: tdx7984: 自架公車到站時間查詢服務, 2407 版
如果你想要在自己的伺服器上自行架設 tdx7984 "去坐巴士" 服務 (github 專案首頁、 使用說明) 可以這樣做:
- 安裝相依套件:
apt install python3-flask python3-flask-cors python3-apscheduler
- 到交通部的運輸資料流通服務 tdx 網站註冊、 取得一組 ID 跟 secret。 詳見 我寫的簡介文。
- 請參考 tdx-credential.sh
先把 ID 跟 secret 設定到環境變數裡面,
也建好目錄以便存放 access_token。
執行這個 script:
source tdx-credential.sh
並且確認 $TDX_TOKEN_DIR 裡面出現了一個 tdx-credential.json 檔案、 確認echo $TDX_ACCESS_TOKEN
會出現一堆看似亂碼的通行憑證。 注意: 一定要用 source 或 . 執行, 環境變數才會保留下來。 - 從 tdx API 取得路線與站牌靜態資訊:
for ct in $(grep -Po '\b[A-Z]\w+$' cities.csv) ; do curl -H 'accept: application/json' -H "authorization: Bearer $TDX_ACCESS_TOKEN" "https://tdx.transportdata.tw/api/basic/v2/Bus/StopOfRoute/City/$ct" > $ct.json ; sleep 8 ; done
- (可略過) zq 範例: 列出某縣市所有路線名稱及起迄站名:
zq -f csv -i json 'over this | { SubRouteUID, name:SubRouteName.Zh_tw, begin:Stops[0].StopName.Zh_tw, end:Stops[-1].StopName.Zh_tw }' Taipei.json
- (可略過) zq 範例: 列出某縣市所有路線的所有站牌名稱:
zq -f csv -i json 'over this | over Stops with RouteUID,RouteName => ({rt_uid:RouteUID, rt_name:RouteName.Zh_tw, stn_id:StationID, stop_uid:StopUID, stop_name:StopName.Zh_tw})' Taipei.json
- 刪除舊的資料庫、重新建立空的資料庫:
rm -f routes_stops.sqlite3 ; sqlite3 routes_stops.sqlite3 < create_db.sql
- 把各縣市的 json 檔匯入 sqlite3:
python3 sqlify.py routes_stops.sqlite3
- (可略過) 進入 sqlite routes_stops.sqlite3, 然後測試:
select stop.uid, stop.cname, stop.station_id, stop.srt_uid, subroute.cname from stop join subroute on stop.srt_uid=subroute.uid where stop.cname="一女中(公園)" order by station_id
- 建立 log 檔的目錄:
mkdir ~/log
- 把 app.py 裡面的
ssl_context=...
那一段註解掉, 採用 http 而不採用 https。 - 執行
python3 app.py
- 用瀏覽器打開: http://localhost:7984/bus/
- 如果想恢復採用 https, 除了還原 ssl_context 那一段之外, 也必須先按照
這篇
裡面的
openssl req ...
指令 產生自製的 ssl 憑證, 並且將兩個 *.pem 放到 ~/secret/ 。
是說從這幾天冷清的 log 檔看來, 我應該不太需要設密碼; 大家應該可以繼續用我的服務, 不必自架。 不知道該高興還是難過 :-)
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。