e
This commit is contained in:
parent
acb19b7886
commit
00000d9990
10 changed files with 718 additions and 747 deletions
|
|
@ -5,7 +5,7 @@ from urllib.parse import urljoin
|
||||||
import httpx
|
import httpx
|
||||||
from selectolax.parser import HTMLParser, Node
|
from selectolax.parser import HTMLParser, Node
|
||||||
|
|
||||||
from .utils import get_base, get_logger, league_info
|
from .utils import get_base, get_logger, leagues
|
||||||
|
|
||||||
log = get_logger(__name__)
|
log = get_logger(__name__)
|
||||||
|
|
||||||
|
|
@ -111,7 +111,7 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
|
|
||||||
key = f"[{sport}] {event} (S{i})"
|
key = f"[{sport}] {event} (S{i})"
|
||||||
|
|
||||||
tvg_id, logo = league_info(sport)
|
tvg_id, logo = leagues.info(sport)
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
"url": link,
|
"url": link,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ from selectolax.parser import HTMLParser
|
||||||
from .utils import (
|
from .utils import (
|
||||||
get_base,
|
get_base,
|
||||||
get_logger,
|
get_logger,
|
||||||
league_info,
|
leagues,
|
||||||
load_cache,
|
load_cache,
|
||||||
now,
|
now,
|
||||||
safe_process_event,
|
safe_process_event,
|
||||||
|
|
@ -157,7 +157,7 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
f"[{sport}] {match_name} (FSTV)" if match_name else f"[{sport}] (FSTV)"
|
f"[{sport}] {match_name} (FSTV)" if match_name else f"[{sport}] (FSTV)"
|
||||||
)
|
)
|
||||||
|
|
||||||
tvg_id, logo = league_info(sport)
|
tvg_id, logo = leagues.info(sport)
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
"url": url,
|
"url": url,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ from .utils import (
|
||||||
TZ,
|
TZ,
|
||||||
capture_req,
|
capture_req,
|
||||||
get_logger,
|
get_logger,
|
||||||
league_info,
|
leagues,
|
||||||
load_cache,
|
load_cache,
|
||||||
new_browser,
|
new_browser,
|
||||||
now,
|
now,
|
||||||
|
|
@ -308,10 +308,10 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
|
|
||||||
key = f"[{sport}: {event}] {title} (LTVSX)"
|
key = f"[{sport}: {event}] {title} (LTVSX)"
|
||||||
|
|
||||||
tvg_id, logo = league_info(event)
|
tvg_id, logo = leagues.info(event)
|
||||||
|
|
||||||
if not tvg_id:
|
if not tvg_id:
|
||||||
tvg_id, logo = league_info(sport)
|
tvg_id, logo = leagues.info(sport)
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
"url": url,
|
"url": url,
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ from .utils import (
|
||||||
capture_req,
|
capture_req,
|
||||||
get_base,
|
get_base,
|
||||||
get_logger,
|
get_logger,
|
||||||
league_info,
|
leagues,
|
||||||
load_cache,
|
load_cache,
|
||||||
new_browser,
|
new_browser,
|
||||||
now,
|
now,
|
||||||
|
|
@ -36,49 +36,30 @@ MIRRORS = [
|
||||||
"https://freeppv.fun",
|
"https://freeppv.fun",
|
||||||
]
|
]
|
||||||
|
|
||||||
NFL_TEAMS = {
|
|
||||||
"Arizona Cardinals",
|
|
||||||
"Atlanta Falcons",
|
|
||||||
"Baltimore Ravens",
|
|
||||||
"Buffalo Bills",
|
|
||||||
"Carolina Panthers",
|
|
||||||
"Chicago Bears",
|
|
||||||
"Cincinnati Bengals",
|
|
||||||
"Cleveland Browns",
|
|
||||||
"Dallas Cowboys",
|
|
||||||
"Denver Broncos",
|
|
||||||
"Detroit Lions",
|
|
||||||
"Green Bay Packers",
|
|
||||||
"Houston Texans",
|
|
||||||
"Indianapolis Colts",
|
|
||||||
"Jacksonville Jaguars",
|
|
||||||
"Kansas City Chiefs",
|
|
||||||
"Las Vegas Raiders",
|
|
||||||
"Los Angeles Chargers",
|
|
||||||
"Los Angeles Rams",
|
|
||||||
"Miami Dolphins",
|
|
||||||
"Minnesota Vikings",
|
|
||||||
"New England Patriots",
|
|
||||||
"New Orleans Saints",
|
|
||||||
"New York Giants",
|
|
||||||
"New York Jets",
|
|
||||||
"Philadelphia Eagles",
|
|
||||||
"Pittsburgh Steelers",
|
|
||||||
"San Francisco 49ers",
|
|
||||||
"Seattle Seahawks",
|
|
||||||
"Tampa Bay Buccaneers",
|
|
||||||
"Tennessee Titans",
|
|
||||||
"Washington Commanders",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
def get_tvg(sport: str, event: str) -> str | None:
|
||||||
|
match sport:
|
||||||
|
case "American Football":
|
||||||
|
if leagues.is_valid(event, "NFL"):
|
||||||
|
return "NFL.Dummy.us"
|
||||||
|
|
||||||
def is_nfl(event: str) -> bool:
|
else:
|
||||||
try:
|
return "NCAA.Sports.Dummy.us"
|
||||||
t1, t2 = event.split(" vs. ")
|
|
||||||
|
|
||||||
return t1 in NFL_TEAMS or t2 in NFL_TEAMS
|
case "Basketball":
|
||||||
except ValueError:
|
if leagues.is_valid(event, "NBA"):
|
||||||
return event.lower() == "nfl redzone"
|
return "NBA.Basketball.Dummy.us"
|
||||||
|
|
||||||
|
elif leagues.is_valid(event, "WNBA"):
|
||||||
|
return "WNBA.dummy.us"
|
||||||
|
|
||||||
|
# NCAA
|
||||||
|
|
||||||
|
else:
|
||||||
|
return "Basketball.Dummy.us"
|
||||||
|
|
||||||
|
case _:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
async def refresh_api_cache(
|
async def refresh_api_cache(
|
||||||
|
|
@ -239,11 +220,6 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
if url:
|
if url:
|
||||||
sport, event = ev["sport"], ev["event"]
|
sport, event = ev["sport"], ev["event"]
|
||||||
|
|
||||||
if sport == "American Football":
|
|
||||||
tvg_id = "NFL.Dummy.us" if is_nfl(event) else "NCAA.Sports.Dummy.us"
|
|
||||||
else:
|
|
||||||
tvg_id = league_info(sport)[0]
|
|
||||||
|
|
||||||
key = f"[{sport}] {event} (PPV)"
|
key = f"[{sport}] {event} (PPV)"
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
|
|
@ -251,7 +227,7 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
"logo": ev["logo"],
|
"logo": ev["logo"],
|
||||||
"base": base_url,
|
"base": base_url,
|
||||||
"timestamp": now.timestamp(),
|
"timestamp": now.timestamp(),
|
||||||
"id": tvg_id or "Live.Event.us",
|
"id": get_tvg(sport, event) or "Live.Event.us",
|
||||||
}
|
}
|
||||||
|
|
||||||
urls[key] = cached_urls[key] = entry
|
urls[key] = cached_urls[key] = entry
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,7 @@ from urllib.parse import urljoin
|
||||||
import httpx
|
import httpx
|
||||||
from selectolax.parser import HTMLParser
|
from selectolax.parser import HTMLParser
|
||||||
|
|
||||||
from .utils import (
|
from .utils import get_logger, leagues, load_cache, now, safe_process_event, write_cache
|
||||||
get_logger,
|
|
||||||
league_info,
|
|
||||||
load_cache,
|
|
||||||
now,
|
|
||||||
safe_process_event,
|
|
||||||
write_cache,
|
|
||||||
)
|
|
||||||
|
|
||||||
log = get_logger(__name__)
|
log = get_logger(__name__)
|
||||||
|
|
||||||
|
|
@ -108,7 +101,7 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
|
|
||||||
key = f"[{sport}] {event} (SBTW)"
|
key = f"[{sport}] {event} (SBTW)"
|
||||||
|
|
||||||
tvg_id, logo = league_info(sport)
|
tvg_id, logo = leagues.info(sport)
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
"url": url,
|
"url": url,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ from .utils import (
|
||||||
capture_req,
|
capture_req,
|
||||||
get_base,
|
get_base,
|
||||||
get_logger,
|
get_logger,
|
||||||
league_info,
|
leagues,
|
||||||
load_cache,
|
load_cache,
|
||||||
new_browser,
|
new_browser,
|
||||||
now,
|
now,
|
||||||
|
|
@ -184,9 +184,13 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
if url:
|
if url:
|
||||||
sport, event = ev["sport"], ev["event"]
|
sport, event = ev["sport"], ev["event"]
|
||||||
|
|
||||||
key = f"[{sport}] {event} (SEAST)"
|
tvg_id, logo = leagues.info(sport)
|
||||||
|
|
||||||
tvg_id, logo = league_info(sport)
|
if sport == "NBA" and leagues.is_valid(event, "WNBA"):
|
||||||
|
sport, tvg_id = "WNBA", "WNBA.dummy.us"
|
||||||
|
logo = leagues.info("WNBA")[1]
|
||||||
|
|
||||||
|
key = f"[{sport}] {event} (SEAST)"
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
"url": url,
|
"url": url,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from pathlib import Path
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
from .utils import get_logger, league_info, load_cache, now, write_cache
|
from .utils import get_logger, leagues, load_cache, now, write_cache
|
||||||
|
|
||||||
log = get_logger(__name__)
|
log = get_logger(__name__)
|
||||||
|
|
||||||
|
|
@ -54,7 +54,7 @@ async def scrape(client: httpx.AsyncClient) -> None:
|
||||||
|
|
||||||
channel = url.split("/")[-2]
|
channel = url.split("/")[-2]
|
||||||
|
|
||||||
tvg_id, logo = league_info(sport)
|
tvg_id, logo = leagues.info(sport)
|
||||||
|
|
||||||
entry = {
|
entry = {
|
||||||
"url": f"http://origin.thetvapp.to/hls/{channel}/mono.m3u8",
|
"url": f"http://origin.thetvapp.to/hls/{channel}/mono.m3u8",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from .cache import load_cache, write_cache
|
from .cache import load_cache, write_cache
|
||||||
from .config import TZ, league_info, now
|
from .config import TZ, leagues, now
|
||||||
from .logger import get_logger
|
from .logger import get_logger
|
||||||
from .network import CLIENT, UA, capture_req, get_base, new_browser, safe_process_event
|
from .network import CLIENT, UA, capture_req, get_base, new_browser, safe_process_event
|
||||||
|
|
||||||
|
|
@ -10,7 +10,7 @@ __all__ = [
|
||||||
"capture_req",
|
"capture_req",
|
||||||
"get_base",
|
"get_base",
|
||||||
"get_logger",
|
"get_logger",
|
||||||
"league_info",
|
"leagues",
|
||||||
"load_cache",
|
"load_cache",
|
||||||
"new_browser",
|
"new_browser",
|
||||||
"now",
|
"now",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
@ -12,18 +13,21 @@ live_img = "https://i.gyazo.com/978f2eb4a199ca5b56b447aded0cb9e3.png"
|
||||||
|
|
||||||
leagues_file = Path(__file__).parent / "leagues.json"
|
leagues_file = Path(__file__).parent / "leagues.json"
|
||||||
|
|
||||||
LEAGUES: dict[str, dict[str, str]] = json.loads(
|
|
||||||
leagues_file.read_text(encoding="utf-8")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
class Leagues:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.data = json.loads(leagues_file.read_text(encoding="utf-8"))
|
||||||
|
|
||||||
def league_info(name: str) -> tuple[str | None, str]:
|
def teams(self, league: str) -> list[str]:
|
||||||
|
return self.data["teams"].get(league, [])
|
||||||
|
|
||||||
|
def info(self, name: str) -> tuple[str | None, str]:
|
||||||
name = name.upper()
|
name = name.upper()
|
||||||
|
|
||||||
if match := next(
|
if match := next(
|
||||||
(
|
(
|
||||||
(tvg_id, league_data.get("logo"))
|
(tvg_id, league_data.get("logo"))
|
||||||
for tvg_id, leagues in LEAGUES.items()
|
for tvg_id, leagues in self.data["leagues"].items()
|
||||||
for league_entry in leagues
|
for league_entry in leagues
|
||||||
for league_name, league_data in league_entry.items()
|
for league_name, league_data in league_entry.items()
|
||||||
if name == league_name or name in league_data.get("names", [])
|
if name == league_name or name in league_data.get("names", [])
|
||||||
|
|
@ -35,3 +39,14 @@ def league_info(name: str) -> tuple[str | None, str]:
|
||||||
return (tvg_id, logo or live_img)
|
return (tvg_id, logo or live_img)
|
||||||
|
|
||||||
return (None, live_img)
|
return (None, live_img)
|
||||||
|
|
||||||
|
def is_valid(self, event: str, league: str) -> bool:
|
||||||
|
if match := re.search(r"(\-|vs.?)", event):
|
||||||
|
t1, t2 = event.split(match[1])
|
||||||
|
|
||||||
|
return any(t in self.teams(league) for t in (t1.strip(), t2.strip()))
|
||||||
|
|
||||||
|
return event.lower() == "nfl redzone" if league == "NFL" else False
|
||||||
|
|
||||||
|
|
||||||
|
leagues = Leagues()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
"leagues": {
|
||||||
"Basketball.Dummy.us": [
|
"Basketball.Dummy.us": [
|
||||||
{
|
{
|
||||||
"BASKETBALL": {
|
"BASKETBALL": {
|
||||||
|
|
@ -17,9 +18,7 @@
|
||||||
{
|
{
|
||||||
"PGA": {
|
"PGA": {
|
||||||
"logo": "https://1000logos.net/wp-content/uploads/2024/10/PGA-Tour-Logo-500x281.png",
|
"logo": "https://1000logos.net/wp-content/uploads/2024/10/PGA-Tour-Logo-500x281.png",
|
||||||
"names": [
|
"names": ["PGA TOUR"]
|
||||||
"PGA TOUR"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -27,10 +26,7 @@
|
||||||
{
|
{
|
||||||
"MLB": {
|
"MLB": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/mlb.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/mlb.png",
|
||||||
"names": [
|
"names": ["BASEBALL", "MAJOR LEAGUE BASEBALL"]
|
||||||
"BASEBALL",
|
|
||||||
"MAJOR LEAGUE BASEBALL"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -38,10 +34,7 @@
|
||||||
{
|
{
|
||||||
"NBA": {
|
"NBA": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nba.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nba.png",
|
||||||
"names": [
|
"names": ["NATIONAL BASKETBALL ASSOCIATION", "NBA PRESEASON"]
|
||||||
"NATIONAL BASKETBALL ASSOCIATION",
|
|
||||||
"NBA PRESEASON"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -49,12 +42,7 @@
|
||||||
{
|
{
|
||||||
"NCAA": {
|
"NCAA": {
|
||||||
"logo": "https://1000logos.net/wp-content/uploads/2021/12/NCAA-Logo-500x281.png",
|
"logo": "https://1000logos.net/wp-content/uploads/2021/12/NCAA-Logo-500x281.png",
|
||||||
"names": [
|
"names": ["CBB", "CFB", "NCAAB", "NCAAF"]
|
||||||
"CBB",
|
|
||||||
"CFB",
|
|
||||||
"NCAAB",
|
|
||||||
"NCAAF"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -75,11 +63,7 @@
|
||||||
{
|
{
|
||||||
"NHL": {
|
"NHL": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nhl.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nhl.png",
|
||||||
"names": [
|
"names": ["HOCKEY", "NATIONAL HOCKEY LEAGUE", "NHL PRESEASON"]
|
||||||
"HOCKEY",
|
|
||||||
"NATIONAL HOCKEY LEAGUE",
|
|
||||||
"NHL PRESEASON"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -87,20 +71,13 @@
|
||||||
{
|
{
|
||||||
"PAY PER VIEW": {
|
"PAY PER VIEW": {
|
||||||
"logo": null,
|
"logo": null,
|
||||||
"names": [
|
"names": ["PAY-PER-VIEW", "PAYPERVIEW", "PPV"]
|
||||||
"PAY-PER-VIEW",
|
|
||||||
"PAYPERVIEW",
|
|
||||||
"PPV"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"WRESTLING": {
|
"WRESTLING": {
|
||||||
"logo": null,
|
"logo": null,
|
||||||
"names": [
|
"names": ["AEW", "WWE"]
|
||||||
"AEW",
|
|
||||||
"WWE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -108,18 +85,13 @@
|
||||||
{
|
{
|
||||||
"F1": {
|
"F1": {
|
||||||
"logo": "https://1000logos.net/wp-content/uploads/2021/06/F1-logo-500x281.png",
|
"logo": "https://1000logos.net/wp-content/uploads/2021/06/F1-logo-500x281.png",
|
||||||
"names": [
|
"names": ["FORMULA 1", "FORMULA ONE"]
|
||||||
"FORMULA 1",
|
|
||||||
"FORMULA ONE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"MOTO GP": {
|
"MOTO GP": {
|
||||||
"logo": "https://1000logos.net/wp-content/uploads/2021/03/MotoGP-Logo-500x281.png",
|
"logo": "https://1000logos.net/wp-content/uploads/2021/03/MotoGP-Logo-500x281.png",
|
||||||
"names": [
|
"names": ["MOTOGP"]
|
||||||
"MOTOGP"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -145,45 +117,31 @@
|
||||||
{
|
{
|
||||||
"AFC CHAMPIONS LEAGUE": {
|
"AFC CHAMPIONS LEAGUE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2200.png&scale=crop&cquality=40&location=origin&w=500&h=500",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2200.png&scale=crop&cquality=40&location=origin&w=500&h=500",
|
||||||
"names": [
|
"names": ["ACL", "ACL ELITE", "ASIAN CHAMPIONS LEAGUE"]
|
||||||
"ACL",
|
|
||||||
"ACL ELITE",
|
|
||||||
"ASIAN CHAMPIONS LEAGUE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"AFRICA CUP OF NATIONS": {
|
"AFRICA CUP OF NATIONS": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/76.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/76.png",
|
||||||
"names": [
|
"names": ["AFCON"]
|
||||||
"AFCON"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"AUSTRIA 2 LIGA": {
|
"AUSTRIA 2 LIGA": {
|
||||||
"logo": "https://i.gyazo.com/5d1464502b841fef6e5d78c8b0764b52.png",
|
"logo": "https://i.gyazo.com/5d1464502b841fef6e5d78c8b0764b52.png",
|
||||||
"names": [
|
"names": ["ADMIRAL 2. LIGA"]
|
||||||
"ADMIRAL 2. LIGA"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"AUSTRIA BUNDESLIGA": {
|
"AUSTRIA BUNDESLIGA": {
|
||||||
"logo": "https://i.gyazo.com/83d851fb1110f1e395690403f9cf01bb.webp",
|
"logo": "https://i.gyazo.com/83d851fb1110f1e395690403f9cf01bb.webp",
|
||||||
"names": [
|
"names": ["ADMIRAL BUNDESLIGA", "FEDERAL LEAGUE"]
|
||||||
"ADMIRAL BUNDESLIGA",
|
|
||||||
"FEDERAL LEAGUE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"BUNDESLIGA": {
|
"BUNDESLIGA": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/10.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/10.png",
|
||||||
"names": [
|
"names": ["BUNDESLIG", "GERMAN BUNDESLIGA"]
|
||||||
"BUNDESLIG",
|
|
||||||
"GERMAN BUNDESLIGA"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -195,10 +153,7 @@
|
||||||
{
|
{
|
||||||
"CANADIAN PREMIER LEAGUE": {
|
"CANADIAN PREMIER LEAGUE": {
|
||||||
"logo": "https://i.gyazo.com/f61986e2ccfbf88f7d753b4e7f2c9fdc.png",
|
"logo": "https://i.gyazo.com/f61986e2ccfbf88f7d753b4e7f2c9fdc.png",
|
||||||
"names": [
|
"names": ["CANPL", "CPL"]
|
||||||
"CANPL",
|
|
||||||
"CPL"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -211,24 +166,26 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"CONCACAF CENTRAL AMERICAN CUP": {
|
||||||
|
"logo": "https://b.fssta.com/uploads/application/soccer/competition-logos/CONCACAFCentralAmericanCup.png",
|
||||||
|
"names": ["COPA CENTROAMERICANA DE CONCACAF"]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"CONCACAF CHAMPIONS LEAGUE": {
|
"CONCACAF CHAMPIONS LEAGUE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2298.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2298.png",
|
||||||
"names": [
|
"names": ["CONCACAF CHAMPIONS CUP"]
|
||||||
"CONCACAF CHAMPIONS CUP"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"CONCACAF GOLD CUP": {
|
"CONCACAF GOLD CUP": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/59.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/59.png",
|
||||||
"names": [
|
"names": ["COPA ORO CONCACAF"]
|
||||||
"COPA ORO CONCACAF"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"COPA AMéRICA": {
|
"COPA AMÉRICA": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/83.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/83.png",
|
||||||
"names": [
|
"names": [
|
||||||
"CONMEBOL COPA AMERICA",
|
"CONMEBOL COPA AMERICA",
|
||||||
|
|
@ -244,7 +201,7 @@
|
||||||
"names": [
|
"names": [
|
||||||
"CONMEBOL LIBERTADORES",
|
"CONMEBOL LIBERTADORES",
|
||||||
"COPA LIBERTADORES DE AMERICA",
|
"COPA LIBERTADORES DE AMERICA",
|
||||||
"COPA LIBERTADORES DE AMéRICA",
|
"COPA LIBERTADORES DE AMÉRICA",
|
||||||
"LIBERTADORES"
|
"LIBERTADORES"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -252,9 +209,17 @@
|
||||||
{
|
{
|
||||||
"COPA SUDAMERICANA": {
|
"COPA SUDAMERICANA": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1208.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1208.png",
|
||||||
|
"names": ["CONMEBOL SUDAMERICANA", "COPA CONMEBOL SUDAMERICANA"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EFL": {
|
||||||
|
"logo": "https://i.gyazo.com/f3839327b125774f201a18bed8e38a6a.gif",
|
||||||
"names": [
|
"names": [
|
||||||
"CONMEBOL SUDAMERICANA",
|
"CARABAO CUP",
|
||||||
"COPA CONMEBOL SUDAMERICANA"
|
"EFL CUP",
|
||||||
|
"ENGLISH FOOTBALL LEAGUE CUP",
|
||||||
|
"LEAGUE CUP"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -281,43 +246,41 @@
|
||||||
{
|
{
|
||||||
"EKSTRAKLASA": {
|
"EKSTRAKLASA": {
|
||||||
"logo": "https://i.gyazo.com/362e31efdd0dad03b00858f4fb0901b5.png",
|
"logo": "https://i.gyazo.com/362e31efdd0dad03b00858f4fb0901b5.png",
|
||||||
"names": [
|
"names": ["PKO BANK POLSKI EKSTRAKLASA", "POLAND EKSTRAKLASA"]
|
||||||
"PKO BANK POLSKI EKSTRAKLASA",
|
|
||||||
"POLAND EKSTRAKLASA"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"EREDIVISIE": {
|
"EREDIVISIE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/11.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/11.png",
|
||||||
|
"names": ["VRIENDENLOTERIJ EREDIVISIE"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"FA": {
|
||||||
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/40.png&w=500&h=500",
|
||||||
"names": [
|
"names": [
|
||||||
"VRIENDENLOTERIJ EREDIVISIE"
|
"EMIRATES FA CUP",
|
||||||
|
"FA CUP",
|
||||||
|
"FOOTBALL ASSOCIATION CHALLENGE CUP"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"FIFA CLUB WORLD CUP": {
|
"FIFA CLUB WORLD CUP": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1932.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1932.png",
|
||||||
"names": [
|
"names": ["FIFA CWC"]
|
||||||
"FIFA CWC"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"FIFA WORLD CUP": {
|
"FIFA WORLD CUP": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/4.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/4.png",
|
||||||
"names": [
|
"names": ["FIFA WC", "WC"]
|
||||||
"FIFA WC",
|
|
||||||
"WC"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"FIFA'S WOMEN WORLD CUP": {
|
"FIFA'S WOMEN WORLD CUP": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/60.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/60.png",
|
||||||
"names": [
|
"names": ["FIFA WOMEN WC"]
|
||||||
"FIFA WOMEN WC"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -329,20 +292,13 @@
|
||||||
{
|
{
|
||||||
"FRAUEN BUNDESLIGA": {
|
"FRAUEN BUNDESLIGA": {
|
||||||
"logo": "https://i.gyazo.com/d13d4c0330be96801aa4b2d8b83d3a8f.png",
|
"logo": "https://i.gyazo.com/d13d4c0330be96801aa4b2d8b83d3a8f.png",
|
||||||
"names": [
|
"names": ["GOOGLE PIXEL FRAUEN-BUNDESLIGA", "WOMEN'S FEDERAL LEAGUE"]
|
||||||
"GOOGLE PIXEL FRAUEN-BUNDESLIGA",
|
|
||||||
"WOMEN'S FEDERAL LEAGUE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"J1 LEAGUE": {
|
"J1 LEAGUE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2199.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2199.png",
|
||||||
"names": [
|
"names": ["J.LEAGUE", "JAPANESE J.LEAGUE", "MEIJI YASUDA J1 LEAGUE"]
|
||||||
"J.LEAGUE",
|
|
||||||
"JAPANESE J.LEAGUE",
|
|
||||||
"MEIJI YASUDA J1 LEAGUE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -399,6 +355,7 @@
|
||||||
"LIGA BBVA MX",
|
"LIGA BBVA MX",
|
||||||
"LIGA MAYOR",
|
"LIGA MAYOR",
|
||||||
"MEXICAN LIGA BBVA MX",
|
"MEXICAN LIGA BBVA MX",
|
||||||
|
"MEXICO LIGA MX",
|
||||||
"PRIMERA DIVISION DE MEXICO",
|
"PRIMERA DIVISION DE MEXICO",
|
||||||
"PRIMERA DIVISIÓN DE MÉXICO"
|
"PRIMERA DIVISIÓN DE MÉXICO"
|
||||||
]
|
]
|
||||||
|
|
@ -421,104 +378,73 @@
|
||||||
{
|
{
|
||||||
"LIGUE 1": {
|
"LIGUE 1": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/9.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/9.png",
|
||||||
"names": [
|
"names": ["FRANCE LIGUE 1", "FRENCH LIGUE 1"]
|
||||||
"FRANCE LIGUE 1",
|
|
||||||
"FRENCH LIGUE 1"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"LIGUE 2": {
|
"LIGUE 2": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/96.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/96.png",
|
||||||
"names": [
|
"names": ["FRANCE LIGUE 2", "FRENCH LIGUE 2"]
|
||||||
"FRANCE LIGUE 2",
|
|
||||||
"FRENCH LIGUE 2"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"MLS": {
|
"MLS": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/19.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/19.png",
|
||||||
"names": [
|
"names": ["MAJOR LEAGUE SOCCER"]
|
||||||
"MAJOR LEAGUE SOCCER"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"NWSL": {
|
"NWSL": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2323.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2323.png",
|
||||||
"names": [
|
"names": ["NATIONAL WOMEN'S SOCCER LEAGUE", "NWSL WOMEN"]
|
||||||
"NATIONAL WOMEN'S SOCCER LEAGUE",
|
|
||||||
"NWSL WOMEN"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"PREMIER LEAGUE": {
|
"PREMIER LEAGUE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/23.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/23.png",
|
||||||
"names": [
|
"names": ["ENGLISH PREMIER LEAGUE", "EPL"]
|
||||||
"ENGLISH PREMIER LEAGUE",
|
|
||||||
"EPL"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"PRIMEIRA LIGA": {
|
"PRIMEIRA LIGA": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/14.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/14.png",
|
||||||
"names": [
|
"names": ["LIGA PORTUGAL", "PORTUGUESE PRIMEIRA LIGA"]
|
||||||
"LIGA PORTUGAL",
|
|
||||||
"PORTUGUESE PRIMEIRA LIGA"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"PRIMERA A": {
|
"PRIMERA A": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1543.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1543.png",
|
||||||
"names": [
|
"names": ["COLOMBIAN PRIMERA A"]
|
||||||
"COLOMBIAN PRIMERA A"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"PRIMERA B": {
|
"PRIMERA B": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2295.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2295.png",
|
||||||
"names": [
|
"names": ["COLOMBIAN PRIMERA B"]
|
||||||
"COLOMBIAN PRIMERA B"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"SCOTTISH PREMIERSHIP": {
|
"SCOTTISH PREMIERSHIP": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/45.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/45.png",
|
||||||
"names": [
|
"names": ["PREMIERSHIP", "SPFL"]
|
||||||
"PREMIERSHIP",
|
|
||||||
"SPFL"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"SERBIA SUPERLIGA": {
|
"SERBIA SUPERLIGA": {
|
||||||
"logo": "https://i.gyazo.com/0992f078dcacfef489477fc7bb1f5220.webp",
|
"logo": "https://i.gyazo.com/0992f078dcacfef489477fc7bb1f5220.webp",
|
||||||
"names": [
|
"names": ["MOZZART SUPERLIGA", "SERBIAN SUPER LEAGUE"]
|
||||||
"MOZZART SUPERLIGA",
|
|
||||||
"SERBIAN SUPER LEAGUE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"SERIE A": {
|
"SERIE A": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/12.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/12.png",
|
||||||
"names": [
|
"names": ["ITALIAN SERIE A"]
|
||||||
"ITALIAN SERIE A"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"SERIE B": {
|
"SERIE B": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/99.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/99.png",
|
||||||
"names": [
|
"names": ["ITALIAN SERIE B"]
|
||||||
"ITALIAN SERIE B"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -539,32 +465,21 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"SüPER LIG": {
|
"SÜPER LIG": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/18.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/18.png",
|
||||||
"names": [
|
"names": ["SUPER LIG", "SUPERLIG", "SÜPERLIG", "TURKISH SUPER LIG"]
|
||||||
"SUPER LIG",
|
|
||||||
"SUPERLIG",
|
|
||||||
"SÜPERLIG",
|
|
||||||
"TURKISH SUPER LIG"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"TURKEY 1 LIG": {
|
"TURKEY 1 LIG": {
|
||||||
"logo": "https://i.gyazo.com/730673f84223a85c9b9ae66123907bba.png",
|
"logo": "https://i.gyazo.com/730673f84223a85c9b9ae66123907bba.png",
|
||||||
"names": [
|
"names": ["TFF 1. LIG", "TRENDYOL 1. LIG"]
|
||||||
"TFF 1. LIG",
|
|
||||||
"TRENDYOL 1. LIG"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"UEFA CHAMPIONS LEAGUE": {
|
"UEFA CHAMPIONS LEAGUE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2.png",
|
||||||
"names": [
|
"names": ["CHAMPIONS LEAGUE", "UCL"]
|
||||||
"CHAMPIONS LEAGUE",
|
|
||||||
"UCL"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -576,36 +491,25 @@
|
||||||
{
|
{
|
||||||
"UEFA EUROPA LEAGUE": {
|
"UEFA EUROPA LEAGUE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2310.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2310.png",
|
||||||
"names": [
|
"names": ["EUROPA LEAGUE"]
|
||||||
"EUROPA LEAGUE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"UEFA EUROPEAN CHAMPIONSHIP": {
|
"UEFA EUROPEAN CHAMPIONSHIP": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/74.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/74.png",
|
||||||
"names": [
|
"names": ["EUROS", "UEFA EUROS"]
|
||||||
"EUROS",
|
|
||||||
"UEFA EUROS"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"UEFA SUPER CUP": {
|
"UEFA SUPER CUP": {
|
||||||
"logo": "https://i.gyazo.com/3b786181aba130321b85c0e2f9604652.png",
|
"logo": "https://i.gyazo.com/3b786181aba130321b85c0e2f9604652.png",
|
||||||
"names": [
|
"names": ["EUROPEAN SUPER CUP"]
|
||||||
"EUROPEAN SUPER CUP"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"UEFA WOMEN'S CHAMPIONS LEAGUE": {
|
"UEFA WOMEN'S CHAMPIONS LEAGUE": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2408.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2408.png",
|
||||||
"names": [
|
"names": ["UCL WOMEN", "UEFA WOMEN", "WOMEN'S CHAMPIONS LEAGUE"]
|
||||||
"UCL WOMEN",
|
|
||||||
"UEFA WOMEN",
|
|
||||||
"WOMEN'S CHAMPIONS LEAGUE"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -638,9 +542,7 @@
|
||||||
{
|
{
|
||||||
"UFC": {
|
"UFC": {
|
||||||
"logo": "https://1000logos.net/wp-content/uploads/2017/06/Logo-UFC-500x313.png",
|
"logo": "https://1000logos.net/wp-content/uploads/2017/06/Logo-UFC-500x313.png",
|
||||||
"names": [
|
"names": ["UFC FIGHT NIGHT"]
|
||||||
"UFC FIGHT NIGHT"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -648,11 +550,92 @@
|
||||||
{
|
{
|
||||||
"WNBA": {
|
"WNBA": {
|
||||||
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/wnba.png",
|
"logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/wnba.png",
|
||||||
"names": [
|
"names": ["NBA W", "WOMEN'S NATIONAL BASKETBALL ASSOCIATION"]
|
||||||
"NBA W",
|
|
||||||
"WOMEN'S NATIONAL BASKETBALL ASSOCIATION"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"teams": {
|
||||||
|
"NBA": [
|
||||||
|
"Atlanta Hawks",
|
||||||
|
"Boston Celtics",
|
||||||
|
"Brooklyn Nets",
|
||||||
|
"Charlotte Hornets",
|
||||||
|
"Chicago Bulls",
|
||||||
|
"Cleveland Cavaliers",
|
||||||
|
"Dallas Mavericks",
|
||||||
|
"Denver Nuggets",
|
||||||
|
"Detroit Pistons",
|
||||||
|
"Golden State Warriors",
|
||||||
|
"Houston Rockets",
|
||||||
|
"Indiana Pacers",
|
||||||
|
"Los Angeles Clippers",
|
||||||
|
"Los Angeles Lakers",
|
||||||
|
"Memphis Grizzlies",
|
||||||
|
"Miami Heat",
|
||||||
|
"Milwaukee Bucks",
|
||||||
|
"Minnesota Timberwolves",
|
||||||
|
"New Orleans Pelicans",
|
||||||
|
"New York Knicks",
|
||||||
|
"Oklahoma City Thunder",
|
||||||
|
"Orlando Magic",
|
||||||
|
"Philadelphia 76ers",
|
||||||
|
"Phoenix Suns",
|
||||||
|
"Portland Trail Blazers",
|
||||||
|
"Sacramento Kings",
|
||||||
|
"San Antonio Spurs",
|
||||||
|
"Toronto Raptors",
|
||||||
|
"Utah Jazz",
|
||||||
|
"Washington Wizards"
|
||||||
|
],
|
||||||
|
"NFL": [
|
||||||
|
"Arizona Cardinals",
|
||||||
|
"Atlanta Falcons",
|
||||||
|
"Baltimore Ravens",
|
||||||
|
"Buffalo Bills",
|
||||||
|
"Carolina Panthers",
|
||||||
|
"Chicago Bears",
|
||||||
|
"Cincinnati Bengals",
|
||||||
|
"Cleveland Browns",
|
||||||
|
"Dallas Cowboys",
|
||||||
|
"Denver Broncos",
|
||||||
|
"Detroit Lions",
|
||||||
|
"Green Bay Packers",
|
||||||
|
"Houston Texans",
|
||||||
|
"Indianapolis Colts",
|
||||||
|
"Jacksonville Jaguars",
|
||||||
|
"Kansas City Chiefs",
|
||||||
|
"Las Vegas Raiders",
|
||||||
|
"Los Angeles Chargers",
|
||||||
|
"Los Angeles Rams",
|
||||||
|
"Miami Dolphins",
|
||||||
|
"Minnesota Vikings",
|
||||||
|
"New England Patriots",
|
||||||
|
"New Orleans Saints",
|
||||||
|
"New York Giants",
|
||||||
|
"New York Jets",
|
||||||
|
"Philadelphia Eagles",
|
||||||
|
"Pittsburgh Steelers",
|
||||||
|
"San Francisco 49ers",
|
||||||
|
"Seattle Seahawks",
|
||||||
|
"Tampa Bay Buccaneers",
|
||||||
|
"Tennessee Titans",
|
||||||
|
"Washington Commanders"
|
||||||
|
],
|
||||||
|
"WNBA": [
|
||||||
|
"Atlanta Dream",
|
||||||
|
"Chicago Sky",
|
||||||
|
"Connecticut Sun",
|
||||||
|
"Dallas Wings",
|
||||||
|
"Golden State Valkyries",
|
||||||
|
"Indiana Fever",
|
||||||
|
"Las Vegas Aces",
|
||||||
|
"Los Angeles Sparks",
|
||||||
|
"Minnesota Lynx",
|
||||||
|
"New York Liberty",
|
||||||
|
"Phoenix Mercury",
|
||||||
|
"Seattle Storm",
|
||||||
|
"Washington Mystics"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue