catalog/repos/adrianmg--league-sdk.md

184 lines
5.6 KiB
Markdown
Raw Normal View History

2026-04-07 11:44:56 +08:00
# 英雄联盟API开发工具包
`TypeScript` `SDK` `英雄联盟` `Riot API` `npm`
<p align="center">
<img src="https://raw.githubusercontent.com/adrianmg/league-sdk/main/logo.png" alt="League SDK" width="600">
</p>
<p align="center">
<a href="https://www.npmjs.com/package/league-sdk"><img src="https://img.shields.io/npm/v/league-sdk.svg" alt="npm 版本"></a>
<img src="https://img.shields.io/npm/dw/league-sdk.svg" alt="npm 下载量">
<img src="https://img.shields.io/badge/coverage-92%25-brightgreen" alt="覆盖率">
</p>
# league-sdk
一个完整类型化的 TypeScript SDK用于访问 Riot 英雄联盟 API。
## 为什么选择这个 SDK
直接使用原始 Riot API 需要调用多个端点、处理复杂路由并手动转换数据。本 SDK 将一切化繁为简:
**原始 API多次调用手动处理**
```typescript
// 1. 通过 Riot ID 获取账户(区域端点)
const account = await fetch(`https://asia.api.riotgames.com/riot/account/v1/accounts/by-riot-id/Hide%20on%20bush/KR1?api_key=${key}`);
const { puuid } = await account.json();
// 2. 获取召唤师数据(平台端点)
const summoner = await fetch(`https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-puuid/${puuid}?api_key=${key}`);
const { id: summonerId } = await summoner.json();
// 3. 获取段位数据(平台端点,不同 ID
const leagues = await fetch(`https://kr.api.riotgames.com/lol/league/v4/entries/by-puuid/${puuid}?api_key=${key}`);
const ranked = await leagues.json();
const soloQ = ranked.find(q => q.queueType === 'RANKED_SOLO_5x5');
// 4. 手动计算胜率
const winRate = soloQ.wins / (soloQ.wins + soloQ.losses);
```
**使用 league-sdk**
```typescript
const player = await client.players.getByRiotId('Hide on bush', 'KR1');
const soloQ = await player.getSoloQueueStats();
console.log(`${soloQ.tier} ${soloQ.division} - ${(soloQ.winRate * 100).toFixed(1)}% 胜率`);
```
## 快速上手
### 安装
```bash
npm install league-sdk
# 或
bun add league-sdk
```
### API 密钥
前往 [developer.riotgames.com](https://developer.riotgames.com/) 获取密钥。开发者密钥有效期 24 小时(每秒 20 次,每 2 分钟 100 次)。如需永久密钥,请注册产品。
### 快速示例
```typescript
import { LolClient } from 'league-sdk';
const client = new LolClient({
apiKey: process.env.RIOT_API_KEY!,
platform: 'kr'
});
// 获取玩家及其段位数据
const player = await client.players.getByRiotId('Hide on bush', 'KR1');
const soloQ = await player.getSoloQueueStats();
// 获取近期对局
const matches = await client.matches.getForPlayer(player.puuid, { count: 5 });
for (const match of matches) {
const p = match.getParticipant(player.puuid)!;
console.log(`${p.championName}: ${p.kills}/${p.deaths}/${p.assists}`);
}
```
### 开发环境
```bash
bun install && bun test
```
```bash
# 适用于 AI Agent 的技能
npx skills add https://github.com/adrianmg/league-sdk --skill league-sdk
```
## 功能特性
| 服务 | 说明 | 示例 |
|------|------|------|
| **Players玩家** | 通过 Riot ID 或 PUUID 查询 | `client.players.getByRiotId('Name', 'Tag')` |
| **Matches对局** | 对局历史与详情 | `client.matches.getForPlayer(puuid)` |
| **Mastery熟练度** | 英雄熟练度数据 | `client.mastery.getForPlayer(puuid)` |
| **Live Game实时对局** | 当前对局观战信息 | `client.liveGame.getForPlayer(puuid)` |
| **Status状态** | 服务器健康状态 | `client.status.get('euw1')` |
| **Challenges挑战** | 挑战任务进度 | `client.challenges.getPlayerProfile(puuid)` |
| **Clash冠军杯** | 赛事信息 | `client.clash.getPlayer(puuid)` |
| **Data Dragon静态数据** | 静态数据(无需密钥) | `client.dataDragon.getChampions()` |
## 实体对象
```typescript
// 玩家
const player = await client.players.getByRiotId('Hide on bush', 'KR1');
player.puuid; player.riotId; player.level;
await player.getSoloQueueStats();
// 对局
const match = await client.matches.getById('EUW1_1234567890');
match.gameMode; match.gameDurationFormatted; match.winner;
const p = match.getParticipant(puuid)!;
p.kills; p.deaths; p.assists; p.kda; p.csPerMinute;
```
## 常量与工具函数
```typescript
import { PLATFORMS, QUEUES, isRankedQueue, formatRank, compareRanks } from 'league-sdk';
PLATFORMS.EUW1 // 'euw1'
isRankedQueue(420) // true单双排
formatRank('DIAMOND', 'II') // "钻石 II"
compareRanks('DIAMOND', 'II', 'PLATINUM', 'I') // 1钻石 > 铂金)
```
## 错误处理
类型化错误:`NotFoundError``RateLimitError`(含 `retryAfter`)、`AuthenticationError`
## 资源下载
```bash
npx league-sdk-assets --output ./assets --all
```
也可通过 `league-sdk/scripts` 使用程序化 API。
## 请求限速
内置限速器(每秒 20 次,每 2 分钟 100 次)。可通过 `rateLimiter` 选项配置,或使用 `client.getRateLimitStatus()` 查看当前状态。
## 示例服务器
```bash
RIOT_API_KEY=your-key bun run example/server.ts
```
## 支持的平台
| 平台 | 区域 | 位置 |
|------|------|------|
| `na1` | americas | 北美 |
| `br1` | americas | 巴西 |
| `la1` | americas | 拉丁美洲北部 |
| `la2` | americas | 拉丁美洲南部 |
| `euw1` | europe | 欧洲西部 |
| `eun1` | europe | 欧洲北欧及东部 |
| `tr1` | europe | 土耳其 |
| `ru` | europe | 俄罗斯 |
| `kr` | asia | 韩国 |
| `jp1` | asia | 日本 |
| `oc1` | sea | 大洋洲 |
| `ph2` | sea | 菲律宾 |
| `sg2` | sea | 新加坡 |
| `th2` | sea | 泰国 |
| `tw2` | sea | 台湾 |
| `vn2` | sea | 越南 |
## 许可证
MIT
## 致谢
本项目在 GitHub Copilot 和 Claude 等 AI 编程工具的协助下开发完成。