Esports — особенности данных
Esports добавляет к Match отдельный объект esports: EsportsData. На v2.0.8 в API поддерживаются три дисциплины: CS2, Dota 2, League of Legends. Структура EsportsGame внутри esports.games[] различается по дисциплине.
Поля под киберспорт — в интерактивном дереве ниже. Вкладка Match — общая структура (поле esports подсвечено), вкладка EsportsData — структура киберспортивного объекта (games, rounds, bans, статистика). Структура EsportsGame различается по дисциплине (CS2 / Dota 2 / LoL) — детали ниже; блоки кода иллюстративны.
Sport Schema Explorer
Выберите вид спорта — поля, специфичные для него, подсветятся и раскроются; неприменимые приглушатся. Поля без бейджей — общие для всех видов спорта.
MatchidintegerstatusstringstatusDescriptionstringnullabledateEventstringstartTimestampintegercurrentMatchMinuteintegercurrentMatchSecondintegerovertimeLengthintegertournamentTournamentBriefidintegernamestringtranslationsobjectimagestringcategoryCategoryBriefidintegernamestringtranslationsobjectimagestringroundInfoRoundInfonamestringroundintegerseasonSeasonBriefidintegernamestringyearstringvenueVenueidintegernullablenamestringnullabletranslationsobjectcapacityintegernullablecityobjectcountryobjectrefereeRefereeФутболidintegernullablenamestringyellowCardsintegerredCardsintegeryellowRedCardsintegergamesintegercountryobjecttranslationsobjecthomeTeamTeamWithLineupidintegernullablenamestringnullablefullNamestringnullabletranslationsobjectgenderstringnullablecountrystringnullablemanagerManagernullableimagestringlineupLineupnullableФутболХоккейБаскетболВолейболawayTeamTeamWithLineupidintegernullablenamestringnullablefullNamestringnullabletranslationsobjectgenderstringnullablecountrystringnullablemanagerManagernullableimagestringlineupLineupnullableФутболХоккейБаскетболВолейболhomeScoreScorecurrentintegerperiod1integerperiod2integerperiod3integernullableperiod4integernullableperiod5integernullableperiod6integernullableБаскетболНастольный теннисperiod7integernullableБаскетболНастольный теннисperiod1TieBreakintegernullableТеннисperiod2TieBreakintegernullableТеннисperiod3TieBreakintegernullableТеннисperiod4TieBreakintegernullableТеннисperiod5TieBreakintegernullableТеннисpenaltiesintegernullableФутболХоккейdisplaystringnullablepointstringnullableТеннисawayScoreScorecurrentintegerperiod1integerperiod2integerperiod3integernullableperiod4integernullableperiod5integernullableperiod6integernullableБаскетболНастольный теннисperiod7integernullableБаскетболНастольный теннисperiod1TieBreakintegernullableТеннисperiod2TieBreakintegernullableТеннисperiod3TieBreakintegernullableТеннисperiod4TieBreakintegernullableТеннисperiod5TieBreakintegernullableТеннисpenaltiesintegernullableФутболХоккейdisplaystringnullablepointstringnullableТеннисliveEventsLiveEvent[]ФутболХоккейБаскетболВолейболНастольный теннисtimeintegertimeSecondsintegertypestringclassstringteamstringplayerobjectplayerInobjectplayerOutobjectreasonstringfromstringhomeScoreintegerawayScoreintegerperiodintegernullabledescriptionstringplayerNamestringassist1Namestringassist2NamestringmanagerobjectrescindedbooleanplayerInNamestringplayerOutNamestringinjurybooleansequenceintegernullableconfirmedbooleannullableaddedTimeintegerlengthintegernullabletextstringisLivebooleanmatchStatisticsobject[]oddsBaseOddsMarket[]namestringgroupstringperiodstringisLivebooleansuspendedbooleanchoicesOddsChoice[]highlightsHighlight[]titlestringurlstringimagestringesportsEsportsDatanullableКиберспортbestOfintegernullablegamesEsportsGame[]tennisTennisDatanullableТеннисbestOfintegernullablegroundTypestringnullablefirstToServestringnullablehomePlayerSeedstringnullableawayPlayerSeedstringnullablesetsTennisSet[]nullablemomentumTennisMomentumItem[]nullablepointByPointTennisPointByPointSet[]nullablehasBkOddsobjectmelbetbooleanoddsBkBookmakerOddsnullablemelbetBookmakerOddsDataMatch.esports: EsportsData
esports: {
bestOf: 3, // формат серии: 1 / 3 / 5 / 7
games: EsportsGame[]
}
bestOf указывает максимально возможное число игр (карт). Реальное число элементов в games[] — от 1 до bestOf.
EsportsGame — общие поля
{
id: 14620101,
gameNumber: 1, // 1-based, индекс игры в серии
status: "finished", // notstarted | inprogress | finished
winnerCode: 1, // 1 = home, 2 = away, null = ничья/в процессе
durationSeconds: 2718,
startTimestamp: 1739635200000,
homeScore: Score, // см. ниже — что внутри для каждой дисциплины
awayScore: Score,
map: "Inferno" | null, // CS2: название карты; Dota 2 / LoL: null
homeTeamStartingSide: string, // см. ниже
homeTeamPlayers: EsportsPlayer[],
awayTeamPlayers: EsportsPlayer[],
statistics: { home, away },
rounds: EsportsRounds | null, // только CS2
bans: EsportsBans | null // только Dota 2 / LoL
}
homeTeamStartingSide
| Дисциплина | Возможные значения |
|---|---|
| CS2 | "T", "CT" |
| Dota 2 | "Radiant", "Dire" |
| LoL | "Blue", "Red" |
CS2 (Counter-Strike 2)
EsportsGame для CS2
map:"Dust2","Inferno","Mirage","Ancient","Nuke","Anubis","Vertigo".Scoreхранит раунды:period1(первая половина),period2(вторая),current— итог.rounds: EsportsRounds:
rounds: {
roundsInAHalf: 12, // MR12 → 12, MR15 → 15
normaltime: EsportsRound[],
overtime: EsportsRound[] | null,
overtimeChunkSize: 6 | null // обычно 6 раундов в чанке OT
}
Каждый EsportsRound:
{
roundNumber: 1,
outcome: "elimination", // "elimination" | "defuse" | "explosion" | "timeout"
winnerCode: 1,
homeTeamSide: "T" // сторона home в этом раунде
}
EsportsPlayer для CS2
{
player: { id, name, shortName, image, ... },
kills: 28,
deaths: 16,
assists: 4,
kdDiff: 12, // kills - deaths
adr: 92.4, // Average Damage per Round
kast: "84%", // % раундов с kill/assist/survival/trade
headshots: 14,
firstKillsDiff: 5, // first kills - first deaths
flashAssists: 3
}
EsportsTeamStatistics для CS2
Обычно — лишь firstBlood: boolean. Основная статистика лежит в rounds[].
Dota 2
EsportsGame для Dota 2
map:null.Score:current— kills команды;periodNобычно не используется.bans: EsportsBans— забаненные герои:
bans: {
home: [{ name: "Pudge", slug: "pudge" }, ...],
away: [{ name: "Invoker", slug: "invoker" }, ...]
}
statistics:
statistics: {
home: {
faction: "Radiant",
kills: 38,
towersDestroyed: 11,
towersRemaining: 0,
barracksDestroyed: 5,
barracksRemaining: 1,
firstBlood: true
},
away: { faction: "Dire", ... }
}
EsportsPlayer для Dota 2
{
player: { id, name, position, positionName, ... },
kills, deaths, assists,
denies: 18,
goldPerMin: 712,
xpPerMin: 685,
lastHits: 348,
netWorth: 35420,
heroLevel: 28,
character: { name: "Anti-Mage", slug: "anti-mage" }
}
Возможные значения player.position (Dota 2): hc, mid, off, ss, hs. Расшифровки — в player.positionName.
League of Legends
EsportsGame для LoL
map:null.Score:current— kills команды.bans: EsportsBans— забаненные чемпионы (обычно 5 на команду).statistics:
statistics: {
home: {
color: "Blue",
kills: 21,
goldEarned: 68420,
towerKills: 10,
inhibitorKills: 2,
dragonKills: 4,
chemtechDrakeKills: 0,
cloudDrakeKills: 2,
hextechDrakeKills: 1,
infernalDrakeKills: 1,
mountainDrakeKills: 0,
oceanDrakeKills: 0,
nashorKills: 2,
elderDrakeKills: 1,
firstBlood: true
},
away: { color: "Red", ... }
}
EsportsPlayer для LoL
{
player: { id, name, role, ... },
kills, deaths, assists,
goldEarned: 14200,
level: 18,
minionsKilled: 281,
character: { name: "Azir", slug: "azir" }
}
Возможные значения player.role (LoL): top, jun, mid, adc, sup.
Live-обновления через WebSocket
Esports-матчи отлично подходят для подписки match:esports:<matchId> — серия может занимать 1–3 часа, и WS-канал избавляет от polling.
В changes.added / changes.updated встречается:
esports.games[N]— новая игра серии (послеgameNumber: previous + 1).esports.games[N].rounds.normaltime[N]— новый CS2-раунд.esports.games[N].bans.home[N]/.away[N]— обновление драфта (Dota 2 / LoL).esports.games[N].statistics.home.*— командные счётчики (kills, gold, dragons и т. п.).esports.games[N].homeTeamPlayers[N].kills/deaths/assistsи т. д. — индивидуальная статистика.
См. Recipes → Esports tracker для готового конвейера.
Связанные ссылки
- API Reference — выберите
sportSlug=esportsв каждой operation - Recipes → Esports tracker
- WebSocket → Snapshot vs Delta