REST API
API 文件
15 個 RESTful 端點(13 個 CPBL 分析 + 2 個 Infra)。分析 API 唯讀(GET)無需認證; Infra API 走 Bearer auth 保護內部資源(如 Workers AI 額度)。
總覽
17
端點
3
資源群組
GET
唯讀
API 由 Hono on Cloudflare Workers 建置並透過 HTTPS 提供。所有回應均為 JSON。CORS 開放。
Base URL:https://murs-api.yenru.workers.dev
回應格式
/api/games 使用分頁信封:
分頁信封
{
"items": [ ... ],
"total": 370,
"page": 1,
"per_page": 50
}錯誤處理
404 找不到
{ "detail": "Game '20250401001' not found" }422 驗證錯誤
{ "detail": [{ "loc": ["query", "year"], "msg": "value is not a valid integer" }] }500 內部錯誤
{ "detail": "Internal Server Error" }Games
2 個端點GET
/api/cpbl/games列出比賽(分頁)查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | — | 季節年份 |
| team | string | — | 按球隊代碼篩選 |
| page | integer | 1 | 頁碼 |
| per_page | integer | 50 | 每頁項目數 (1-200) |
範例回應
{
"items": [{
"game_id": "20260401001",
"game_date": "2026-04-01",
"home_team": "CTBC",
"away_team": "UNI",
"home_score": 5,
"away_score": 3
}],
"total": 370, "page": 1, "per_page": 50
}GET
/api/cpbl/games/{game_id}按 ID 取得單一比賽路徑參數
game_id — 字串,找不到時返回 404
範例回應
{
"game_id": "20260401001",
"game_date": "2026-04-01",
"home_team": "CTBC",
"away_team": "UNI",
"home_score": 5, "away_score": 3,
"venue": "天母棒球場"
}Players
2 個端點GET
/api/cpbl/players列出所有球員查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| team | string | — | 按球隊代碼篩選 |
範例回應
[{
"player_id": "P001234",
"name_zh": "林智勝",
"team": "CTBC",
"position": "1B",
"bats": "R", "throws": "R"
}]GET
/api/cpbl/players/{player_id}按 ID 取得球員路徑參數
player_id — 字串,找不到時返回 404
範例回應
{
"player_id": "P001234",
"name_zh": "林智勝",
"team": "CTBC",
"position": "1B"
}分析
9 個端點GET
/api/cpbl/analysis/lobLOB%投手 LOB% 排行榜查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
| min_ip | float | 10 | 最低投球局數 |
範例回應
[{
"player_id": "cpbl_王維中",
"player_name": "王維中",
"team": "味全龍",
"lob_pct": 0.782, "ip": 156.2,
"league_avg": 0.702,
"is_lucky": true, "is_unlucky": false
}]GET
/api/cpbl/analysis/count球數打者球數分組查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
| batter | string | — | 球員 ID,如 cpbl_林安可 |
範例回應
{
"player_id": "cpbl_林安可",
"total_pa": 520,
"first_pitch_swing_pct": 0.32,
"ahead": { "ba": 0.345, "k_pct": 0.12 },
"behind": { "ba": 0.198, "k_pct": 0.38 },
"two_strike": { "ba": 0.175, "k_pct": 0.42 }
}GET
/api/cpbl/analysis/fatigue疲勞投手疲勞排行榜查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
| min_ip | float | 10 | 最低局數 |
範例回應
[{
"pitcher_id": "cpbl_徐若熙",
"team": "中信兄弟",
"games": 28,
"total_pitches": 2850,
"fatigue_threshold_pitch": 75,
"overall_ba_against": 0.228
}]GET
/api/cpbl/analysis/fatigue/{pitcher_id}疲勞投手疲勞曲線路徑參數
pitcher_id — 如 cpbl_徐若熙
範例回應
{
"pitcher_id": "cpbl_徐若熙",
"buckets": [{
"pitch_start": 1, "pitch_end": 15,
"ba_against": 0.195, "k_pct": 0.28,
"is_fatigue_point": false
}]
}GET
/api/cpbl/analysis/clutchClutch關鍵時刻排行榜查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
| min_pa | integer | 10 | 最低打席數 |
範例回應
[{
"player_id": "cpbl_林安可",
"team": "統一7-ELEVEn獅",
"overall_ba": 0.325,
"high_li_ba": 0.380,
"clutch_score": 0.145
}]GET
/api/cpbl/analysis/wrcwRC+wRC+ 排行榜查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
範例回應
[{
"player_name": "林安可",
"team": "統一7-ELEVEn獅",
"avg": 0.325, "obp": 0.401, "slg": 0.535
}]GET
/api/cpbl/analysis/babipBABIPBABIP 分析查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
範例回應
[{
"player_name": "林安可",
"babip": 0.342,
"league_avg": 0.298
}]GET
/api/cpbl/analysis/parkPark球場因子查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
範例回應
[{
"venue": "天母棒球場",
"park_factor": 1.12,
"games": 45
}]GET
/api/cpbl/analysis/splits半季半季分割查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| year | integer | 2026 | 賽季年份 |
範例回應
[{
"player_name": "朱育賢",
"first_half_avg": 0.248,
"second_half_avg": 0.341,
"diff": 0.093
}]Infra (內部)
2 個端點GET
/api/health服務健康檢查。帶 `?detail=true` 且 Bearer auth 時回傳 4 個 D1 的 latency查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| detail | boolean | false | 詳細模式需 Bearer |
範例回應
{
"status": "ok",
"timestamp": "2026-04-18T12:00:00Z"
}POST
/api/ai/embedCloudflare Workers AI bge-m3 embedding(內部 MCP 用,需 Bearer auth)查詢參數
| 參數 | 類型 | 預設值 | 描述 |
|---|---|---|---|
| text | string | — | Body JSON: 要 embed 的文字(≤24K chars) |
範例回應
// POST /api/ai/embed
// Authorization: Bearer <AI_EMBED_SECRET>
{
"embedding": [0.004, -0.025, ...], // 1024-dim
"dims": 1024,
"model": "@cf/baai/bge-m3"
}