2018年1月20日 星期六

ptx 公共運輸整合資訊流通服務平台 bash 及 php 範例

公車動態地圖 去年中才知道這個好站: 交通部透過 公共運輸整合資訊流通服務平台 (PTX) 提供各種大眾運輸工具的時刻/路線/動態/...等等政府開放資料, 正好可以拿來實作我心目中理想的 具有運算思維的公車動態地圖。 最近終於有空, 用它重新寫好公車動態 geojson 查詢 (範例: 公車即時動態 geojson 文字檔之 臺中市 151 路 高雄市 100 路; 其他都市名稱請見 官網說明文件 第 4 頁; 原始碼)。 壞掉好久的 朝陽科大五路線公車動態地圖 終於又可以動了! 以下分享範例程式及注意事項給 php 程式設計師。 "

官網的範例程式碼 沒有 php 的範例; 會員 Benyi 所提供的 php 範例太進階了, 我的 php 很菜, 看到 OOP 跟一堆相依套件就手軟了啊~~ 改從 javascript 版範例程式著手, 先試出 bash 版範例, 然後很快就完成陽春簡單的 php 版範例。 幾個重點提示:

  1. 小量測試的話, 其實根本不需要申請帳號。 官網的 javascript 範例裡所採用的那組 (從頭到尾全部是 F 的) id 與 key 直接就可以用。 大量使用我就不知道了; 正式上線的版本, 我就套用自己的 key 跟 id。
  2. key 跟 id 是私密資料, 建議採用 這篇文章 "PHP Cookbook" 那一段的做法, 把 SetEnv PTX_ID "..."SetEnv PTX_KEY "..." 放在一個私密的檔案裡, 從 apache 的設定檔裡面去 include 它。
  3. 時間格式一定要轉成 GMT 而非臺灣時間 (GMT+8)。
  4. 要餵給 hmac 演算法的時間字串, 格式必須一模一樣, 不能少一個空白 (例如 "x-date:" 後面)、 多一個空白, 或有任何大小寫不同。
  5. 要傳給 http 伺服器的 "x-data:" 標頭, 大小寫都可以, 但冒號後面不能有空格。 搜尋不到詳細解釋的文章, 只能從一篇 資安攻防文 跟讀不懂的 RFC 7230 猜測這個嚴格的規定跟資安防護有關。 很多開發者都跟我一樣迷惑。
  6. 下一步就可以略讀官網的 PTX API URI Convention 說明文件, 測試更多 API 了。

又, 在 bash 底下測試時, 搜尋到一個好物: HTTPie:超爽的HTTP命令行客户端 httpie人性化curl工具使用详解。 雖然我只用到最簡單的 「設定 header」 功能, 但看起來未來如果需要處理更複雜的 http 通訊協定, 這真是個恩物啊!

2 則留言:

  1. 我有使用您的Code做開發
    昨天他們患了伺服器之後
    就一直403無法使用了
    想請問你有這個狀況嗎?

    回覆刪除
  2. 謝謝提醒! 修好了。 原來日期要寫兩位, 例如今天, 要寫 04 Feb 不能寫 4 Feb。

    回覆刪除