$npx -y skills add machina-sports/sports-skills --skill esportsEsports data — Dota 2 (OpenDota) and League of Legends esports (Leaguepedia). Pro matches, tournaments, teams, and structured LoL competitive data. Use when: user asks about Dota 2 pro matches/teams/leagues, or LoL esports tournaments/rosters/results. Don't use when: user asks ab
| 1 | # Esports Data |
| 2 | |
| 3 | Keyless, public sources. **No API key, no signup.** |
| 4 | |
| 5 | - **Dota 2** → OpenDota (`api.opendota.com`). Real JSON. Free tier ~60 req/min. |
| 6 | - **League of Legends esports** → Leaguepedia Cargo (`lol.fandom.com`). Structured |
| 7 | rows. **CC-BY-SA — attribute Leaguepedia when you reuse the data.** |
| 8 | |
| 9 | ## CRITICAL |
| 10 | |
| 11 | - **Dota 2 only** for match/team/league data (OpenDota). LoL uses Leaguepedia Cargo. |
| 12 | - **Leaguepedia is aggressively rate-limited.** The throttle comes back as an |
| 13 | *in-body* error (`Leaguepedia API error: ...`) on an HTTP 200 — not a 4xx. |
| 14 | Results are cached ~30 min; don't hammer it. |
| 15 | - **No odds here.** Bookmaker odds for esports are not available keyless. For |
| 16 | implied-probability signals, use `kalshi get_esports_odds --game=cs2` or |
| 17 | `polymarket get_esports_events`. |
| 18 | - **Personal use.** Third-party ToS apply (OpenDota MIT; Leaguepedia CC-BY-SA). |
| 19 | |
| 20 | ## Quick Start |
| 21 | |
| 22 | CLI: |
| 23 | ```bash |
| 24 | sports-skills esports get_pro_matches --limit=10 |
| 25 | sports-skills esports get_pro_teams --limit=10 |
| 26 | sports-skills esports get_leagues --tier=premium |
| 27 | sports-skills esports get_lol_tournaments --region=Korea --limit=5 |
| 28 | sports-skills esports lol_cargo_query --tables=Teams --fields=Name,Region --limit=5 |
| 29 | ``` |
| 30 | |
| 31 | Python: |
| 32 | ```python |
| 33 | from sports_skills import esports |
| 34 | |
| 35 | esports.get_pro_matches(limit=10) |
| 36 | esports.get_lol_tournaments(region="Brazil") |
| 37 | ``` |
| 38 | |
| 39 | ## Commands |
| 40 | |
| 41 | | Command | Description | |
| 42 | |---|---| |
| 43 | | `get_pro_matches` | Recent Dota 2 professional matches (OpenDota) | |
| 44 | | `get_leagues` | Dota 2 leagues/tournaments, filter by tier (OpenDota) | |
| 45 | | `get_pro_teams` | Top Dota 2 teams by rating (OpenDota) | |
| 46 | | `get_match` | Detailed Dota 2 match by id (OpenDota) | |
| 47 | | `get_lol_tournaments` | Recent LoL esports tournaments (Leaguepedia) | |
| 48 | | `lol_cargo_query` | Raw Leaguepedia Cargo query (any table/fields) | |
| 49 | |
| 50 | ## Leaguepedia Cargo reference |
| 51 | |
| 52 | `lol_cargo_query` needs `tables` + `fields`. Common tables (fields vary — verify |
| 53 | with a small query first): `Tournaments` (Name, DateStart, DateEnd, League, |
| 54 | Region, Prizepool), `MatchSchedule` (Team1, Team2, Winner, DateTime_UTC, BestOf), |
| 55 | `ScoreboardGames`, `Players`, `Teams`. Full schema: |
| 56 | <https://lol.fandom.com/wiki/Special:CargoTables>. |
| 57 | |
| 58 | ## Troubleshooting |
| 59 | |
| 60 | - `Leaguepedia API error: You've exceeded your rate limit` → you're being |
| 61 | throttled. Wait and retry; the connector caches for ~30 min to help. |
| 62 | - Empty `matches`/`teams` from OpenDota → transient; OpenDota is volunteer-run |
| 63 | best-effort infra with no SLA. Retry. |