據(jù)的 LCK 賽果查詢與高級分析指南)
k-skill 中的 lck-analytics基于 Riot 官方 LoL Esports 數(shù)據(jù)的 LCK 賽果查詢與高級分析指南【免費下載鏈接】k-skill???? ?? ?? ??? - ????? ?????項目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本文以 k-skill 倉庫中l(wèi)ck-analyticsnpm 包的官方 README 為核心骨架結(jié)合其源碼、測試用例與配套腳本系統(tǒng)講解如何用 Node.js 查詢 LCK 賽程賽果、實時排名、直播 turning point以及如何基于 Oracles Elixir 風格歷史數(shù)據(jù)構(gòu)建隊伍戰(zhàn)力評級、BPBan/Pick對位與協(xié)同分析、版本 meta 報告。讀完本文你將掌握lck-analytics的全部公開 API、團隊別名歸一化機制、本地 CSV 分析流水線并能直接把它接入自己的 Node.js 項目或 AI Agent 技能棧。一、項目定位從第三方 Skill 到 k-skill 官方 npm 工作區(qū)lck-analytics最初由作者jerjangmin以獨立 Skill 包的形式發(fā)布k-skill 倉庫將其移植進自己的 npm workspace并納入 Changesets 發(fā)布流程使其通過官方渠道統(tǒng)一分發(fā)。它的核心能力是按日期查詢 LCK韓國英雄聯(lián)盟冠軍聯(lián)賽比賽結(jié)果查詢當前分段的積分排名Standings拉取進行中比賽的實時數(shù)據(jù)live window / details基于實時時間線做 turning point比賽轉(zhuǎn)折點分析基于 Oracles Elixir 風格 historical 數(shù)據(jù)CSV 或 row 數(shù)組計算隊伍戰(zhàn)力評級、英雄對位 / 協(xié)同統(tǒng)計與版本 meta 摘要按日期生成含逐局分析和對戰(zhàn)預(yù)覽power preview的 match analysis。該包同時以「npm 包」與「Agent Skill」兩種形態(tài)存在npm 包面向開發(fā)者編程調(diào)用Skill 形態(tài)則通過npx nomadamas/k-skill命令在 Agent 運行時中執(zhí)行參見 lck-analytics/SKILL.md 與 lck-analytics/skill.json 的元數(shù)據(jù)定義。二、環(huán)境要求與安裝包聲明了engines.node 18見 packages/lck-analytics/package.json使用全局fetch發(fā)起 HTTP 請求因此需要 Node.js 18 運行時。本地項目安裝npm install lck-analytics作為全局 Skill 運行README 中所有示例均以此為前提npm install -g lck-analytics安裝完成后即可require(lck-analytics)調(diào)用其公開 API。三、官方數(shù)據(jù)接口Official surfaces包的數(shù)據(jù)完全來自 Riot 官方 LoL Esports 接口這些 URL 在 packages/lck-analytics/src/constants.js 中被固化用途接口常量賽程 / 賽果https://esports-api.lolesports.com/persisted/gw/getScheduleLOLESPORTS_API_BASE_URL /getSchedule聯(lián)賽賽事列表https://esports-api.lolesports.com/persisted/gw/getTournamentsForLeague.../getTournamentsForLeague排名https://esports-api.lolesports.com/persisted/gw/getStandings.../getStandings事件詳情https://esports-api.lolesports.com/persisted/gw/getEventDetails.../getEventDetails直播 windowhttps://feed.lolesports.com/livestats/v1/window/{gameId}LIVE_STATS_BASE_URL /window直播 detailshttps://feed.lolesports.com/livestats/v1/details/{gameId}LIVE_STATS_BASE_URL /details源碼中其他關(guān)鍵常量還包括LCK_LEAGUE_ID 98767991310872058LCK 聯(lián)賽 ID所有賽程查詢的默認leagueIdDEFAULT_LOLESPORTS_API_KEY公開 fallback API key默認請求頭accept: application/json、accept-language: en-US,en;q0.9,ko-KR;q0.8,ko;q0.7、user-agent: k-skill/lck-analyticsSTATUS_MAP將 Riot 原始狀態(tài)映射為統(tǒng)一狀態(tài)completed → finished??、inProgress → live?? ?、unstarted → scheduled??。在 packages/lck-analytics/src/index.js 中這些接口分別由fetchSchedulePage、fetchTournaments、fetchStandings、fetchEventDetails、fetchLiveWindow、fetchLiveDetails封裝統(tǒng)一經(jīng)由requestJson/requestLiveJson完成鑒權(quán)與錯誤處理。requestJson會拼接x-api-key請求頭取值優(yōu)先級為顯式傳入的options.apiKey→ 環(huán)境變量LOLESPORTS_API_KEY→ 內(nèi)置的DEFAULT_LOLESPORTS_API_KEY。請求非 2xx 時拋出LoL Esports request failed with {status} for {url}直播接口對204 No Content返回null表示暫無直播數(shù)據(jù)。四、快速開始完整 Usage 示例README 給出了覆蓋全部公開 API 的完整示例以下是逐項展開的可運行版本const { buildHistoricalAnalytics, getGameAnalysis, getLckSummary, getMatchAnalysis, getMatchResults, getPatchMetaReport, getStandings, getTeamPowerRatings, } require(lck-analytics); (async () { // 1) 查詢某日 LCK 比賽結(jié)果可按團隊別名過濾 const results await getMatchResults(2026-04-01, { team: ??, // 韓文別名內(nèi)部會歸一化為 Hanwha Life Esports }); // 2) 查詢某日時間點對應(yīng)的當前排名可只過濾某隊 const standings await getStandings({ date: 2026-04-01, team: T1, }); // 3) 一次調(diào)用同時返回當日賽果 當時分段排名 const summary await getLckSummary(2026-04-01, { team: ??, includeStandings: true, }); // 4) 從 Oracles Elixir 風格數(shù)據(jù)構(gòu)建歷史分析數(shù)據(jù)集 const historical buildHistoricalAnalytics([ { league: LCK, matchid: sample-1, date: 2026-04-01, patch: 16.6.753.8272, side: blue, teamname: Hanwha Life Esports, opponentteam: T1, playername: HLE Zeus, position: top, champion: Aatrox, opponentchampion: Gnar, result: win, gd15: 1200, // 15 分鐘金幣差 csd15: 18, // 15 分鐘補刀差 xpd15: 340, // 15 分鐘經(jīng)驗差 drg: 100, // 是否參與擊殺/拿下龍 bn: 100, // 是否參與擊殺納什男爵 blindpick: 0, // 是否盲選 counterpick: 1, // 是否后手 Counter Pick }, ]); // 5) 指定 patch 的版本 meta 摘要 const patchMeta getPatchMetaReport(historical, 16.6.753.8272); // 6) 隊伍戰(zhàn)力評級 const ratings getTeamPowerRatings(historical); // 7) 單局游戲分析含 turning points、draft edge、meta context const gameAnalysis await getGameAnalysis(game-id, { historicalDataset: historical, liveWindowPayload: {/* 可選緩存的 window payload */}, liveDetailsPayload: {/* 可選緩存的 details payload */}, }); // 8) 按日期生成 match analysis逐局分析 隊伍戰(zhàn)力 preview const matchAnalysis await getMatchAnalysis(2026-04-01, { historicalDataset: historical, }); console.log(results.matches[0]); console.log(standings.rows[0]); console.log(summary); console.log(patchMeta); console.log(ratings[0]); console.log(gameAnalysis.turningPoints); console.log(matchAnalysis.matches[0]?.powerPreview); })();五、API 詳解5.1getMatchResults(date, options)按日期查詢 LCK 比賽結(jié)果。dateYYYY-MM-DD字符串或Date對象源碼中經(jīng)normalizeDateInput校驗非法日期如2026-02-31、2026-02-29會拋出date must be a valid Date or YYYY-MM-DD string.錯誤見 測試用例options.team當前名 / 歷史名 / 韓文 / 英文 / 縮寫別名均會歸一化options.maxPages賽程分頁搜索上限默認6默認會給matches[*].games[*].live與matches[*].live填充比賽內(nèi)實時摘要設(shè)options.includeLiveDetails false可跳過詳細 live fetch只保留賽果。源碼中該函數(shù)使用雙向分頁搜索先請求首頁getSchedule通過resolveSearchDirection依據(jù)Asia/Seoul時區(qū)下的比賽日期判斷目標日期落在當前頁之前還是之后再沿pages.older/pages.newer翻頁直到找到覆蓋目標日期的頁或達到maxPages上限隨后mergeSchedulePages以 match id 去重合并多頁事件。返回對象中pagesExamined記錄了實際翻頁數(shù)。5.2getStandings(options)options.dateYYYY-MM-DD或Date用于解析出「該日期對應(yīng)的當前賽事」options.tournamentId可強制指定某屆賽事options.team僅從當前排名中過濾出指定隊伍。實現(xiàn)上會先調(diào)getTournamentsForLeague拿到賽事列表用resolveTournamentForDate按日期選出對應(yīng)賽事再請求getStandings若賽事不可解析則返回空的rows結(jié)構(gòu)。測試夾具 standings-2026.json 驗證了rows[0].wins / losses等字段被正確歸一化。5.3getLckSummary(date, options)「賽果 排名」二合一內(nèi)部先調(diào)用getMatchResults(date, options)再在includeStandings ! false時追加getStandings。返回結(jié)構(gòu)包含queryDate、filteredTeam、matches與可選的standings。5.4buildHistoricalAnalytics(input, options)接受Oracles Elixir 風格 CSV 字符串或row 數(shù)組構(gòu)建歷史分析數(shù)據(jù)集CSV 字符串由 packages/lck-analytics/src/oracle.js 的parseOracleCsv解析支持引號轉(zhuǎn)義、\r\n換行、數(shù)值單元格自動轉(zhuǎn)為Number返回對象包含teamPowerRatings隊伍戰(zhàn)力評級、championStats英雄統(tǒng)計、matchupStats對位統(tǒng)計、synergyStats協(xié)同統(tǒng)計、patchMeta版本 metaoptions.league用于過濾聯(lián)賽默認LCK。倉庫附帶的樣例數(shù)據(jù) lck-analytics/samples/oracle-lck-sample.csv 展示了 CSV 的標準列l(wèi)eague,matchid,date,patch,side,teamname,opponentteam,playername,position,champion,opponentchampion,result,gd15,csd15,xpd15,drg,bn,blindpick,counterpick LCK,match-1,2026-04-01,16.6.753.8272,blue,Hanwha Life Esports,T1,HLE Zeus,top,Aatrox,Gnar,win,1200,18,340,100,100,0,1 LCK,match-1,2026-04-01,16.6.753.8272,blue,Hanwha Life Esports,T1,HLE Peanut,jungle,Vi,Sejuani,win,800,5,280,100,100,1,0normalizeOracleGameRows對每行做鍵名兼容如teamname/Team/team/team_name、champion/Champion、gameversion/gameVersion并把隊伍名送入團隊別名解析器歸一化為 canonical 隊伍。5.5getGameAnalysis(gameId, options)基于 live window / details payload或?qū)崟r拉取計算單局分析options.historicalDataset/options.oracleCsv/options.historicalRows歷史數(shù)據(jù)來源options.liveWindowPayload/options.liveDetailsPayload可傳入緩存的直播 payload避免重復(fù)請求options.game/options.matchId/options.number/options.state可覆蓋游戲元信息。返回結(jié)構(gòu)包含patch、current當前局內(nèi)實時快照、timeline逐幀時間線、turningPoints轉(zhuǎn)折點最多默認 3 個、draftBP 優(yōu)劣、meta版本 meta context。測試用 live-window-game-1.json 與 live-details-game-1.json 夾具驅(qū)動這一流程。5.6getMatchAnalysis(date, options)在getMatchResults的賽果之上為每局附加analyses逐局分析并為每場比賽生成powerPreview由compareTeams基于歷史數(shù)據(jù)比較兩隊 canonical id 得出戰(zhàn)力預(yù)覽。返回{ queryDate, filteredTeam, matches }。六、團隊別名歸一化Team alias normalization這是包最具實用價值的設(shè)計之一。所有隊伍輸入韓文 / 英文 / 縮寫 / 歷史名 / 當前名都會先經(jīng) packages/lck-analytics/src/teams.js 歸一化到統(tǒng)一的canonicalId。歸一化核心邏輯normalizeToken先做 Unicode NFKC 規(guī)范化再轉(zhuǎn)大寫并刪除所有非字母數(shù)字字符從而讓??、Hanwha、HLE收斂到同一 token。resolveTeamQuery用 token 查REGISTRY_BY_TOKENresolveTeamPayload則優(yōu)先用 Riot 返回的 team id 查REGISTRY_BY_ID再回退到 name / code / slug 匹配。內(nèi)置注冊表TEAM_REGISTRY覆蓋 LCK 全部 10 支隊伍并顯式支持品牌重組 / 改名別名。README 與 lck-analytics/instruction.md 特別點名的重命名歸一化包括DN SOOPers、DN FREECS、?? ???光東 Frix、Afreeca Freecs→ canonicaldnfT1、SKT、SKT T1、SK Telecom T1、SK??? T1→ canonicalt1??Damwon、Dplus KIA、DAMWON Gaming→ canonicaldk???BriOn、Fredit BRION→ canonicalbro????、Liiv SANDBOX、SANDBOX Gaming→ canonicalbfx。七、本地輕量分析流水線CLI 腳本k-skill 還在lck-analytics/scripts/目錄下提供了一套不依賴獨立 API 調(diào)用的本地文件流水線詳見 lck-analytics/instruction.md 的 Workflow 章節(jié)腳本職責默認輸入 / 輸出sync-oracle.jsOracle-style CSV → historical cache JSON輸入 CSV輸出 historical 緩存analyze-live-game.js單局 game analysis含 turning points--game gameId輸出 reports_lib.js公共工具包加載、參數(shù)解析、JSON 讀寫—公共緩存目錄默認為.openclaw-lck-cache/由resolveCachePaths生成三塊路徑historical-analysis.json歷史分析、live/直播緩存、reports/報告輸出。_lib.js的loadLckResults會按序嘗試多個入口GLOBAL_NPM_ROOT環(huán)境變量指定的全局包、npm root -g探測到的全局包以及倉庫內(nèi)的packages/lck-analytics/src/index.js——這意味著即便在 k-skill 倉庫源碼樹下也可以不全局安裝直接跑這些腳本。7.1 同步歷史數(shù)據(jù)npx -y nomadamas/k-skill0 exec lck-analytics scripts/sync-oracle.js -- \ --csv ./lck-analytics/samples/oracle-lck-sample.csvsync-oracle.js會讀取 CSV調(diào)用buildHistoricalAnalytics(csvText, { league })把結(jié)果含teamPowerRatings、matchupStats、synergyStats、patchMeta的數(shù)量統(tǒng)計寫入緩存并打印摘要。默認--league LCK未指定--csv時回退到倉庫樣例。7.2 分析實時比賽npx -y nomadamas/k-skill0 exec lck-analytics scripts/analyze-live-game.js -- \ --game game-id支持用--window/--details傳入 fixture 文件做離線分析也可用--match、--number、--state補充元信息報告寫入reports/game-gameId.jsonstdout 打印patch、turningPoints、draft.overallEdge。需要說明instruction.md 中還描述了scripts/build-match-report.js --date 2026-04-01 [--team ??]的命令行用法但當前倉庫lck-analytics/scripts/目錄實際包含的是_lib.js、sync-oracle.js、analyze-live-game.js三個文件按日期生成 match report 的等價能力已由公開 APIgetMatchAnalysis(date, options)覆蓋。八、分析原理turning point、draft edge、power rating 與 patch meta8.1 Turning point 啟發(fā)式算法packages/lck-analytics/src/analytics.js 的analyzeTurningPoints基于直播快照做啟發(fā)式判定README 明確標注「turning point 分析是公開 live snapshot 的啟發(fā)式結(jié)果」逐幀計算goldSwing金幣差變化絕對值、killSwing擊殺差變化、objectiveSwingobjectiveScore變化含龍 / 男爵 / 塔的目標分leadFlip金幣領(lǐng)先方發(fā)生翻轉(zhuǎn)默認閾值thresholdGoldSwing 1800、thresholdObjectiveSwing 2且當無領(lǐng)先翻轉(zhuǎn)、金幣擺動不足、目標擺動不足且擊殺擺動小于 3 時跳過該幀命中后按swingScore goldSwing/300 killSwing*3 objectiveSwing*6 (leadFlip ? 10 : 0)打分排序取前l(fā)imit默認 3個作為 turning points并生成人類可讀的reason摘要。8.2 Draft edge 與 meta context同一文件中的buildGameAnalysis會綜合 live payload 與 historical 數(shù)據(jù)計算draftBP 優(yōu)劣含overallEdge、current實時快照與meta版本 meta context。getPatchMetaSummary負責把指定 patch 的英雄統(tǒng)計整理為「top picks / risers」風格摘要——與 instruction.md 的「輸出規(guī)范」一致meta 請求應(yīng)當先展示樣本數(shù)樣本不足時降低置信度展示。8.3 隊伍戰(zhàn)力評級與對位 / 協(xié)同歷史數(shù)據(jù)集由 packages/lck-analytics/src/oracle.js 的buildHistoricalDataset聚合生成包含按 canonical 隊伍聚合的戰(zhàn)力評級teamPowerRatings由getTeamPowerRatings返回并按強度排序、英雄對位統(tǒng)計matchupStats與同隊協(xié)同統(tǒng)計synergyStats。compareTeams用兩隊 canonical id 在歷史數(shù)據(jù)中比較為getMatchAnalysis生成powerPreview。九、測試與驗證包采用 Node 內(nèi)置測試運行器node --test見 package.json 的test腳本測試文件為 packages/lck-analytics/test/index.test.js配套夾具位于 packages/lck-analytics/test/fixtures/賽程、賽事列表、排名、事件詳情、live window/details、Oracle 樣例 CSV。核心覆蓋點按日期 韓文別名過濾賽程??→ canonicalhle比分{ team1: 1, team2: 0 }非法日期校驗拒絕2026-02-31、2026-02-29排名歸一化與別名解析T1→ canonicalt1wins/losses 字段正確用 mockglobal.fetch組合驅(qū)動getLckSummary、live details 與getMatchAnalysis的完整調(diào)用鏈。運行測試cd packages/lck-analytics npm test十、發(fā)布與維護Changesets 流程README 的 Release note 說明了發(fā)布機制該包作為packages/lck-analyticsworkspace 管理向main分支合入變更后倉庫的 Changesets 流程會自動創(chuàng)建Version Packages PR該 PR 合并后觸發(fā) npm publish。因此第三方貢獻者無需手動維護版本號與發(fā)布產(chǎn)物package.json中publishConfig.access public表明包以公開權(quán)限發(fā)布。十一、注意事項與失敗模式綜合 README 的 Notes 與 instruction.md 的 Failure modesAPI key默認使用 Riot 網(wǎng)頁請求頭 公開 fallback key但為穩(wěn)定性推薦設(shè)置環(huán)境變量LOLESPORTS_API_KEY覆蓋源碼中 key 優(yōu)先級為顯式apiKey 環(huán)境變量 內(nèi)置默認值接口變動風險Riot 網(wǎng)頁應(yīng)用 API 的結(jié)構(gòu) / 請求頭若變化包需要相應(yīng)更新公開 key 輪換若內(nèi)置 fallback key 被輪換失效需通過環(huán)境變量 overrideCSV 列名兼容若歷史 CSV 列名與 Oracles Elixir 風格差異過大normalizeOracleGameRows的鍵名兼容層無法覆蓋時需要先做預(yù)處理再喂給buildHistoricalAnalyticsTurning point 是啟發(fā)式基于公開 live 快照不是官方判定合法性邊界lck-analytics/SKILL.md 要求自動化采集僅限個人、非組織的查詢用途禁止系統(tǒng)化批量爬取、繞過訪問控制或干擾第三方服務(wù)使用前應(yīng)閱讀隨包分發(fā)的 references/DISCLAIMER.md 法律聲明。十二、在 Agent / Skill 場景中的落地建議lck-analytics的 Skill 形態(tài)見 lck-analytics/instruction.md為 AI Agent 定義了明確的輸入、輸出與完成標準輸入日期YYYY-MM-DD、可選的隊伍別名、Oracle-style CSV / row 數(shù)組、game id、patch version輸出順序先給比賽時間、對陣、狀態(tài)、局分與請求隊伍優(yōu)先live 請求給當前局數(shù)、擊殺 / 金幣 / 龍 / 男爵 / 塔差值及 1~3 個 turning pointhistorical 請求先給樣本數(shù)再給按強度排序的戰(zhàn)力評級與低置信度標注的 meta 摘要完成標準日期賽果 隊伍過濾 按需排名 / live 摘要 / turning point / meta 或戰(zhàn)力評級均已給出交互約定用戶說「今天 / 昨天」時必須先換算成絕對日期YYYY-MM-DD再執(zhí)行。整體來看lck-analytics是「官方數(shù)據(jù)源 啟發(fā)式分析 別名歸一化 本地流水線」的組合體上層 API 面向快速集成本地腳本面向離線批處理與 Agent 技能編排二者共享同一套源碼與數(shù)據(jù)模型是理解 k-skill 生態(tài)中「npm 包 Agent Skill 雙形態(tài)」發(fā)布模式的典型范例?!久赓M下載鏈接】k-skill???? ?? ?? ??? - ????? ?????項目地址: https://gitcode.com/GitHub_Trending/ks/k-skill創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考