├── .gitignore ├── dash.svg ├── invalid.svg ├── LICENSE ├── index.html ├── styles.css ├── README.md ├── koodiklinikka-dark.svg ├── app.js └── tests └── mock-api.json /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ -------------------------------------------------------------------------------- /dash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /invalid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 12 | 14 | 18 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2023 Juha-Matti Santala 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | NHL Bracket 8 | 9 | 10 | 11 |

NHL Bracket Leaderboard 2023

12 | 13 | 18 | 19 |
Haetaan dataa...
20 | 21 | 22 | 23 |
24 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | display: flex; 3 | justify-content: center; 4 | align-items: center; 5 | } 6 | 7 | h1 img { 8 | margin-right: 1em; 9 | } 10 | table { 11 | max-width: 1600px; 12 | width: 100%; 13 | border-collapse: collapse; 14 | margin: auto; 15 | } 16 | 17 | thead { 18 | text-align: left; 19 | } 20 | 21 | tbody > tr:nth-child(2n) { 22 | background: #f5f5f5; 23 | } 24 | 25 | img { 26 | max-width: 40px; 27 | } 28 | 29 | td.correct { 30 | background: green; 31 | } 32 | 33 | td.incorrect { 34 | background: rgb(106, 3, 3); 35 | } 36 | 37 | th { 38 | padding-right: 5px; 39 | } 40 | 41 | th.series { 42 | min-width: 80px; 43 | } 44 | 45 | td { 46 | width: 7%; 47 | } 48 | 49 | td.wide { 50 | width: 15%; 51 | } 52 | 53 | td.narrow { 54 | width: 5%; 55 | } 56 | 57 | td.logo { 58 | text-align: center; 59 | } 60 | 61 | div.series { 62 | display: flex; 63 | align-items: center; 64 | justify-content: center; 65 | } 66 | span { 67 | color: rgb(199, 199, 199); 68 | } 69 | 70 | span.correct-games { 71 | font-weight: 900; 72 | color: white; 73 | } 74 | 75 | div.inner { 76 | display: flex; 77 | align-items: center; 78 | justify-content: center; 79 | } 80 | 81 | #last-updated { 82 | max-width: 100ch; 83 | margin: auto; 84 | margin-top: 2em; 85 | } 86 | footer { 87 | max-width: 100ch; 88 | margin: auto; 89 | } 90 | 91 | #loading { 92 | text-align: center; 93 | } 94 | 95 | input[type="radio"] { 96 | margin-right: 2em; 97 | } 98 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KK-Bracket 2 | 3 | Käy katsomassa ajossa: [https://kk-bracket.netlify.app](https://kk-bracket.netlify.app) 4 | 5 | Nopia custom-UI NHL:n Playoff Bracket -skabaan [Koodiklinikan](https://koodiklinikka.fi)\* liigalle. 6 | 7 | Tehty, koska NHL:n oma bracket-webbisivu näyttää pienen laatikon keskellä näyttöä eikä oo helppoa hakea aina sarjojen päätyttyä tilanteita. 8 | 9 | ## Saako tän omalle liigalle myös? 10 | 11 | No tokihan! Kopsaa koodi ja navigoi `app.js`. Vaihda `LEAGUE_ID`:ksi oman liigasi NHL Bracket Challenge ID ja `LEAGUE_DISPLAY_NAME`:ksi oman liigasi nimi. Ole hyvä! 12 | 13 | Arvostan jos säilytät footerissa linkitykset tähän repositoryyn ja Juhiksen sivuille. Pakko ei kuitenkaan lisenssin puitteissa ole. 14 | 15 | ## Mitä jos tää lakkaa toimimasta? 16 | 17 | On mahdollista, että NHL sulkee nuo rajapinnat, jolloin nämä bracket-työkalut hajoaa samalla. Jos näin käy, toivottavasti NHL kehittää hyvät työkalut tilalle. 18 | 19 | ## Dev-juttui 20 | 21 | Vanilla-JS:ää, HTML:ää ja CSS:ää ilman mitään krumeluureja. 22 | 23 | Käyttää NHL Bracket Challengen API-rajapintoja, jotka näytti olevan auki. 24 | 25 | ## Contribuoi 26 | 27 | Saa tehä pullareita jotka lisää/korjaa/parantelee. Erityisesti jos teet siitä nätimmän kuin se on nyt. 28 | 29 | ## Lokaalia testausta 30 | 31 | Jos tahtoo testailla lokaalisti eri tiloja ja tilanteita, `tests/`-kansiosta löytyy mock API entryille ja sarjojen tilanteille. 32 | 33 | Ajamalla `npx json-server tests/mock-api.json`, saa käyttöönsä rajapinnan `http://localhost:3000`, jolla endpointit `/picks` ja `/results`. Korvaa `app.js`:ssä `ENTRIES_URL`:ksi `http://localhost:3000/picks` ja `SERIES_URL`:ksi `http://localhost:3000/results`. 34 | 35 | Näin voi kokeilla eri skenaarioita vaihtamalla mock-api.jsonin arvoja. Muista käynnistää `npx json-server tests/mock-api.json` uusiksi muutosten välillä. 36 | 37 | ## Muut huomiot 38 | 39 | Kiitos lehtulle APIen kaivamisesta! 40 | 41 | \* Koodiklinikka on vallan mukava suomalainen ohjelmistokehittäjien ja siitä kiinnostuneiden yhteisö. Meitä on reilu 5000 Slackissa ja #penkkiurheilu-kanavalla seurataan lätkää suurella intohimolla. 42 | -------------------------------------------------------------------------------- /koodiklinikka-dark.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | /* A general note: this file uses a lot of == instead of === for a purpose. 2 | * The API is very inconsistent in how it stores information: 3 | * sometimes its numbers and sometimes numeric strings. 4 | * 5 | * Don't blindly refactor them to === or you'll make a mess. 6 | * A better approach would be to actually map what types are used and where. 7 | */ 8 | 9 | /* CONFIGURATION */ 10 | // If you want to configure this to your league, change the LEAGUE_ID to match 11 | // your league id in NHL Bracket Challenge 12 | // and LEAGUE_DISPLAY_NAME to your league's name for the heading 13 | const LEAGUE_ID = 19868; 14 | const LEAGUE_DISPLAY_NAME = "Apocalypsen"; 15 | /* END OF CONFIGURATION */ 16 | 17 | const ENTRIES_URL = `https://low6-nhl-brackets-prod.azurewebsites.net/leagues/${LEAGUE_ID}/leaderboard?offset=0&limit=50`; 18 | const SERIES_URL = "https://low6-nhl-brackets-prod.azurewebsites.net/game"; 19 | 20 | let ENTRIES_DATA = null; 21 | let SERIES_DATA = null; 22 | 23 | let title = document.querySelector("title"); 24 | title.textContent = `${LEAGUE_DISPLAY_NAME} ${title.textContent}`; 25 | 26 | let h1 = document.querySelector("h1"); 27 | h1.textContent = `${LEAGUE_DISPLAY_NAME} ${h1.textContent}`; 28 | 29 | /** 30 | * Checks if user's pick for a given series is correct 31 | * @param {object} entry User's entry 32 | * @param {object} game Game result 33 | * @returns user's pick matches the result of game 34 | */ 35 | function isCorrectPick(entry, game) { 36 | // User picks are strings, winner_id is number. Lovely. 37 | return parseInt(entry[`match_${game.id}_pick`]) === game.winner_id; 38 | } 39 | 40 | /** 41 | * Checks if user has guessed the right amount of games for a series 42 | * 43 | * @param {object} entry 44 | * @param {object} game 45 | * @returns 46 | */ 47 | function isCorrectAmountGames(entry, game) { 48 | // If series isn't finished yet, early return false 49 | if (!game.is_scored) { 50 | return false; 51 | } 52 | 53 | // Amount of wins are strings. Lovely. 54 | const t1_wins = parseInt(game.team_1_wins); 55 | const t2_wins = parseInt(game.team_2_wins); 56 | const seriesLength = t1_wins + t2_wins; 57 | // Amount of wins is a string. Lovely. 58 | const howManyGames = parseInt(entry[`match_${game.id}_match_played`]); 59 | 60 | return seriesLength === howManyGames; 61 | } 62 | 63 | /** 64 | * Given a list of series, checks if they have all finished 65 | * @param {Array} series 66 | * @returns all series have finished 67 | */ 68 | function hasFinished(series) { 69 | return series.every((serie) => serie.is_scored); 70 | } 71 | 72 | /** 73 | * Adds dynamic table header cells for series matchups 74 | * in form of "[homeLogo] - [awayLogo]" 75 | * 76 | * @param {Array} games An array of currently displayed series 77 | * @param {Array} teams An array of teams in the playoffs 78 | */ 79 | function createHeaders(games, teams) { 80 | const tr = document.querySelector("thead > tr"); 81 | games.forEach((game) => { 82 | const th = document.createElement("th"); 83 | const div = document.createElement("div"); 84 | div.classList.add("series"); 85 | th.appendChild(div); 86 | th.classList.add("series"); 87 | tr.appendChild(th); 88 | 89 | const homeLogo = document.createElement("img"); 90 | homeLogo.alt = 91 | teams.find((team) => team.team_id == game.team_1_id)?.display_name || "?"; 92 | homeLogo.src = `https://www-league.nhlstatic.com/images/logos/teams-current-primary-light/${game.team_1_id}.svg`; 93 | 94 | const awayLogo = document.createElement("img"); 95 | awayLogo.alt = 96 | teams.find((team) => team.team_id == game.team_2_id)?.display_name || "?"; 97 | awayLogo.src = `https://www-league.nhlstatic.com/images/logos/teams-current-primary-light/${game.team_2_id}.svg`; 98 | 99 | const separator = document.createElement("span"); 100 | separator.textContent = " - "; 101 | div.appendChild(homeLogo); 102 | div.appendChild(separator); 103 | div.appendChild(awayLogo); 104 | }); 105 | } 106 | 107 | /** 108 | * Creates a row based on user's information: 109 | * their rank, name, champion pick, points, possible max points 110 | * and each pick. 111 | * 112 | * If a series has already finished, also show if the pick was correct/incorrect 113 | * and how many games user had guessed 114 | * 115 | * @param {object} entry 116 | * @param {HTMLTableRowElement} tr 117 | * @param {Array} games 118 | * @param {Array} teams 119 | */ 120 | function createRow(entry, tr, games, teams) { 121 | const { rank, entry_name, points, possible_points, champion_id } = entry; 122 | 123 | // Create columns 124 | let rankTd = document.createElement("td"); 125 | let nameTd = document.createElement("td"); 126 | let pointsTd = document.createElement("td"); 127 | let possiblePointsTd = document.createElement("td"); 128 | let championTd = document.createElement("td"); 129 | 130 | tr.appendChild(rankTd); 131 | tr.appendChild(nameTd); 132 | tr.appendChild(championTd); 133 | tr.appendChild(pointsTd); 134 | tr.appendChild(possiblePointsTd); 135 | 136 | rankTd.innerHTML = rank; 137 | 138 | nameTd.innerHTML = entry_name; 139 | nameTd.classList.add("wide"); 140 | 141 | let championLogo = document.createElement("img"); 142 | championLogo.src = `https://www-league.nhlstatic.com/images/logos/teams-current-primary-light/${champion_id}.svg`; 143 | championLogo.alt = teams.find( 144 | (team) => team.team_id === parseInt(champion_id) 145 | ).display_name; 146 | championTd.appendChild(championLogo); 147 | championTd.classList.add("narrow"); 148 | championTd.classList.add("logo"); 149 | 150 | pointsTd.innerHTML = points; 151 | 152 | possiblePointsTd.innerHTML = possible_points; 153 | 154 | games.forEach((game) => { 155 | let gameTd = document.createElement("td"); 156 | let inner = document.createElement("div"); 157 | gameTd.appendChild(inner); 158 | inner.classList.add("inner"); 159 | let selectedPick = document.createElement("img"); 160 | inner.appendChild(selectedPick); 161 | 162 | gameTd.classList.add("narrow"); 163 | gameTd.classList.add("logo"); 164 | 165 | const gameId = game.id; 166 | const pickKey = `match_${gameId}_pick`; 167 | const userPick = entry[pickKey]; 168 | 169 | // If user's pick is not in the running anymore 170 | if (userPick != game.team_1_id && userPick != game.team_2_id) { 171 | selectedPick.src = `dash.svg`; 172 | selectedPick.alt = "Pick no longer in play"; 173 | } else { 174 | selectedPick.src = `https://www-league.nhlstatic.com/images/logos/teams-current-primary-light/${userPick}.svg`; 175 | selectedPick.alt = teams.find( 176 | (team) => team.team_id === parseInt(userPick) 177 | ).display_name; 178 | } 179 | 180 | // If the series is finished, show which picks were right 181 | // and how many games participants guessed the series would take 182 | if (game.winner_id !== null) { 183 | const correctPick = isCorrectPick(entry, game); 184 | 185 | // Only first round has picks for how many games series takes. 186 | if (game.round_sequence === 1) { 187 | const span = document.createElement("span"); 188 | span.textContent = `(in ${entry[`match_${game.id}_match_played`]})`; 189 | inner.appendChild(span); 190 | if (game.round_sequence === 1 && isCorrectAmountGames(entry, game)) { 191 | span.classList.add("correct-games"); 192 | } 193 | } 194 | 195 | if (correctPick) { 196 | gameTd.classList.add("correct"); 197 | } else { 198 | gameTd.classList.add("incorrect"); 199 | } 200 | } 201 | tr.appendChild(gameTd); 202 | }); 203 | } 204 | 205 | const fieldset = document.querySelector("fieldset"); 206 | 207 | function clearTable() { 208 | clearHeaders(); 209 | document.querySelector("tbody").innerHTML = ""; 210 | } 211 | 212 | function clearHeaders() { 213 | const thead = document.querySelector("thead"); 214 | thead.innerHTML = ` 215 | 216 | Sij. 217 | Nimi 218 | Mestari 219 | Pist. 220 | Max. 221 | `; 222 | } 223 | 224 | async function renderFields() { 225 | let [_, series] = await fetchData(); 226 | let games = series.game.series_results; 227 | const firstRoundGames = games.filter((game) => game.round_sequence === 1); 228 | const secondRoundGames = games.filter((game) => game.round_sequence === 2); 229 | const conferenceFinals = games.filter((game) => game.round_sequence === 3); 230 | 231 | fieldset.innerHTML = "Valitse kierros"; 232 | if (!hasFinished(firstRoundGames)) { 233 | const r1 = createRoundSelector("Ensimmäinen kierros", "first", fieldset); 234 | r1.checked = true; 235 | } else if (!hasFinished(secondRoundGames)) { 236 | const r1 = createRoundSelector("Ensimmäinen kierros", "first", fieldset); 237 | const r2 = createRoundSelector("Toinen kierros", "second", fieldset); 238 | r2.checked = true; 239 | } else if (!hasFinished(conferenceFinals)) { 240 | const r1 = createRoundSelector("Ensimmäinen kierros", "first", fieldset); 241 | const r2 = createRoundSelector("Toinen kierros", "second", fieldset); 242 | const r3 = createRoundSelector("Konferenssifinaalit", "third", fieldset); 243 | r3.checked = true; 244 | } else { 245 | const r1 = createRoundSelector("Ensimmäinen kierros", "first", fieldset); 246 | const r2 = createRoundSelector("Toinen kierros", "second", fieldset); 247 | const r3 = createRoundSelector("Konferenssifinaalit", "third", fieldset); 248 | const r4 = createRoundSelector("Stanley Cup", "fourth", fieldset); 249 | r4.checked = true; 250 | } 251 | } 252 | 253 | function handleRoundChange(ev) { 254 | const round = ev.target.value; 255 | renderTable(round); 256 | } 257 | 258 | function createRoundSelector(label, name, fieldset) { 259 | const radio = document.createElement("input"); 260 | radio.type = "radio"; 261 | radio.value = name; 262 | radio.name = "round"; 263 | radio.id = name; 264 | const labelNode = document.createElement("label"); 265 | labelNode.textContent = label; 266 | labelNode.htmlFor = name; 267 | 268 | radio.onchange = handleRoundChange; 269 | 270 | fieldset.appendChild(labelNode); 271 | fieldset.appendChild(radio); 272 | return radio; 273 | } 274 | 275 | async function fetchData() { 276 | if (ENTRIES_DATA === null) { 277 | ENTRIES_DATA = (await fetch(ENTRIES_URL).then((res) => res.json())).entries; 278 | } 279 | 280 | if (SERIES_DATA === null) { 281 | SERIES_DATA = await fetch(SERIES_URL).then((res) => res.json()); 282 | } 283 | 284 | return [ENTRIES_DATA, SERIES_DATA]; 285 | } 286 | 287 | async function renderTable(toDisplay) { 288 | clearTable(); 289 | const [entries, series] = await fetchData(); 290 | 291 | const games = series.game.series_results; 292 | const teams = series.game.teams; 293 | 294 | const firstRoundGames = games.filter((game) => game.round_sequence === 1); 295 | const secondRoundGames = games.filter((game) => game.round_sequence === 2); 296 | const conferenceFinals = games.filter((game) => game.round_sequence === 3); 297 | const finals = games.filter((game) => game.round_sequence === 4); 298 | 299 | // Choose the round to display based on the earliest round that is not finished 300 | // If you want to tweak what is displayed, tinker with this. 301 | let roundToDisplay = []; 302 | if (!hasFinished(firstRoundGames) || toDisplay === "first") { 303 | roundToDisplay = firstRoundGames; 304 | } else if (!hasFinished(secondRoundGames) || toDisplay === "second") { 305 | roundToDisplay = secondRoundGames; 306 | } else if (!hasFinished(conferenceFinals) || toDisplay === "third") { 307 | roundToDisplay = conferenceFinals; 308 | } else { 309 | roundToDisplay = finals; 310 | } 311 | 312 | createHeaders(roundToDisplay, teams); 313 | 314 | const tbody = document.querySelector("tbody"); 315 | 316 | entries.forEach((entry) => { 317 | let tr = document.createElement("tr"); 318 | createRow(entry, tr, roundToDisplay, teams); 319 | tbody.appendChild(tr); 320 | }); 321 | 322 | document.querySelector("table").style = "display: block"; 323 | document.querySelector("#loading").style = "display: none"; 324 | fieldset.style = "display: block"; 325 | } 326 | 327 | renderFields().then(() => renderTable()); 328 | -------------------------------------------------------------------------------- /tests/mock-api.json: -------------------------------------------------------------------------------- 1 | { 2 | "picks": { 3 | "entries": [ 4 | { 5 | "entry_id": "24523", 6 | "user_id": "153511", 7 | "points": "62", 8 | "possible_points": "401", 9 | "entry_name": "eski", 10 | "champion_id": "6", 11 | "tiebreaker": "32", 12 | "match_101_pick": "21", 13 | "match_102_pick": "25", 14 | "match_103_pick": "54", 15 | "match_104_pick": "22", 16 | "match_105_pick": "6", 17 | "match_106_pick": "10", 18 | "match_107_pick": "12", 19 | "match_108_pick": "3", 20 | "match_201_pick": "21", 21 | "match_202_pick": "22", 22 | "match_203_pick": "6", 23 | "match_204_pick": "3", 24 | "match_301_pick": "22", 25 | "match_302_pick": "6", 26 | "match_401_pick": "6", 27 | "match_101_match_played": "6", 28 | "match_102_match_played": "6", 29 | "match_103_match_played": "5", 30 | "match_104_match_played": "5", 31 | "match_105_match_played": "4", 32 | "match_106_match_played": "6", 33 | "match_107_match_played": "6", 34 | "match_108_match_played": "5", 35 | "updated_at": "2023-04-15T07:36:00.000Z", 36 | "rank": 1 37 | }, 38 | { 39 | "entry_id": "477098", 40 | "user_id": "518407", 41 | "points": "59", 42 | "possible_points": "398", 43 | "entry_name": "MAMBA'S Bracket", 44 | "champion_id": "6", 45 | "tiebreaker": "35", 46 | "match_101_pick": "21", 47 | "match_102_pick": "25", 48 | "match_103_pick": "54", 49 | "match_104_pick": "22", 50 | "match_105_pick": "6", 51 | "match_106_pick": "10", 52 | "match_107_pick": "12", 53 | "match_108_pick": "3", 54 | "match_201_pick": "21", 55 | "match_202_pick": "22", 56 | "match_203_pick": "6", 57 | "match_204_pick": "12", 58 | "match_301_pick": "21", 59 | "match_302_pick": "6", 60 | "match_401_pick": "6", 61 | "match_101_match_played": "6", 62 | "match_102_match_played": "7", 63 | "match_103_match_played": "6", 64 | "match_104_match_played": "6", 65 | "match_105_match_played": "4", 66 | "match_106_match_played": "6", 67 | "match_107_match_played": "6", 68 | "match_108_match_played": "7", 69 | "updated_at": "2023-04-17T20:06:00.000Z", 70 | "rank": 2 71 | }, 72 | { 73 | "entry_id": "359540", 74 | "user_id": "75318", 75 | "points": "59", 76 | "possible_points": "398", 77 | "entry_name": "mkainula", 78 | "champion_id": "6", 79 | "tiebreaker": "24", 80 | "match_101_pick": "21", 81 | "match_102_pick": "25", 82 | "match_103_pick": "54", 83 | "match_104_pick": "22", 84 | "match_105_pick": "6", 85 | "match_106_pick": "10", 86 | "match_107_pick": "12", 87 | "match_108_pick": "1", 88 | "match_201_pick": "21", 89 | "match_202_pick": "22", 90 | "match_203_pick": "6", 91 | "match_204_pick": "12", 92 | "match_301_pick": "22", 93 | "match_302_pick": "6", 94 | "match_401_pick": "6", 95 | "match_101_match_played": "5", 96 | "match_102_match_played": "6", 97 | "match_103_match_played": "6", 98 | "match_104_match_played": "6", 99 | "match_105_match_played": "4", 100 | "match_106_match_played": "7", 101 | "match_107_match_played": "6", 102 | "match_108_match_played": "6", 103 | "updated_at": "2023-04-17T06:12:00.000Z", 104 | "rank": 2 105 | }, 106 | { 107 | "entry_id": "26907", 108 | "user_id": "75296", 109 | "points": "56", 110 | "possible_points": "395", 111 | "entry_name": "Juhis", 112 | "champion_id": "21", 113 | "tiebreaker": "32", 114 | "match_101_pick": "21", 115 | "match_102_pick": "25", 116 | "match_103_pick": "54", 117 | "match_104_pick": "22", 118 | "match_105_pick": "13", 119 | "match_106_pick": "10", 120 | "match_107_pick": "12", 121 | "match_108_pick": "21", 122 | "match_201_pick": "21", 123 | "match_202_pick": "22", 124 | "match_203_pick": "10", 125 | "match_204_pick": "12", 126 | "match_301_pick": "21", 127 | "match_302_pick": "12", 128 | "match_401_pick": "21", 129 | "match_101_match_played": "6", 130 | "match_102_match_played": "5", 131 | "match_103_match_played": "7", 132 | "match_104_match_played": "6", 133 | "match_105_match_played": "6", 134 | "match_106_match_played": "6", 135 | "match_107_match_played": "5", 136 | "match_108_match_played": "6", 137 | "updated_at": "2023-04-19T13:31:00.000Z", 138 | "rank": 4 139 | }, 140 | { 141 | "entry_id": "182827", 142 | "user_id": "76326", 143 | "points": "56", 144 | "possible_points": "395", 145 | "entry_name": "KIPPOKAPPO", 146 | "champion_id": "3", 147 | "tiebreaker": "35", 148 | "match_101_pick": "21", 149 | "match_102_pick": "25", 150 | "match_103_pick": "54", 151 | "match_104_pick": "22", 152 | "match_105_pick": "6", 153 | "match_106_pick": "10", 154 | "match_107_pick": "12", 155 | "match_108_pick": "3", 156 | "match_201_pick": "25", 157 | "match_202_pick": "54", 158 | "match_203_pick": "6", 159 | "match_204_pick": "3", 160 | "match_301_pick": "25", 161 | "match_302_pick": "3", 162 | "match_401_pick": "3", 163 | "match_101_match_played": "5", 164 | "match_102_match_played": "6", 165 | "match_103_match_played": "5", 166 | "match_104_match_played": "5", 167 | "match_105_match_played": "6", 168 | "match_106_match_played": "5", 169 | "match_107_match_played": "5", 170 | "match_108_match_played": "7", 171 | "updated_at": "2023-04-16T00:45:00.000Z", 172 | "rank": 4 173 | }, 174 | { 175 | "entry_id": "50005", 176 | "user_id": "75581", 177 | "points": "46", 178 | "possible_points": "385", 179 | "entry_name": "Lervas", 180 | "champion_id": "22", 181 | "tiebreaker": "15", 182 | "match_101_pick": "21", 183 | "match_102_pick": "25", 184 | "match_103_pick": "54", 185 | "match_104_pick": "22", 186 | "match_105_pick": "6", 187 | "match_106_pick": "10", 188 | "match_107_pick": "2", 189 | "match_108_pick": "3", 190 | "match_201_pick": "25", 191 | "match_202_pick": "22", 192 | "match_203_pick": "6", 193 | "match_204_pick": "3", 194 | "match_301_pick": "22", 195 | "match_302_pick": "6", 196 | "match_401_pick": "22", 197 | "match_101_match_played": "5", 198 | "match_102_match_played": "7", 199 | "match_103_match_played": "5", 200 | "match_104_match_played": "6", 201 | "match_105_match_played": "5", 202 | "match_106_match_played": "5", 203 | "match_107_match_played": "6", 204 | "match_108_match_played": "7", 205 | "updated_at": "2023-04-17T17:21:00.000Z", 206 | "rank": 6 207 | }, 208 | { 209 | "entry_id": "368958", 210 | "user_id": "75329", 211 | "points": "46", 212 | "possible_points": "385", 213 | "entry_name": "alex-666", 214 | "champion_id": "6", 215 | "tiebreaker": "37", 216 | "match_101_pick": "21", 217 | "match_102_pick": "25", 218 | "match_103_pick": "54", 219 | "match_104_pick": "22", 220 | "match_105_pick": "6", 221 | "match_106_pick": "14", 222 | "match_107_pick": "12", 223 | "match_108_pick": "3", 224 | "match_201_pick": "21", 225 | "match_202_pick": "54", 226 | "match_203_pick": "6", 227 | "match_204_pick": "3", 228 | "match_301_pick": "21", 229 | "match_302_pick": "6", 230 | "match_401_pick": "6", 231 | "match_101_match_played": "5", 232 | "match_102_match_played": "6", 233 | "match_103_match_played": "6", 234 | "match_104_match_played": "6", 235 | "match_105_match_played": "6", 236 | "match_106_match_played": "6", 237 | "match_107_match_played": "5", 238 | "match_108_match_played": "5", 239 | "updated_at": "2023-04-19T06:28:00.000Z", 240 | "rank": 6 241 | }, 242 | { 243 | "entry_id": "132109", 244 | "user_id": "75490", 245 | "points": "46", 246 | "possible_points": "385", 247 | "entry_name": "valimaggi", 248 | "champion_id": "22", 249 | "tiebreaker": "24", 250 | "match_101_pick": "21", 251 | "match_102_pick": "25", 252 | "match_103_pick": "54", 253 | "match_104_pick": "22", 254 | "match_105_pick": "6", 255 | "match_106_pick": "10", 256 | "match_107_pick": "2", 257 | "match_108_pick": "3", 258 | "match_201_pick": "21", 259 | "match_202_pick": "22", 260 | "match_203_pick": "6", 261 | "match_204_pick": "3", 262 | "match_301_pick": "22", 263 | "match_302_pick": "6", 264 | "match_401_pick": "22", 265 | "match_101_match_played": "5", 266 | "match_102_match_played": "7", 267 | "match_103_match_played": "6", 268 | "match_104_match_played": "6", 269 | "match_105_match_played": "6", 270 | "match_106_match_played": "6", 271 | "match_107_match_played": "7", 272 | "match_108_match_played": "7", 273 | "updated_at": "2023-04-17T21:10:00.000Z", 274 | "rank": 6 275 | }, 276 | { 277 | "entry_id": "365520", 278 | "user_id": "75381", 279 | "points": "43", 280 | "possible_points": "357", 281 | "entry_name": "einomies", 282 | "champion_id": "21", 283 | "tiebreaker": "245", 284 | "match_101_pick": "21", 285 | "match_102_pick": "25", 286 | "match_103_pick": "54", 287 | "match_104_pick": "26", 288 | "match_105_pick": "13", 289 | "match_106_pick": "10", 290 | "match_107_pick": "12", 291 | "match_108_pick": "1", 292 | "match_201_pick": "21", 293 | "match_202_pick": "26", 294 | "match_203_pick": "10", 295 | "match_204_pick": "12", 296 | "match_301_pick": "21", 297 | "match_302_pick": "12", 298 | "match_401_pick": "21", 299 | "match_101_match_played": "5", 300 | "match_102_match_played": "6", 301 | "match_103_match_played": "7", 302 | "match_104_match_played": "4", 303 | "match_105_match_played": "7", 304 | "match_106_match_played": "7", 305 | "match_107_match_played": "5", 306 | "match_108_match_played": "6", 307 | "updated_at": "2023-04-17T11:06:00.000Z", 308 | "rank": 9 309 | }, 310 | { 311 | "entry_id": "641463", 312 | "user_id": "648559", 313 | "points": "40", 314 | "possible_points": "354", 315 | "entry_name": "Daamn", 316 | "champion_id": "12", 317 | "tiebreaker": "35", 318 | "match_101_pick": "21", 319 | "match_102_pick": "25", 320 | "match_103_pick": "54", 321 | "match_104_pick": "26", 322 | "match_105_pick": "6", 323 | "match_106_pick": "10", 324 | "match_107_pick": "12", 325 | "match_108_pick": "3", 326 | "match_201_pick": "21", 327 | "match_202_pick": "26", 328 | "match_203_pick": "6", 329 | "match_204_pick": "12", 330 | "match_301_pick": "21", 331 | "match_302_pick": "12", 332 | "match_401_pick": "12", 333 | "match_101_match_played": "7", 334 | "match_102_match_played": "7", 335 | "match_103_match_played": "6", 336 | "match_104_match_played": "6", 337 | "match_105_match_played": "6", 338 | "match_106_match_played": "7", 339 | "match_107_match_played": "5", 340 | "match_108_match_played": "6", 341 | "updated_at": "2023-04-19T08:33:00.000Z", 342 | "rank": 10 343 | }, 344 | { 345 | "entry_id": "24055", 346 | "user_id": "75479", 347 | "points": "40", 348 | "possible_points": "354", 349 | "entry_name": "lehtu", 350 | "champion_id": "12", 351 | "tiebreaker": "29", 352 | "match_101_pick": "21", 353 | "match_102_pick": "30", 354 | "match_103_pick": "54", 355 | "match_104_pick": "22", 356 | "match_105_pick": "6", 357 | "match_106_pick": "10", 358 | "match_107_pick": "12", 359 | "match_108_pick": "3", 360 | "match_201_pick": "30", 361 | "match_202_pick": "22", 362 | "match_203_pick": "6", 363 | "match_204_pick": "12", 364 | "match_301_pick": "22", 365 | "match_302_pick": "12", 366 | "match_401_pick": "12", 367 | "match_101_match_played": "7", 368 | "match_102_match_played": "7", 369 | "match_103_match_played": "4", 370 | "match_104_match_played": "5", 371 | "match_105_match_played": "5", 372 | "match_106_match_played": "7", 373 | "match_107_match_played": "7", 374 | "match_108_match_played": "6", 375 | "updated_at": "2023-04-15T06:49:00.000Z", 376 | "rank": 10 377 | }, 378 | { 379 | "entry_id": "640842", 380 | "user_id": "75523", 381 | "points": "33", 382 | "possible_points": "297", 383 | "entry_name": "Juho's bracket", 384 | "champion_id": "6", 385 | "tiebreaker": "21", 386 | "match_101_pick": "21", 387 | "match_102_pick": "25", 388 | "match_103_pick": "54", 389 | "match_104_pick": "26", 390 | "match_105_pick": "6", 391 | "match_106_pick": "14", 392 | "match_107_pick": "12", 393 | "match_108_pick": "3", 394 | "match_201_pick": "21", 395 | "match_202_pick": "26", 396 | "match_203_pick": "6", 397 | "match_204_pick": "3", 398 | "match_301_pick": "26", 399 | "match_302_pick": "6", 400 | "match_401_pick": "6", 401 | "match_101_match_played": "5", 402 | "match_102_match_played": "5", 403 | "match_103_match_played": "6", 404 | "match_104_match_played": "5", 405 | "match_105_match_played": "5", 406 | "match_106_match_played": "5", 407 | "match_107_match_played": "6", 408 | "match_108_match_played": "6", 409 | "updated_at": "2023-04-19T06:38:00.000Z", 410 | "rank": 12 411 | }, 412 | { 413 | "entry_id": "360843", 414 | "user_id": "75399", 415 | "points": "33", 416 | "possible_points": "372", 417 | "entry_name": "Bruins jyrää", 418 | "champion_id": "6", 419 | "tiebreaker": "32", 420 | "match_101_pick": "21", 421 | "match_102_pick": "25", 422 | "match_103_pick": "54", 423 | "match_104_pick": "26", 424 | "match_105_pick": "6", 425 | "match_106_pick": "14", 426 | "match_107_pick": "12", 427 | "match_108_pick": "1", 428 | "match_201_pick": "21", 429 | "match_202_pick": "54", 430 | "match_203_pick": "6", 431 | "match_204_pick": "1", 432 | "match_301_pick": "21", 433 | "match_302_pick": "6", 434 | "match_401_pick": "6", 435 | "match_101_match_played": "5", 436 | "match_102_match_played": "5", 437 | "match_103_match_played": "4", 438 | "match_104_match_played": "7", 439 | "match_105_match_played": "6", 440 | "match_106_match_played": "7", 441 | "match_107_match_played": "6", 442 | "match_108_match_played": "5", 443 | "updated_at": "2023-04-17T06:51:00.000Z", 444 | "rank": 12 445 | }, 446 | { 447 | "entry_id": "483031", 448 | "user_id": "529159", 449 | "points": "30", 450 | "possible_points": "344", 451 | "entry_name": "Subban-On-Marchand", 452 | "champion_id": "6", 453 | "tiebreaker": "31", 454 | "match_101_pick": "55", 455 | "match_102_pick": "30", 456 | "match_103_pick": "54", 457 | "match_104_pick": "22", 458 | "match_105_pick": "6", 459 | "match_106_pick": "14", 460 | "match_107_pick": "12", 461 | "match_108_pick": "1", 462 | "match_201_pick": "30", 463 | "match_202_pick": "22", 464 | "match_203_pick": "6", 465 | "match_204_pick": "1", 466 | "match_301_pick": "22", 467 | "match_302_pick": "6", 468 | "match_401_pick": "6", 469 | "match_101_match_played": "7", 470 | "match_102_match_played": "7", 471 | "match_103_match_played": "6", 472 | "match_104_match_played": "5", 473 | "match_105_match_played": "6", 474 | "match_106_match_played": "6", 475 | "match_107_match_played": "7", 476 | "match_108_match_played": "7", 477 | "updated_at": "2023-04-17T20:28:00.000Z", 478 | "rank": 14 479 | }, 480 | { 481 | "entry_id": "640916", 482 | "user_id": "430187", 483 | "points": "23", 484 | "possible_points": "337", 485 | "entry_name": "hetenho", 486 | "champion_id": "6", 487 | "tiebreaker": "27", 488 | "match_101_pick": "21", 489 | "match_102_pick": "25", 490 | "match_103_pick": "52", 491 | "match_104_pick": "26", 492 | "match_105_pick": "6", 493 | "match_106_pick": "14", 494 | "match_107_pick": "12", 495 | "match_108_pick": "3", 496 | "match_201_pick": "21", 497 | "match_202_pick": "26", 498 | "match_203_pick": "6", 499 | "match_204_pick": "12", 500 | "match_301_pick": "21", 501 | "match_302_pick": "6", 502 | "match_401_pick": "6", 503 | "match_101_match_played": "7", 504 | "match_102_match_played": "7", 505 | "match_103_match_played": "6", 506 | "match_104_match_played": "7", 507 | "match_105_match_played": "5", 508 | "match_106_match_played": "5", 509 | "match_107_match_played": "6", 510 | "match_108_match_played": "6", 511 | "updated_at": "2023-04-19T06:49:00.000Z", 512 | "rank": 15 513 | }, 514 | { 515 | "entry_id": "16779", 516 | "user_id": "102146", 517 | "points": "23", 518 | "possible_points": "337", 519 | "entry_name": "Saapunki", 520 | "champion_id": "3", 521 | "tiebreaker": "31", 522 | "match_101_pick": "21", 523 | "match_102_pick": "25", 524 | "match_103_pick": "52", 525 | "match_104_pick": "26", 526 | "match_105_pick": "6", 527 | "match_106_pick": "14", 528 | "match_107_pick": "12", 529 | "match_108_pick": "3", 530 | "match_201_pick": "21", 531 | "match_202_pick": "26", 532 | "match_203_pick": "6", 533 | "match_204_pick": "3", 534 | "match_301_pick": "21", 535 | "match_302_pick": "3", 536 | "match_401_pick": "3", 537 | "match_101_match_played": "5", 538 | "match_102_match_played": "6", 539 | "match_103_match_played": "7", 540 | "match_104_match_played": "5", 541 | "match_105_match_played": "6", 542 | "match_106_match_played": "5", 543 | "match_107_match_played": "7", 544 | "match_108_match_played": "5", 545 | "updated_at": "2023-04-19T04:34:00.000Z", 546 | "rank": 15 547 | } 548 | ] 549 | }, 550 | "results": { 551 | "game": { 552 | "teams": [ 553 | { 554 | "team_id": 25, 555 | "nickname": "Stars", 556 | "city": "Dallas", 557 | "display_name": "Dallas Stars", 558 | "abbreviation": "DAL", 559 | "twitter_handle": "DallasStars", 560 | "hex_code": "009346", 561 | "display_seed": "C2", 562 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/25.svg", 563 | "wins": 40, 564 | "points": 94, 565 | "goals_per_game": 3.405, 566 | "goals_against_per_game": 2.73, 567 | "power_play_pct": 23.25, 568 | "penalty_kill_pct": 83.56, 569 | "secondary_hex_code": "231F20", 570 | "leading_scorer": "Jason Robertson" 571 | }, 572 | { 573 | "team_id": 21, 574 | "nickname": "Avalanche", 575 | "city": "Colorado", 576 | "display_name": "Colorado Avalanche", 577 | "abbreviation": "COL", 578 | "twitter_handle": "Avalanche", 579 | "hex_code": "860038", 580 | "display_seed": "C1", 581 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/21.svg", 582 | "wins": 44, 583 | "points": 94, 584 | "goals_per_game": 3.257, 585 | "goals_against_per_game": 2.73, 586 | "power_play_pct": 25.21, 587 | "penalty_kill_pct": 79.74, 588 | "secondary_hex_code": "005695", 589 | "leading_scorer": "Mikko Rantanen" 590 | }, 591 | { 592 | "team_id": 30, 593 | "nickname": "Wild", 594 | "city": "Minnesota", 595 | "display_name": "Minnesota Wild", 596 | "abbreviation": "MIN", 597 | "twitter_handle": "mnwild", 598 | "hex_code": "AE132A", 599 | "display_seed": "C3", 600 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/30.svg", 601 | "wins": 44, 602 | "points": 97, 603 | "goals_per_game": 2.947, 604 | "goals_against_per_game": 2.613, 605 | "power_play_pct": 21.65, 606 | "penalty_kill_pct": 80.93, 607 | "secondary_hex_code": "004023", 608 | "leading_scorer": "Kirill Kaprizov" 609 | }, 610 | { 611 | "team_id": 26, 612 | "nickname": "Kings", 613 | "city": "Los Angeles", 614 | "display_name": "Los Angeles Kings", 615 | "abbreviation": "LAK", 616 | "twitter_handle": "LAKings", 617 | "hex_code": "B0B7BC", 618 | "display_seed": "P3", 619 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/26.svg", 620 | "wins": 43, 621 | "points": 96, 622 | "goals_per_game": 3.373, 623 | "goals_against_per_game": 3.16, 624 | "power_play_pct": 25.2, 625 | "penalty_kill_pct": 75.5, 626 | "secondary_hex_code": "231F20", 627 | "leading_scorer": "Adrian Kempe" 628 | }, 629 | { 630 | "team_id": 22, 631 | "nickname": "Oilers", 632 | "city": "Edmonton", 633 | "display_name": "Edmonton Oilers", 634 | "abbreviation": "EDM", 635 | "twitter_handle": "EdmontonOilers", 636 | "hex_code": "091F40", 637 | "display_seed": "P2", 638 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/22.svg", 639 | "wins": 44, 640 | "points": 97, 641 | "goals_per_game": 3.947, 642 | "goals_against_per_game": 3.289, 643 | "power_play_pct": 32.43, 644 | "penalty_kill_pct": 75.86, 645 | "secondary_hex_code": "F05123", 646 | "leading_scorer": "Connor McDavid" 647 | }, 648 | { 649 | "team_id": 6, 650 | "nickname": "Bruins", 651 | "city": "Boston", 652 | "display_name": "Boston Bruins", 653 | "abbreviation": "BOS", 654 | "twitter_handle": "NHLBruins", 655 | "hex_code": "FFB81C", 656 | "display_seed": "A1", 657 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/6.svg", 658 | "wins": 58, 659 | "points": 121, 660 | "goals_per_game": 3.667, 661 | "goals_against_per_game": 2.093, 662 | "power_play_pct": 21.54, 663 | "penalty_kill_pct": 86.43, 664 | "secondary_hex_code": "1D1D1B", 665 | "leading_scorer": "David Pastrnak" 666 | }, 667 | { 668 | "team_id": 13, 669 | "nickname": "Panthers", 670 | "city": "Florida", 671 | "display_name": "Florida Panthers", 672 | "abbreviation": "FLA", 673 | "twitter_handle": "FlaPanthers", 674 | "hex_code": "E31937", 675 | "display_seed": "WC2", 676 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/13.svg", 677 | "wins": 38, 678 | "points": 83, 679 | "goals_per_game": 3.461, 680 | "goals_against_per_game": 3.408, 681 | "power_play_pct": 22.35, 682 | "penalty_kill_pct": 74.25, 683 | "secondary_hex_code": "002D62", 684 | "leading_scorer": "Carter Verhaeghe" 685 | }, 686 | { 687 | "team_id": 12, 688 | "nickname": "Hurricanes", 689 | "city": "Carolina", 690 | "display_name": "Carolina Hurricanes", 691 | "abbreviation": "CAR", 692 | "twitter_handle": "Canes", 693 | "hex_code": "231F20", 694 | "display_seed": "M1", 695 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/12.svg", 696 | "wins": 47, 697 | "points": 103, 698 | "goals_per_game": 3.23, 699 | "goals_against_per_game": 2.595, 700 | "power_play_pct": 20.43, 701 | "penalty_kill_pct": 83.62, 702 | "secondary_hex_code": "E31937", 703 | "leading_scorer": "Sebastian Aho" 704 | }, 705 | { 706 | "team_id": 3, 707 | "nickname": "Rangers", 708 | "city": "New York", 709 | "display_name": "New York Rangers", 710 | "abbreviation": "NYR", 711 | "twitter_handle": "NYRangers", 712 | "hex_code": "005DAA", 713 | "display_seed": "M3", 714 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/3.svg", 715 | "wins": 44, 716 | "points": 98, 717 | "goals_per_game": 3.333, 718 | "goals_against_per_game": 2.667, 719 | "power_play_pct": 22.91, 720 | "penalty_kill_pct": 80.48, 721 | "secondary_hex_code": "E31937", 722 | "leading_scorer": "Mika Zibanejad" 723 | }, 724 | { 725 | "team_id": 55, 726 | "nickname": "Kraken", 727 | "city": "Seattle", 728 | "display_name": "Seattle Kraken", 729 | "abbreviation": "SEA", 730 | "twitter_handle": "SeattleKraken", 731 | "hex_code": "000D33", 732 | "display_seed": "WC1", 733 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/55.svg", 734 | "wins": 41, 735 | "points": 90, 736 | "goals_per_game": 3.486, 737 | "goals_against_per_game": 3.149, 738 | "power_play_pct": 19.25, 739 | "penalty_kill_pct": 75.12, 740 | "secondary_hex_code": "67ACCB", 741 | "leading_scorer": "Jared McCann" 742 | }, 743 | { 744 | "team_id": 54, 745 | "nickname": "Golden Knights", 746 | "city": "Las Vegas", 747 | "display_name": "Vegas Golden Knights", 748 | "abbreviation": "VGK", 749 | "twitter_handle": "GoldenKnights", 750 | "hex_code": "B4975A", 751 | "display_seed": "P1", 752 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/54.svg", 753 | "wins": 46, 754 | "points": 99, 755 | "goals_per_game": 3.267, 756 | "goals_against_per_game": 2.84, 757 | "power_play_pct": 21.28, 758 | "penalty_kill_pct": 77.53, 759 | "secondary_hex_code": "344043", 760 | "leading_scorer": "Jack Eichel" 761 | }, 762 | { 763 | "team_id": 52, 764 | "nickname": "Jets", 765 | "city": "Winnipeg", 766 | "display_name": "Winnipeg Jets", 767 | "abbreviation": "WPG", 768 | "twitter_handle": "NHLJets", 769 | "hex_code": "B3B5B7", 770 | "display_seed": "WC2", 771 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/52.svg", 772 | "wins": 41, 773 | "points": 85, 774 | "goals_per_game": 2.933, 775 | "goals_against_per_game": 2.813, 776 | "power_play_pct": 19.35, 777 | "penalty_kill_pct": 82.87, 778 | "secondary_hex_code": "002D62", 779 | "leading_scorer": "Mark Scheifele" 780 | }, 781 | { 782 | "team_id": 10, 783 | "nickname": "Maple Leafs", 784 | "city": "Toronto", 785 | "display_name": "Toronto Maple Leafs", 786 | "abbreviation": "TOR", 787 | "twitter_handle": "MapleLeafs", 788 | "hex_code": "003A78", 789 | "display_seed": "A2", 790 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/10.svg", 791 | "wins": 44, 792 | "points": 98, 793 | "goals_per_game": 3.405, 794 | "goals_against_per_game": 2.757, 795 | "power_play_pct": 25.23, 796 | "penalty_kill_pct": 80.27, 797 | "secondary_hex_code": "FFFFFF", 798 | "leading_scorer": "William Nylander" 799 | }, 800 | { 801 | "team_id": 14, 802 | "nickname": "Lightning", 803 | "city": "Tampa Bay", 804 | "display_name": "Tampa Bay Lightning", 805 | "abbreviation": "TBL", 806 | "twitter_handle": "TBLightning", 807 | "hex_code": "003E7E", 808 | "display_seed": "A3", 809 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/14.svg", 810 | "wins": 44, 811 | "points": 94, 812 | "goals_per_game": 3.408, 813 | "goals_against_per_game": 3.013, 814 | "power_play_pct": 25.1, 815 | "penalty_kill_pct": 79.92, 816 | "secondary_hex_code": "FFFFFF", 817 | "leading_scorer": "Brayden Point" 818 | }, 819 | { 820 | "team_id": 2, 821 | "nickname": "Islanders", 822 | "city": "New York", 823 | "display_name": "New York Islanders", 824 | "abbreviation": "NYI", 825 | "twitter_handle": "NYIslanders", 826 | "hex_code": "00468B", 827 | "display_seed": "WC1", 828 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/2.svg", 829 | "wins": 39, 830 | "points": 87, 831 | "goals_per_game": 2.961, 832 | "goals_against_per_game": 2.658, 833 | "power_play_pct": 16.43, 834 | "penalty_kill_pct": 81.99, 835 | "secondary_hex_code": "F26924", 836 | "leading_scorer": "Brock Nelson" 837 | }, 838 | { 839 | "team_id": 1, 840 | "nickname": "Devils", 841 | "city": "New Jersey", 842 | "display_name": "New Jersey Devils", 843 | "abbreviation": "NJD", 844 | "twitter_handle": "NJDevils", 845 | "hex_code": "E31937", 846 | "display_seed": "M2", 847 | "team_logo": "https://www-league.nhlstatic.com/images/logos/teams-current-primary-dark/1.svg", 848 | "wins": 47, 849 | "points": 102, 850 | "goals_per_game": 3.427, 851 | "goals_against_per_game": 2.707, 852 | "power_play_pct": 21.36, 853 | "penalty_kill_pct": 82.16, 854 | "secondary_hex_code": "231F20", 855 | "leading_scorer": "Jack Hughes" 856 | } 857 | ], 858 | "series_results": [ 859 | { 860 | "id": 101, 861 | "round_sequence": 1, 862 | "is_scored": true, 863 | "winner_id": null, 864 | "team_1_id": 21, 865 | "team_2_id": 55, 866 | "team_1_wins": 0, 867 | "team_2_wins": 0 868 | }, 869 | { 870 | "id": 102, 871 | "round_sequence": 1, 872 | "is_scored": true, 873 | "winner_id": 25, 874 | "team_1_id": 25, 875 | "team_2_id": 30, 876 | "team_1_wins": "4", 877 | "team_2_wins": "2" 878 | }, 879 | { 880 | "id": 103, 881 | "round_sequence": 1, 882 | "is_scored": true, 883 | "winner_id": 54, 884 | "team_1_id": 54, 885 | "team_2_id": 52, 886 | "team_1_wins": "4", 887 | "team_2_wins": "1" 888 | }, 889 | { 890 | "id": 104, 891 | "round_sequence": 1, 892 | "is_scored": true, 893 | "winner_id": 22, 894 | "team_1_id": 22, 895 | "team_2_id": 26, 896 | "team_1_wins": "4", 897 | "team_2_wins": "2" 898 | }, 899 | { 900 | "id": 105, 901 | "round_sequence": 1, 902 | "is_scored": true, 903 | "winner_id": null, 904 | "team_1_id": 6, 905 | "team_2_id": 13, 906 | "team_1_wins": 0, 907 | "team_2_wins": 0 908 | }, 909 | { 910 | "id": 106, 911 | "round_sequence": 1, 912 | "is_scored": true, 913 | "winner_id": 10, 914 | "team_1_id": 10, 915 | "team_2_id": 14, 916 | "team_1_wins": "4", 917 | "team_2_wins": "2" 918 | }, 919 | { 920 | "id": 107, 921 | "round_sequence": 1, 922 | "is_scored": true, 923 | "winner_id": 12, 924 | "team_1_id": 12, 925 | "team_2_id": 2, 926 | "team_1_wins": "4", 927 | "team_2_wins": "2" 928 | }, 929 | { 930 | "id": 108, 931 | "round_sequence": 1, 932 | "is_scored": true, 933 | "winner_id": null, 934 | "team_1_id": 1, 935 | "team_2_id": 3, 936 | "team_1_wins": 0, 937 | "team_2_wins": 0 938 | }, 939 | { 940 | "id": 201, 941 | "round_sequence": 2, 942 | "is_scored": false, 943 | "winner_id": null, 944 | "team_1_id": 0, 945 | "team_2_id": 25, 946 | "team_1_wins": 0, 947 | "team_2_wins": 0 948 | }, 949 | { 950 | "id": 202, 951 | "round_sequence": 2, 952 | "is_scored": false, 953 | "winner_id": null, 954 | "team_1_id": 54, 955 | "team_2_id": 22, 956 | "team_1_wins": 0, 957 | "team_2_wins": 0 958 | }, 959 | { 960 | "id": 203, 961 | "round_sequence": 2, 962 | "is_scored": false, 963 | "winner_id": null, 964 | "team_1_id": 0, 965 | "team_2_id": 10, 966 | "team_1_wins": 0, 967 | "team_2_wins": 0 968 | }, 969 | { 970 | "id": 204, 971 | "round_sequence": 2, 972 | "is_scored": false, 973 | "winner_id": null, 974 | "team_1_id": 12, 975 | "team_2_id": 0, 976 | "team_1_wins": 0, 977 | "team_2_wins": 0 978 | }, 979 | { 980 | "id": 301, 981 | "round_sequence": 3, 982 | "is_scored": false, 983 | "winner_id": null, 984 | "team_1_id": 0, 985 | "team_2_id": 0, 986 | "team_1_wins": 0, 987 | "team_2_wins": 0 988 | }, 989 | { 990 | "id": 302, 991 | "round_sequence": 3, 992 | "is_scored": false, 993 | "winner_id": null, 994 | "team_1_id": 0, 995 | "team_2_id": 0, 996 | "team_1_wins": 0, 997 | "team_2_wins": 0 998 | }, 999 | { 1000 | "id": 401, 1001 | "round_sequence": 4, 1002 | "is_scored": false, 1003 | "winner_id": null, 1004 | "team_1_id": 0, 1005 | "team_2_id": 0, 1006 | "team_1_wins": 0, 1007 | "team_2_wins": 0 1008 | } 1009 | ], 1010 | "tiebreaker": 0, 1011 | "allow_picks_from": "2023-04-15T03:14:00.000Z", 1012 | "allow_picks_until": "2023-04-19T22:59:00.000Z" 1013 | } 1014 | } 1015 | } 1016 | --------------------------------------------------------------------------------