esports について
APIキーや登録なしで公開ソースからeスポーツデータを取得するスキルです。OpenDotaのDota 2データとLeaguepedia CargoのLeague of Legends eスポーツデータを扱い、クエリ制限やページング方法も案内します。
主な機能
- 01Dota 2の試合・チームデータ
- 02Dota 2のリーグ一覧
- 03Leaguepediaの大会クエリ
- 04PythonとCLIからの利用
- 05レート制限とページングの案内
活用シーン
- 01最近のDota 2プロ試合を確認する
- 02Dota 2のチームやリーグを調べる
- 03LoLの大会・試合テーブルを検索する
- 04過去のDota 2試合をページングで取得する
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ machina-sports/ sports-skills --skill esportsインストール後、Claude Code で/esportsを入力して読み込まれたか確認します。
詳細
Esports Data
API キー不要の公開ソースです。API キーも登録も不要です。
- Dota 2 → OpenDota(
api.opendota.com)。実際の JSON データです。無料枠は約 60 リクエスト/分です。 - League of Legends esports → Leaguepedia Cargo(
lol.fandom.com)。構造化された行データです。CC-BY-SA — データを再利用する場合は Leaguepedia をクレジット表記してください。
重要
- 試合/チーム/リーグのデータには Dota 2 のみ を使用します(OpenDota)。LoL には Leaguepedia Cargo を使用します。
- Leaguepedia には厳しいレート制限があります。 制限に達すると、HTTP 200 で レスポンス本文内 のエラー(
Leaguepedia API error: ...)が返ります。4xx エラーではありません。結果は約 30 分キャッシュされるため、頻繁にリクエストしないでください。order_byを含むクエリは毎回この制限エラーが返るため、lol_cargo_queryではorder_byを避けて、行を自分で並べ替えてください。 - OpenDota には日付フィルターがありません。
get_pro_matchesは最新のプロの試合を返します(1 回あたり最大 100 件)。それより古い試合を取得するには、レスポンスのnext_less_than_match_idをless_than_match_idとして渡してください。 - Dota のチームは名前ではなく
team_idで照合してください。 OpenDota には、大文字と小文字のみが異なる別々のレコードがあります(2013 年のmouzは 161707、現在のMOUZは 9338413)。 - ここではオッズを取得できません。 e スポーツのブックメーカーオッズは API キーなしでは利用できません。暗黙の確率を示すシグナルには、
kalshi get_esports_odds --game=cs2またはpolymarket get_esports_eventsを使用してください。 - 個人利用向けです。 第三者の利用規約が適用されます(OpenDota は MIT、Leaguepedia は CC-BY-SA)。
クイックスタート
CLI:
sports-skills esports get_pro_matches --limit=10
sports-skills esports get_pro_teams --limit=10
sports-skills esports get_leagues --tier=premium
sports-skills esports get_lol_tournaments --region=Korea --limit=5
sports-skills esports lol_cargo_query --tables=Teams --fields=Name,Region --limit=5
Python:
from sports_skills import esports
esports.get_pro_matches(limit=10)
esports.get_lol_tournaments(region="Brazil")
コマンド
| コマンド | 説明 |
|---|---|
get_pro_matches | Dota 2 の最新のプロの試合を新しい順に取得します。less_than_match_id を使って前のページを取得できます(OpenDota) |
get_leagues | Dota 2 のリーグ/トーナメントを新しい順に取得します。ティアで絞り込めます(OpenDota) |
get_pro_teams | レーティング上位の Dota 2 チームを取得します(OpenDota) |
get_match | ID を指定して Dota 2 の試合の詳細を取得します(OpenDota) |
get_lol_tournaments | 2 か月前の月初以降に開始する LoL e スポーツトーナメントを新しい順に取得します(Leaguepedia) |
lol_cargo_query | Leaguepedia Cargo に対する生クエリです(任意のテーブル/フィールド) |
Leaguepedia Cargo リファレンス
lol_cargo_query には tables と fields が必要です。よく使われるテーブル(フィールドは異なる場合があるため、まず小さなクエリで確認してください):Tournaments(Name, DateStart, DateEnd, League, Region, Prizepool)、MatchSchedule(Team1, Team2, Winner, DateTime_UTC, BestOf)、ScoreboardGames、Players、Teams。完全なスキーマ:
https://lol.fandom.com/wiki/Special:CargoTables。Cargo 自体はフィールド名にスペースを含めて返しますが、行のキーには指定したフィールド名(DateTime_UTC)が使われます。
トラブルシューティング
Leaguepedia API error: You've exceeded your rate limit→ レート制限が適用されています。時間をおいて再試行してください。コネクターは対策として約 30 分間キャッシュします。- OpenDota から
matches/teamsが空で返る → 一時的な問題です。OpenDota はボランティア運営のベストエフォート型インフラで、SLA はありません。再試行してください。
コメント
Markdown 対応