Code Monkey home page Code Monkey logo

tdxmotc / samplecode Goto Github PK

View Code? Open in Web Editor NEW
51.0 1.0 17.0 790 KB

交通部為落實智慧運輸政策、加速運輸資料整合與開放,創建「TDX運輸資料流通服務平臺」,期透過Open API服務之整合,建立運輸領域開放資料的單一入口,便利加值業者從單一介面快速獲取所需資料。

Home Page: https://tdx.transportdata.tw

C# 38.67% HTML 15.35% CSS 4.73% JavaScript 11.56% Python 6.01% Java 12.80% R 7.24% PHP 3.63%

samplecode's Introduction

TDX運輸資料流通服務API介接範例程式碼說明

為使開發者能快速在M2M環境下介接使用TDX運輸資料流通服務平臺之交通領域資料服務API,在此提供數種程式語言的範例程式碼提供開發者做參考。

API使用次數限制

TDX API呼叫頻率限制已於2024/01/15改為 每把API金鑰每秒最多呼叫50次
未來導入訂閱機制時,將依會員不同的訂閱等級而有不同的限制次數。

API認證機制

TDX API皆使用OIDC Client Credentials流程進行身份認證,認證完成後即取得Access Token,將Access Token帶入即可存取TDX API服務。詳細步驟說明如下:

1. 註冊為TDX會員

TDX官網註冊為TDX會員,完成Email驗證、帳號經管理員審核後即可登入TDX網站。

2. 取得API金鑰

登入TDX網站後,於TDX會員中心取得API金鑰(包含Client Id和Client Secret),可視開發測試需求自行建立多組API金鑰(目前開放至多3組)。

3. 取得Access Token

取得Access Token的API為https://tdx.transportdata.tw/auth/realms/TDXConnect/protocol/openid-connect/token,使用 HTTP POST 方法、帶入Client Id和Client Secret進行驗證以取得Access token。以下為curl範例:

curl --request POST \
     --url 'https://tdx.transportdata.tw/auth/realms/TDXConnect/protocol/openid-connect/token' \
     --header 'content-type: application/x-www-form-urlencoded' \
     --data grant_type=client_credentials \
     --data client_id=YOUR_CLIENT_ID \
     --data client_secret=YOUR_CLIENT_SECRET \

參數說明如下:

參數 描述
grant_type 固定使用"client_credentials"
client_id 您的Client Id,可從TDX會員中心取得
client_secret 您的Client Secret,可從TDX會員中心取得

若帶入的參數正確,可收到HTTP 200回應與訊息:

{
    "access_token": "eyJh...",
    "expires_in": 86400,
    "token_type": "Bearer",
    (...省略其他內容)
}

回傳訊息欄位說明如下:

參數 描述
access_token 用於存取API服務的token,格式為JWT
expires_in token的有效期限,單位為秒,預設為86400秒(1天)
token_type token類型,固定為"Bearer"

待Access Token產生之後,若時間超過有效期限(expires_in參數),需使用Client Id和Client Secret重新取得Access Token。
您可在多個服務內同時使用同一組Client Id和Client Secret取得Access Token,新取得的token不會影響已存在token的有效性或時效性。

提醒您,若每次呼叫API時都重新取得Access Token,此作法將會提升程式端與TDX環境的網路與運算資源的消耗。
為了讓平台運算資源能更有效與公平的被使用,TDX已於2023/05/15開始限制 Access Token API 可存取次數: 每個IP來源每分鐘最多呼叫20次

建議您可在程式端實作Access Token快取機制,方法如下:

  • 方法1: 程式實作定期自動重新取得Token機制,如程式每4小時或6小時重取一次Access Token,每次呼叫API時皆使用該Token。
  • 方法2: 程式初始化時取得Token,每次呼叫API時帶入該Token,若發現Token過期再重新取得Token。

若有任何Access Token API使用方法或Token快取機制的問題,可於Issues留下您的意見,我們將盡快回覆您。

4. 呼叫TDX API服務

呼叫TDX API時將取得的Access Token帶入HTTP Authorization Bearer Header。curl範例如下:

curl --request GET \
     --url TDX_API_URI \
     --header 'authorization: Bearer ACCESS_TOKEN'

呼叫API時,可視需求加入Accept-Encoding HTTP Header,可有效減少資料回傳量。呼叫歷史資料類型API時,使用此設定將可大幅降低資料傳輸時間。使用方式如下:

Accept-Encoding: br,gzip

其他說明

傳輸加密通訊協定支援狀況

由於TLS 1.0與TLS 1.1已被證實具有安全風險,為確保網路連線機制的安全性,TDX API與網站僅支援TLS 1.2(含)以上之傳輸加密協定。
TLS與Ciphers支援狀況可參考SSL Labs工具檢測後的結果:

image

samplecode's People

Contributors

chiajung-yeh avatar iisi-1906009 avatar iisi-2205010 avatar itshenrywu avatar jia35 avatar tdxmotc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

samplecode's Issues

AppID,AppKEY是指什麼?

請問API中使用的AppID,AppKEY是指什麼(從那取得)? 我用node-red的http request呼叫API時一直回403 (HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication)

var jsSHA = global.get('jsSHA')
var AppID = 'bill???-164026aa-????-46b7';
var AppKey = '723529a5-????-????-????-56779266b460';

var GMTString = new Date(Date.now() + 7 * (60 * 60 * 1000)).toUTCString();
var ShaObj = new jsSHA('SHA-1', 'TEXT');
ShaObj.setHMACKey(AppKey, 'TEXT');
ShaObj.update('x-date: ' + GMTString);
var HMAC = ShaObj.getHMAC('B64');
var Authorization = 'hmac username="' + AppID + '", algorithm="hmac-sha1", headers="x-date", signature="' + HMAC + '"';

msg.headers = { 'Authorization': Authorization, 'X-Date': GMTString };
msg.url = "https://ptx.transportdata.tw/MOTC/v2/Bus/EstimatedTimeOfArrival/City/Taichung?$filter=StopName/Zh_tw eq '大甲槌球場' and RouteID eq '1541'&$top=30&$format=JSON";

return msg

新的 tdx 觀光 api,無法在子類別後面包含斜線,這樣對某些api套件會失效。會對不少公司有影響。

新的 tdx 觀光 api,無法在子類別後面包含斜線,這樣對某些重要套件會失效。會對不少公司有影響。

舊的 ptx api 可以包含子類別後面有斜線。這樣對於 axios 等,這類常見api 套件,做串接包裝會很方便。

例如:
https://ptx.transportdata.tw/MOTC/v2/Tourism/ScenicSpot?$filter=contains(ScenicSpotID,'C1_379000000A_000212')&$format=JSON

https://ptx.transportdata.tw/MOTC/v2/Tourism/ScenicSpot/?$filter=contains(ScenicSpotID,'C1_379000000A_000212')&$format=JSON

上述兩條網址,在 舊的 ptx api ,ScenicSpot後面可以包含斜線。

新的 tdx api 則無法包含斜線,這樣對於接api 的套件的相容性,包裝會非常差..會有bug 無法呼叫的問題。

新的 tdx api,我也給2條網址

如下:
https://tdx.transportdata.tw/api/basic/v2/Tourism/ScenicSpot?$filter=contains(ScenicSpotID,'C1_379000000A_000212')&$format=JSON

https://tdx.transportdata.tw/api/basic/v2/Tourism/ScenicSpot/?$filter=contains(ScenicSpotID,'C1_379000000A_000212')&$format=JSON

上述都是 請求一樣的內容,但子類別 ScenicSpot後面,第1條網址,前者無斜線,可以得到結果。
但第2條網址,ScenicSpot 子類別後面 加上斜線,就會無法得到對應的結果。

這個相容性會變差,會造成 眾多 api套件整合包裝時,造成bug,建議可以趕快修正。

我發現到,建議可以趕快改善,因為應該不少公司接下來12/01換 api 都會造成影響。

我是自己做 side-project 發現的,來信叨擾了,感謝你們。

請問有swift的範例嗎?

小弟用alamofire能用,
但uikit內建的始終都是收到400,
想請問有沒有swift的範例,
謝謝!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.