拓冰建站拓冰建站
首页 / 资讯中心 / 正文

k-skill 中的 lck-analytics:基于 Riot 官方 LoL Esports 数据的 LCK 赛果查询与高级分析指南

k-skill 中的 lck-analytics基于 Riot 官方 LoL Esports 数据的 LCK 赛果查询与高级分析指南【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本文以 k-skill 仓库中lck-analyticsnpm 包的官方 README 为核心骨架结合其源码、测试用例与配套脚本系统讲解如何用 Node.js 查询 LCK 赛程赛果、实时排名、直播 turning point以及如何基于 Oracles Elixir 风格历史数据构建队伍战力评级、BPBan/Pick对位与协同分析、版本 meta 报告。读完本文你将掌握lck-analytics的全部公开 API、团队别名归一化机制、本地 CSV 分析流水线并能直接把它接入自己的 Node.js 项目或 AI Agent 技能栈。一、项目定位从第三方 Skill 到 k-skill 官方 npm 工作区lck-analytics最初由作者jerjangmin以独立 Skill 包的形式发布k-skill 仓库将其移植进自己的 npm workspace并纳入 Changesets 发布流程使其通过官方渠道统一分发。它的核心能力是按日期查询 LCK韩国英雄联盟冠军联赛比赛结果查询当前分段的积分排名Standings拉取进行中比赛的实时数据live window / details基于实时时间线做 turning point比赛转折点分析基于 Oracles Elixir 风格 historical 数据CSV 或 row 数组计算队伍战力评级、英雄对位 / 协同统计与版本 meta 摘要按日期生成含逐局分析和对战预览power preview的 match analysis。该包同时以「npm 包」与「Agent Skill」两种形态存在npm 包面向开发者编程调用Skill 形态则通过npx nomadamas/k-skill命令在 Agent 运行时中执行参见 lck-analytics/SKILL.md 与 lck-analytics/skill.json 的元数据定义。二、环境要求与安装包声明了engines.node 18见 packages/lck-analytics/package.json使用全局fetch发起 HTTP 请求因此需要 Node.js 18 运行时。本地项目安装npm install lck-analytics作为全局 Skill 运行README 中所有示例均以此为前提npm install -g lck-analytics安装完成后即可require(lck-analytics)调用其公开 API。三、官方数据接口Official surfaces包的数据完全来自 Riot 官方 LoL Esports 接口这些 URL 在 packages/lck-analytics/src/constants.js 中被固化用途接口常量赛程 / 赛果https://esports-api.lolesports.com/persisted/gw/getScheduleLOLESPORTS_API_BASE_URL /getSchedule联赛赛事列表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源码中其他关键常量还包括LCK_LEAGUE_ID 98767991310872058LCK 联赛 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 原始状态映射为统一状态completed → finished종료、inProgress → live진행 중、unstarted → scheduled예정。在 packages/lck-analytics/src/index.js 中这些接口分别由fetchSchedulePage、fetchTournaments、fetchStandings、fetchEventDetails、fetchLiveWindow、fetchLiveDetails封装统一经由requestJson/requestLiveJson完成鉴权与错误处理。requestJson会拼接x-api-key请求头取值优先级为显式传入的options.apiKey→ 环境变量LOLESPORTS_API_KEY→ 内置的DEFAULT_LOLESPORTS_API_KEY。请求非 2xx 时抛出LoL Esports request failed with {status} for {url}直播接口对204 No Content返回null表示暂无直播数据。四、快速开始完整 Usage 示例README 给出了覆盖全部公开 API 的完整示例以下是逐项展开的可运行版本const { buildHistoricalAnalytics, getGameAnalysis, getLckSummary, getMatchAnalysis, getMatchResults, getPatchMetaReport, getStandings, getTeamPowerRatings, } require(lck-analytics); (async () { // 1) 查询某日 LCK 比赛结果可按团队别名过滤 const results await getMatchResults(2026-04-01, { team: 한화, // 韩文别名内部会归一化为 Hanwha Life Esports }); // 2) 查询某日时间点对应的当前排名可只过滤某队 const standings await getStandings({ date: 2026-04-01, team: T1, }); // 3) 一次调用同时返回当日赛果 当时分段排名 const summary await getLckSummary(2026-04-01, { team: 한화, includeStandings: true, }); // 4) 从 Oracles Elixir 风格数据构建历史分析数据集 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 分钟经验差 drg: 100, // 是否参与击杀/拿下龙 bn: 100, // 是否参与击杀纳什男爵 blindpick: 0, // 是否盲选 counterpick: 1, // 是否后手 Counter Pick }, ]); // 5) 指定 patch 的版本 meta 摘要 const patchMeta getPatchMetaReport(historical, 16.6.753.8272); // 6) 队伍战力评级 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逐局分析 队伍战力 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 比赛结果。dateYYYY-MM-DD字符串或Date对象源码中经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填充比赛内实时摘要设options.includeLiveDetails false可跳过详细 live fetch只保留赛果。源码中该函数使用双向分页搜索先请求首页getSchedule通过resolveSearchDirection依据Asia/Seoul时区下的比赛日期判断目标日期落在当前页之前还是之后再沿pages.older/pages.newer翻页直到找到覆盖目标日期的页或达到maxPages上限随后mergeSchedulePages以 match id 去重合并多页事件。返回对象中pagesExamined记录了实际翻页数。5.2getStandings(options)options.dateYYYY-MM-DD或Date用于解析出「该日期对应的当前赛事」options.tournamentId可强制指定某届赛事options.team仅从当前排名中过滤出指定队伍。实现上会先调getTournamentsForLeague拿到赛事列表用resolveTournamentForDate按日期选出对应赛事再请求getStandings若赛事不可解析则返回空的rows结构。测试夹具 standings-2026.json 验证了rows[0].wins / losses等字段被正确归一化。5.3getLckSummary(date, options)「赛果 排名」二合一内部先调用getMatchResults(date, options)再在includeStandings ! false时追加getStandings。返回结构包含queryDate、filteredTeam、matches与可选的standings。5.4buildHistoricalAnalytics(input, options)接受Oracles Elixir 风格 CSV 字符串或row 数组构建历史分析数据集CSV 字符串由 packages/lck-analytics/src/oracle.js 的parseOracleCsv解析支持引号转义、\r\n换行、数值单元格自动转为Number返回对象包含teamPowerRatings队伍战力评级、championStats英雄统计、matchupStats对位统计、synergyStats协同统计、patchMeta版本 metaoptions.league用于过滤联赛默认LCK。仓库附带的样例数据 lck-analytics/samples/oracle-lck-sample.csv 展示了 CSV 的标准列league,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或实时拉取计算单局分析options.historicalDataset/options.oracleCsv/options.historicalRows历史数据来源options.liveWindowPayload/options.liveDetailsPayload可传入缓存的直播 payload避免重复请求options.game/options.matchId/options.number/options.state可覆盖游戏元信息。返回结构包含patch、current当前局内实时快照、timeline逐帧时间线、turningPoints转折点最多默认 3 个、draftBP 优劣、meta版本 meta context。测试用 live-window-game-1.json 与 live-details-game-1.json 夹具驱动这一流程。5.6getMatchAnalysis(date, options)在getMatchResults的赛果之上为每局附加analyses逐局分析并为每场比赛生成powerPreview由compareTeams基于历史数据比较两队 canonical id 得出战力预览。返回{ queryDate, filteredTeam, matches }。六、团队别名归一化Team alias normalization这是包最具实用价值的设计之一。所有队伍输入韩文 / 英文 / 缩写 / 历史名 / 当前名都会先经 packages/lck-analytics/src/teams.js 归一化到统一的canonicalId。归一化核心逻辑normalizeToken先做 Unicode NFKC 规范化再转大写并删除所有非字母数字字符从而让한화、Hanwha、HLE收敛到同一 token。resolveTeamQuery用 token 查REGISTRY_BY_TOKENresolveTeamPayload则优先用 Riot 返回的 team id 查REGISTRY_BY_ID再回退到 name / code / slug 匹配。内置注册表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 调用的本地文件流水线详见 lck-analytics/instruction.md 的 Workflow 章节脚本职责默认输入 / 输出sync-oracle.jsOracle-style CSV → historical cache JSON输入 CSV输出 historical 缓存analyze-live-game.js单局 game analysis含 turning points--game gameId输出 reports_lib.js公共工具包加载、参数解析、JSON 读写—公共缓存目录默认为.openclaw-lck-cache/由resolveCachePaths生成三块路径historical-analysis.json历史分析、live/直播缓存、reports/报告输出。_lib.js的loadLckResults会按序尝试多个入口GLOBAL_NPM_ROOT环境变量指定的全局包、npm root -g探测到的全局包以及仓库内的packages/lck-analytics/src/index.js——这意味着即便在 k-skill 仓库源码树下也可以不全局安装直接跑这些脚本。7.1 同步历史数据npx -y nomadamas/k-skill0 exec lck-analytics scripts/sync-oracle.js -- \ --csv ./lck-analytics/samples/oracle-lck-sample.csvsync-oracle.js会读取 CSV调用buildHistoricalAnalytics(csvText, { league })把结果含teamPowerRatings、matchupStats、synergyStats、patchMeta的数量统计写入缓存并打印摘要。默认--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 启发式算法packages/lck-analytics/src/analytics.js 的analyzeTurningPoints基于直播快照做启发式判定README 明确标注「turning point 分析是公开 live snapshot 的启发式结果」逐帧计算goldSwing金币差变化绝对值、killSwing击杀差变化、objectiveSwingobjectiveScore变化含龙 / 男爵 / 塔的目标分leadFlip金币领先方发生翻转默认阈值thresholdGoldSwing 1800、thresholdObjectiveSwing 2且当无领先翻转、金币摆动不足、目标摆动不足且击杀摆动小于 3 时跳过该帧命中后按swingScore goldSwing/300 killSwing*3 objectiveSwing*6 (leadFlip ? 10 : 0)打分排序取前limit默认 3个作为 turning points并生成人类可读的reason摘要。8.2 Draft edge 与 meta context同一文件中的buildGameAnalysis会综合 live payload 与 historical 数据计算draftBP 优劣含overallEdge、current实时快照与meta版本 meta context。getPatchMetaSummary负责把指定 patch 的英雄统计整理为「top picks / risers」风格摘要——与 instruction.md 的「输出规范」一致meta 请求应当先展示样本数样本不足时降低置信度展示。8.3 队伍战力评级与对位 / 协同历史数据集由 packages/lck-analytics/src/oracle.js 的buildHistoricalDataset聚合生成包含按 canonical 队伍聚合的战力评级teamPowerRatings由getTeamPowerRatings返回并按强度排序、英雄对位统计matchupStats与同队协同统计synergyStats。compareTeams用两队 canonical id 在历史数据中比较为getMatchAnalysis生成powerPreview。九、测试与验证包采用 Node 内置测试运行器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组合驱动getLckSummary、live details 与getMatchAnalysis的完整调用链。运行测试cd packages/lck-analytics npm test十、发布与维护Changesets 流程README 的 Release note 说明了发布机制该包作为packages/lck-analyticsworkspace 管理向main分支合入变更后仓库的 Changesets 流程会自动创建Version Packages PR该 PR 合并后触发 npm publish。因此第三方贡献者无需手动维护版本号与发布产物package.json中publishConfig.access public表明包以公开权限发布。十一、注意事项与失败模式综合 README 的 Notes 与 instruction.md 的 Failure modesAPI key默认使用 Riot 网页请求头 公开 fallback key但为稳定性推荐设置环境变量LOLESPORTS_API_KEY覆盖源码中 key 优先级为显式apiKey 环境变量 内置默认值接口变动风险Riot 网页应用 API 的结构 / 请求头若变化包需要相应更新公开 key 轮换若内置 fallback key 被轮换失效需通过环境变量 overrideCSV 列名兼容若历史 CSV 列名与 Oracles Elixir 风格差异过大normalizeOracleGameRows的键名兼容层无法覆盖时需要先做预处理再喂给buildHistoricalAnalyticsTurning point 是启发式基于公开 live 快照不是官方判定合法性边界lck-analytics/SKILL.md 要求自动化采集仅限个人、非组织的查询用途禁止系统化批量爬取、绕过访问控制或干扰第三方服务使用前应阅读随包分发的 references/DISCLAIMER.md 法律声明。十二、在 Agent / Skill 场景中的落地建议lck-analytics的 Skill 形态见 lck-analytics/instruction.md为 AI Agent 定义了明确的输入、输出与完成标准输入日期YYYY-MM-DD、可选的队伍别名、Oracle-style CSV / row 数组、game id、patch version输出顺序先给比赛时间、对阵、状态、局分与请求队伍优先live 请求给当前局数、击杀 / 金币 / 龙 / 男爵 / 塔差值及 1~3 个 turning pointhistorical 请求先给样本数再给按强度排序的战力评级与低置信度标注的 meta 摘要完成标准日期赛果 队伍过滤 按需排名 / live 摘要 / turning point / meta 或战力评级均已给出交互约定用户说「今天 / 昨天」时必须先换算成绝对日期YYYY-MM-DD再执行。整体来看lck-analytics是「官方数据源 启发式分析 别名归一化 本地流水线」的组合体上层 API 面向快速集成本地脚本面向离线批处理与 Agent 技能编排二者共享同一套源码与数据模型是理解 k-skill 生态中「npm 包 Agent Skill 双形态」发布模式的典型范例。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门