cpbl
Query CPBL 中華職棒 scores schedules live games standings player stats news and Taiwan baseball history for Taiwan users Use when the user asks about CPBL 戰績 賽程 即時比分 球員數據 排行榜 新聞 年度獎項 二…
ichendong
@ichendong
What This Skill Does
Query CPBL (Chinese Professional Baseball League) data including live scores, schedules, standings, player stats, news, and historical Taiwan baseball facts through bundled scripts and web search. Uses official CPBL APIs for current data and Scrapling StealthyFetcher for the Taiwan Baseball Wiki (twbsball) which blocks standard fetch tools.
Replaces manually browsing multiple CPBL websites and the Taiwan Baseball Wiki by providing a single command-line interface for scores, stats, schedules, and historical awards.
When to Use It
- Check today's CPBL live scores and game status
- Look up a team's current standings and win-loss record
- Find a player's batting or pitching stats for a specific season
- Get the full month's CPBL schedule including game types
- Search for historical CPBL award winners or player career data
- Read recent CPBL news or postponement announcements
Install
$ openclaw skills install @ichendong/cpblCPBL
Use the bundled scripts for official-site data first.
Use web_search for recent news.
Use Scrapling StealthyFetcher for 台灣棒球維基館 (awards history, player career data) — the site uses Anubis protection that blocks standard fetch tools, but Scrapling's stealth browser can access it.
Do NOT use web_fetch or Playwright for twbsball — they will be blocked by Anubis.
Primary workflow
- Pick the narrowest script that matches the request.
- Prefer text output for user-facing answers and JSON output for chaining or debugging.
- If the official source cannot provide the requested historical fact, use Scrapling
StealthyFetcherto fetch 台灣棒球維基館. - If a result looks empty or partial, check
references/api-endpoints.mdbefore assuming the data does not exist.
Script map
scripts/cpbl_live.py即時比分 今日賽況 指定日期賽況scripts/cpbl_games.py已完賽結果 歷史比賽scripts/cpbl_schedule.py賽程scripts/cpbl_standings.py戰績 排名scripts/cpbl_stats.py球員與排行榜數據
Common commands
uv run skills/cpbl/scripts/cpbl_live.py --output text
uv run skills/cpbl/scripts/cpbl_live.py --date 2026-04-01 --team 兄弟
uv run skills/cpbl/scripts/cpbl_games.py --year 2025 --limit 10
uv run skills/cpbl/scripts/cpbl_schedule.py --month 2026-04 --all
uv run skills/cpbl/scripts/cpbl_standings.py
uv run skills/cpbl/scripts/cpbl_stats.py --year 2025 --category batting --top 10
Game type codes
A一軍例行賽 預設B一軍明星賽C一軍總冠軍賽D二軍例行賽E一軍季後挑戰賽F二軍總冠軍賽G一軍熱身賽H未來之星邀請賽X國際交流賽
Live score notes
- Live data is polled from the official source and is not push-based.
- API data may lag by a few minutes.
- When
PresentStatusshows "比賽中" but/box/getlivereturnsGameStatus=3, the script corrects the status to "已結束" automatically. - Finished games now include detailed Box Score: pitcher lines (IP/H/ER/K/BB/HR/H/SV/speed) and key batter lines (AB/H/RBI/HR/R/SB).
- Game duration is displayed in
Xh Xmformat (e.g. 3h23m). - Monday often has no games unless adjusted by holidays or makeup scheduling.
Schedule cache
If a request is about schedule, check memory/cpbl_schedule_YYYY.md first.
Refresh the cache when the file is missing, stale, or the requested range extends beyond the cached range.
Recommended refresh command
uv run skills/cpbl/scripts/cpbl_schedule.py --month YYYY-MM --all
Postponement info
To check today's postponement announcements, fetch the official news page:
https://cpbl.com.tw/news
Look for the latest "延賽公告" entry. The live script now auto-detects postponed games (0:0 + no winning/losing pitcher).
History and awards
台灣棒球維基館 (twbsball) 自 2026-05 起啟用 Anubis v1.25.0 防護機制。
web_fetch、tavily_extract、Playwright 無法存取該站。
使用 Scrapling StealthyFetcher 可以正常存取(已驗證)。
查詢維基館的方法(優先順序)
- Scrapling StealthyFetcher — 使用 CPBL venv 裡的
scrapling直接抓取維基館頁面(已驗證可用) web_search/tavily_search— 搜尋引擎快照- 維基百科 (zh.wikipedia.org)
- 請使用者手動查詢
Scrapling 查詢維基館
CPBL 腳本皆為 PEP 723 inline script,uv run 會自動處理依賴,不需手動建 venv 或 pip install。
不要用 web_fetch 或 Playwright。
安裝(首次使用前):
# 唯一需要手動裝的:patchright browser(StealthyFetcher 底層依賴)
# 利用 cpbl_games.py 等腳本已有的 scrapling[ai] 依賴
cd skills/cpbl && uv run --with "scrapling[ai]" --with curl_cffi patchright install
使用 cpbl_twbsball.py(推薦):
uv run skills/cpbl/scripts/cpbl_twbsball.py "中華職棒年度最有價值球員"
uv run skills/cpbl/scripts/cpbl_twbsball.py "陳鏞基" --output json
或直接在 Python 中使用:
from scrapling.fetchers import StealthyFetcher
page = StealthyFetcher.fetch(
"https://twbsball.dils.tku.edu.tw/wiki/index.php?title=中華職棒年度最有價值球員",
headless=True,
wait=10000,
)
text = page.css("#mw-content-text")[0].get_all_text()
print(text)
注意事項:
wait=10000(毫秒) 讓 Anubis PoW 挑戰完成,頁面載入後才抓- headless=True 即可,不需 headful
- 啟動較慢(要啟動 stealth browser),約需 10-15 秒
- 如果要查多個頁面,使用
StealthySession複用同一個 browser 實例:
from scrapling.fetchers import StealthySession
with StealthySession(headless=True) as session:
page1 = session.fetch("https://twbsball.dils.tku.edu.tw/wiki/index.php?title=中華職棒年度最有價值球員")
text1 = page1.css("#mw-content-text")[0].get_all_text()
page2 = session.fetch("https://twbsball.dils.tku.edu.tw/wiki/index.php?title=中華職棒年度最佳新人獎")
text2 = page2.css("#mw-content-text")[0].get_all_text()
常用維基館頁面
中華職棒年度最有價值球員(MVP)中華職棒年度最佳新人獎(新人王)球員姓名(球員生涯資料)- URL 格式:
https://twbsball.dils.tku.edu.tw/wiki/index.php?title=頁面標題
References
Read these only when needed
references/api-endpoints.mdofficial-site endpoint behavior and quirksreferences/summary.mdproject background and current limitationsreferences/test-report.mdprior investigation details
Known limits
- Some official endpoints return HTML fragments instead of JSON.
- Some standings and schedule flows are brittle because the site relies on AJAX plus CSRF.
- If a script returns partial data, do not invent missing values. State the limit and fall back to another source when possible.
- 台灣棒球維基館 (twbsball) 自 2026-05 起啟用 Anubis 防護機制。
web_fetch/Playwright 無法存取,使用 ScraplingStealthyFetcher可以正常讀取(見上方 History and awards 段落)。
Top skills in this category
Playwright (Automation + MCP + Scraper)
@ivangdavilaAutomates, tests, and debugs browsers with Playwright: locators, auto-waiting, traces, CI runs, and MCP browser control. Use when a test is flaky, times out, or fails only in CI or headless; when a locator matches multiple elements or the wrong one (strict mode violation); when clicks need force, waits become sleeps, or networkidle never settles; for storageState and login setup, request mocking and HAR replay, uploads and downloads, iframes and shadow DOM, popups and dialogs, screenshot diffs that change per machine, trace and report artifacts, sharding a slow suite, device and permission emulation, accessibility checks, driving a real browser through Playwright MCP, extracting data from JS-rendered pages, or porting a Cypress, Puppeteer, or Selenium suite to Playwright. Not for maintaining an existing Cypress or Puppeteer suite (cypress, puppeteer) or for work a plain HTTP request answers (http).
Google Ads
@jdrhyneQuery, audit, and optimize Google Ads campaigns. Supports two modes: (1) API mode for bulk operations with google-ads Python SDK, (2) Browser automation mode for users without API access - just attach a browser tab to ads.google.com. Use when asked to check ad performance, pause campaigns/keywords, find wasted spend, audit conversion tracking, or optimize Google Ads accounts.
Agent Browser
@matrixyHeadless browser automation CLI optimized for AI agents with accessibility tree snapshots and ref-based element selection
Free Ride - Unlimited free AI
@shaivpidadiManages free AI models from OpenRouter for OpenClaw. Automatically ranks models by quality, configures fallbacks for rate-limit handling, and updates opencla...
Browser Use
@shawnpanaAutomates browser interactions for web testing, form filling, screenshots, and data extraction. Use when the user needs to navigate websites, interact with w...