diff --git a/M3U8/scrapers/ace.py b/M3U8/scrapers/ace.py index 391e56a..257bd22 100644 --- a/M3U8/scrapers/ace.py +++ b/M3U8/scrapers/ace.py @@ -5,7 +5,7 @@ from urllib.parse import urljoin import httpx 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__) @@ -111,7 +111,7 @@ async def scrape(client: httpx.AsyncClient) -> None: key = f"[{sport}] {event} (S{i})" - tvg_id, logo = league_info(sport) + tvg_id, logo = leagues.info(sport) entry = { "url": link, diff --git a/M3U8/scrapers/fstv.py b/M3U8/scrapers/fstv.py index ae751e8..e3b0494 100644 --- a/M3U8/scrapers/fstv.py +++ b/M3U8/scrapers/fstv.py @@ -7,7 +7,7 @@ from selectolax.parser import HTMLParser from .utils import ( get_base, get_logger, - league_info, + leagues, load_cache, now, 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)" ) - tvg_id, logo = league_info(sport) + tvg_id, logo = leagues.info(sport) entry = { "url": url, diff --git a/M3U8/scrapers/livetvsx.py b/M3U8/scrapers/livetvsx.py index 94457fa..5fe3402 100644 --- a/M3U8/scrapers/livetvsx.py +++ b/M3U8/scrapers/livetvsx.py @@ -13,7 +13,7 @@ from .utils import ( TZ, capture_req, get_logger, - league_info, + leagues, load_cache, new_browser, now, @@ -308,10 +308,10 @@ async def scrape(client: httpx.AsyncClient) -> None: key = f"[{sport}: {event}] {title} (LTVSX)" - tvg_id, logo = league_info(event) + tvg_id, logo = leagues.info(event) if not tvg_id: - tvg_id, logo = league_info(sport) + tvg_id, logo = leagues.info(sport) entry = { "url": url, diff --git a/M3U8/scrapers/ppv.py b/M3U8/scrapers/ppv.py index 7b5b38b..965f3a8 100644 --- a/M3U8/scrapers/ppv.py +++ b/M3U8/scrapers/ppv.py @@ -12,7 +12,7 @@ from .utils import ( capture_req, get_base, get_logger, - league_info, + leagues, load_cache, new_browser, now, @@ -36,49 +36,30 @@ MIRRORS = [ "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: - try: - t1, t2 = event.split(" vs. ") + else: + return "NCAA.Sports.Dummy.us" - return t1 in NFL_TEAMS or t2 in NFL_TEAMS - except ValueError: - return event.lower() == "nfl redzone" + case "Basketball": + if leagues.is_valid(event, "NBA"): + 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( @@ -239,11 +220,6 @@ async def scrape(client: httpx.AsyncClient) -> None: if url: 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)" entry = { @@ -251,7 +227,7 @@ async def scrape(client: httpx.AsyncClient) -> None: "logo": ev["logo"], "base": base_url, "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 diff --git a/M3U8/scrapers/streambtw.py b/M3U8/scrapers/streambtw.py index 2e939db..b26983f 100644 --- a/M3U8/scrapers/streambtw.py +++ b/M3U8/scrapers/streambtw.py @@ -5,14 +5,7 @@ from urllib.parse import urljoin import httpx from selectolax.parser import HTMLParser -from .utils import ( - get_logger, - league_info, - load_cache, - now, - safe_process_event, - write_cache, -) +from .utils import get_logger, leagues, load_cache, now, safe_process_event, write_cache log = get_logger(__name__) @@ -108,7 +101,7 @@ async def scrape(client: httpx.AsyncClient) -> None: key = f"[{sport}] {event} (SBTW)" - tvg_id, logo = league_info(sport) + tvg_id, logo = leagues.info(sport) entry = { "url": url, diff --git a/M3U8/scrapers/streameast.py b/M3U8/scrapers/streameast.py index 6212b1d..40f9d0c 100644 --- a/M3U8/scrapers/streameast.py +++ b/M3U8/scrapers/streameast.py @@ -13,7 +13,7 @@ from .utils import ( capture_req, get_base, get_logger, - league_info, + leagues, load_cache, new_browser, now, @@ -184,9 +184,13 @@ async def scrape(client: httpx.AsyncClient) -> None: if url: 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 = { "url": url, diff --git a/M3U8/scrapers/tvpass.py b/M3U8/scrapers/tvpass.py index 830125c..da3ce59 100644 --- a/M3U8/scrapers/tvpass.py +++ b/M3U8/scrapers/tvpass.py @@ -3,7 +3,7 @@ from pathlib import Path 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__) @@ -54,7 +54,7 @@ async def scrape(client: httpx.AsyncClient) -> None: channel = url.split("/")[-2] - tvg_id, logo = league_info(sport) + tvg_id, logo = leagues.info(sport) entry = { "url": f"http://origin.thetvapp.to/hls/{channel}/mono.m3u8", diff --git a/M3U8/scrapers/utils/__init__.py b/M3U8/scrapers/utils/__init__.py index d77e371..e15904a 100644 --- a/M3U8/scrapers/utils/__init__.py +++ b/M3U8/scrapers/utils/__init__.py @@ -1,5 +1,5 @@ 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 .network import CLIENT, UA, capture_req, get_base, new_browser, safe_process_event @@ -10,7 +10,7 @@ __all__ = [ "capture_req", "get_base", "get_logger", - "league_info", + "leagues", "load_cache", "new_browser", "now", diff --git a/M3U8/scrapers/utils/config.py b/M3U8/scrapers/utils/config.py index c2a3c9f..b2d00bf 100644 --- a/M3U8/scrapers/utils/config.py +++ b/M3U8/scrapers/utils/config.py @@ -1,4 +1,5 @@ import json +import re from datetime import datetime from pathlib import Path @@ -12,26 +13,40 @@ live_img = "https://i.gyazo.com/978f2eb4a199ca5b56b447aded0cb9e3.png" 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 teams(self, league: str) -> list[str]: + return self.data["teams"].get(league, []) + + def info(self, name: str) -> tuple[str | None, str]: + name = name.upper() + + if match := next( + ( + (tvg_id, league_data.get("logo")) + for tvg_id, leagues in self.data["leagues"].items() + for league_entry in leagues + for league_name, league_data in league_entry.items() + if name == league_name or name in league_data.get("names", []) + ), + None, + ): + tvg_id, logo = match + + return (tvg_id, logo or 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 -def league_info(name: str) -> tuple[str | None, str]: - name = name.upper() - - if match := next( - ( - (tvg_id, league_data.get("logo")) - for tvg_id, leagues in LEAGUES.items() - for league_entry in leagues - for league_name, league_data in league_entry.items() - if name == league_name or name in league_data.get("names", []) - ), - None, - ): - tvg_id, logo = match - - return (tvg_id, logo or live_img) - - return (None, live_img) +leagues = Leagues() diff --git a/M3U8/scrapers/utils/leagues.json b/M3U8/scrapers/utils/leagues.json index b442066..4acca3d 100644 --- a/M3U8/scrapers/utils/leagues.json +++ b/M3U8/scrapers/utils/leagues.json @@ -1,658 +1,641 @@ { - "Basketball.Dummy.us": [ - { - "BASKETBALL": { - "logo": "https://1000logos.net/wp-content/uploads/2024/04/Basketball-Emoji-1536x864.png", - "names": [] - } - } - ], - "Golf.Dummy.us": [ - { - "GOLF": { - "logo": "https://i.gyazo.com/14a883f22796f631e6f97c34dbeb6ada.png", - "names": [] - } - }, - { - "PGA": { - "logo": "https://1000logos.net/wp-content/uploads/2024/10/PGA-Tour-Logo-500x281.png", - "names": [ - "PGA TOUR" - ] - } - } - ], - "MLB.Baseball.Dummy.us": [ - { - "MLB": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/mlb.png", - "names": [ - "BASEBALL", - "MAJOR LEAGUE BASEBALL" - ] - } - } - ], - "NBA.Basketball.Dummy.us": [ - { - "NBA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nba.png", - "names": [ - "NATIONAL BASKETBALL ASSOCIATION", - "NBA PRESEASON" - ] - } - } - ], - "NCAA.Sports.Dummy.us": [ - { - "NCAA": { - "logo": "https://1000logos.net/wp-content/uploads/2021/12/NCAA-Logo-500x281.png", - "names": [ - "CBB", - "CFB", - "NCAAB", - "NCAAF" - ] - } - } - ], - "NFL.Dummy.us": [ - { - "NFL": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nfl.png", - "names": [ - "AMERICAN FOOTBALL", - "NATIONAL FOOTBALL LEAGUE", - "NFL PRESEASON", - "USA NFL" - ] - } - } - ], - "NHL.Hockey.Dummy.us": [ - { - "NHL": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nhl.png", - "names": [ - "HOCKEY", - "NATIONAL HOCKEY LEAGUE", - "NHL PRESEASON" - ] - } - } - ], - "PPV.EVENTS.Dummy.us": [ - { - "PAY PER VIEW": { - "logo": null, - "names": [ - "PAY-PER-VIEW", - "PAYPERVIEW", - "PPV" - ] - } - }, - { - "WRESTLING": { - "logo": null, - "names": [ - "AEW", - "WWE" - ] - } - } - ], - "Racing.Dummy.us": [ - { - "F1": { - "logo": "https://1000logos.net/wp-content/uploads/2021/06/F1-logo-500x281.png", - "names": [ - "FORMULA 1", - "FORMULA ONE" - ] - } - }, - { - "MOTO GP": { - "logo": "https://1000logos.net/wp-content/uploads/2021/03/MotoGP-Logo-500x281.png", - "names": [ - "MOTOGP" - ] - } - }, - { - "RACING": { - "logo": null, - "names": [] - } - } - ], - "Soccer.Dummy.us": [ - { - "2. BUNDESLIGA": { - "logo": "https://i.gyazo.com/6c343e57acf501f4df3502d7ec646897.png", - "names": [] - } - }, - { - "3. LIGA": { - "logo": "https://i.gyazo.com/9f4f2e8370377b6214b4103003196de7.png", - "names": [] - } - }, - { - "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", - "names": [ - "ACL", - "ACL ELITE", - "ASIAN CHAMPIONS LEAGUE" - ] - } - }, - { - "AFRICA CUP OF NATIONS": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/76.png", - "names": [ - "AFCON" - ] - } - }, - { - "AUSTRIA 2 LIGA": { - "logo": "https://i.gyazo.com/5d1464502b841fef6e5d78c8b0764b52.png", - "names": [ - "ADMIRAL 2. LIGA" - ] - } - }, - { - "AUSTRIA BUNDESLIGA": { - "logo": "https://i.gyazo.com/83d851fb1110f1e395690403f9cf01bb.webp", - "names": [ - "ADMIRAL BUNDESLIGA", - "FEDERAL LEAGUE" - ] - } - }, - { - "BUNDESLIGA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/10.png", - "names": [ - "BUNDESLIG", - "GERMAN BUNDESLIGA" - ] - } - }, - { - "CAF CHAMPIONS LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2391.png", - "names": [] - } - }, - { - "CANADIAN PREMIER LEAGUE": { - "logo": "https://i.gyazo.com/f61986e2ccfbf88f7d753b4e7f2c9fdc.png", - "names": [ - "CANPL", - "CPL" - ] - } - }, - { - "CHAMPIONSHIP": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/24.png", - "names": [ - "ENGLISH CHAMPIONSHIP", - "ENGLISH FOOTBALL LEAGUE CHAMPIONSHIP", - "SKY BET CHAMPIONSHIP" - ] - } - }, - { - "CONCACAF CHAMPIONS LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2298.png", - "names": [ - "CONCACAF CHAMPIONS CUP" - ] - } - }, - { - "CONCACAF GOLD CUP": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/59.png", - "names": [ - "COPA ORO CONCACAF" - ] - } - }, - { - "COPA AMéRICA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/83.png", - "names": [ - "CONMEBOL COPA AMERICA", - "COPA AMERICA", - "COPA LIBERTADORES DE AMÉRICA", - "SOUTH AMERICAN FOOTBALL CHAMPIONSHIP" - ] - } - }, - { - "COPA LIBERTADORES": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/58.png", - "names": [ - "CONMEBOL LIBERTADORES", - "COPA LIBERTADORES DE AMERICA", - "COPA LIBERTADORES DE AMéRICA", - "LIBERTADORES" - ] - } - }, - { - "COPA SUDAMERICANA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1208.png", - "names": [ - "CONMEBOL SUDAMERICANA", - "COPA CONMEBOL SUDAMERICANA" - ] - } - }, - { - "EFL LEAGUE ONE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/25.png", - "names": [ - "ENGLISH FOOTBALL LEAGUE ONE", - "LEAGUE ONE", - "SKY BET LEAGUE ONE" - ] - } - }, - { - "EFL LEAGUE TWO": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/26.png", - "names": [ - "ENGLISH FOOTBALL LEAGUE TWO", - "LEAGUE TWO", - "SKY BET LEAGUE TWO" - ] - } - }, - { - "EKSTRAKLASA": { - "logo": "https://i.gyazo.com/362e31efdd0dad03b00858f4fb0901b5.png", - "names": [ - "PKO BANK POLSKI EKSTRAKLASA", - "POLAND EKSTRAKLASA" - ] - } - }, - { - "EREDIVISIE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/11.png", - "names": [ - "VRIENDENLOTERIJ EREDIVISIE" - ] - } - }, - { - "FIFA CLUB WORLD CUP": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1932.png", - "names": [ - "FIFA CWC" - ] - } - }, - { - "FIFA WORLD CUP": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/4.png", - "names": [ - "FIFA WC", - "WC" - ] - } - }, - { - "FIFA'S WOMEN WORLD CUP": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/60.png", - "names": [ - "FIFA WOMEN WC" - ] - } - }, - { - "FOOTBALL": { - "logo": "https://i.gyazo.com/1c4aa937f5ea01b0f29bb27adb59884c.png", - "names": [] - } - }, - { - "FRAUEN BUNDESLIGA": { - "logo": "https://i.gyazo.com/d13d4c0330be96801aa4b2d8b83d3a8f.png", - "names": [ - "GOOGLE PIXEL FRAUEN-BUNDESLIGA", - "WOMEN'S FEDERAL LEAGUE" - ] - } - }, - { - "J1 LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2199.png", - "names": [ - "J.LEAGUE", - "JAPANESE J.LEAGUE", - "MEIJI YASUDA J1 LEAGUE" - ] - } - }, - { - "K LEAGUE 1": { - "logo": "https://i.gyazo.com/721eba6c954e2015d999ead7a0bd5c69.png", - "names": [] - } - }, - { - "LA LIGA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/15.png", - "names": [ - "CAMPEONATO NACIONAL DE LIGA DE PRIMERA DIVISION", - "CAMPEONATO NACIONAL DE LIGA DE PRIMERA DIVISIÓN", - "LALIGA", - "PRIMERA DIVISION", - "PRIMERA DIVISIÓN", - "SPANISH LA LIGA", - "SPANISH LALIGA" - ] - } - }, - { - "LA LIGA 2": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/107.png", - "names": [ - "CAMPEONATO NACIONAL DE LIGA DE SEGUNDA DIVISION", - "CAMPEONATO NACIONAL DE LIGA DE SEGUNDA DIVISIÓN", - "LALIGA 2", - "SEGUNDA DIVISION", - "SEGUNDA DIVISIÓN", - "SPAIN SEGUNDA DIVISION", - "SPANISH LA LIGA 2", - "SPANISH LALIGA 2" - ] - } - }, - { - "LIGA I": { - "logo": "https://i.gyazo.com/3fd4b38d5263ca391e45850eb58d11e6.png", - "names": [ - "ROMANIA LIGA 1", - "ROMANIA LIGA I", - "ROMANIAN LIGA 1", - "ROMANIAN LIGA I", - "SUPERLIGA" - ] - } - }, - { - "LIGA MX": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/22.png", - "names": [ - "LIGA BBVA MX", - "LIGA MAYOR", - "MEXICAN LIGA BBVA MX", - "PRIMERA DIVISION DE MEXICO", - "PRIMERA DIVISIÓN DE MÉXICO" - ] - } - }, - { - "LIGA PROFESIONAL ARGENTINA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1.png", - "names": [ - "ARGENTINE PRIMERA DIVISION", - "ARGENTINE PRIMERA DIVISIÓN", - "LIGA PROFESIONAL DE FUTBOL", - "LIGA PROFESIONAL DE FÚTBOL", - "PRIMERA DIVISION", - "PRIMERA DIVISIÓN", - "TORNEO BETANO" - ] - } - }, - { - "LIGUE 1": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/9.png", - "names": [ - "FRANCE LIGUE 1", - "FRENCH LIGUE 1" - ] - } - }, - { - "LIGUE 2": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/96.png", - "names": [ - "FRANCE LIGUE 2", - "FRENCH LIGUE 2" - ] - } - }, - { - "MLS": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/19.png", - "names": [ - "MAJOR LEAGUE SOCCER" - ] - } - }, - { - "NWSL": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2323.png", - "names": [ - "NATIONAL WOMEN'S SOCCER LEAGUE", - "NWSL WOMEN" - ] - } - }, - { - "PREMIER LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/23.png", - "names": [ - "ENGLISH PREMIER LEAGUE", - "EPL" - ] - } - }, - { - "PRIMEIRA LIGA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/14.png", - "names": [ - "LIGA PORTUGAL", - "PORTUGUESE PRIMEIRA LIGA" - ] - } - }, - { - "PRIMERA A": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1543.png", - "names": [ - "COLOMBIAN PRIMERA A" - ] - } - }, - { - "PRIMERA B": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2295.png", - "names": [ - "COLOMBIAN PRIMERA B" - ] - } - }, - { - "SCOTTISH PREMIERSHIP": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/45.png", - "names": [ - "PREMIERSHIP", - "SPFL" - ] - } - }, - { - "SERBIA SUPERLIGA": { - "logo": "https://i.gyazo.com/0992f078dcacfef489477fc7bb1f5220.webp", - "names": [ - "MOZZART SUPERLIGA", - "SERBIAN SUPER LEAGUE" - ] - } - }, - { - "SERIE A": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/12.png", - "names": [ - "ITALIAN SERIE A" - ] - } - }, - { - "SERIE B": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/99.png", - "names": [ - "ITALIAN SERIE B" - ] - } - }, - { - "SOCCER": { - "logo": "https://i.gyazo.com/1c4aa937f5ea01b0f29bb27adb59884c.png", - "names": [] - } - }, - { - "SUPER LEAGUE GREECE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/98.png", - "names": [ - "A1 ETHNIKI KATIGORIA", - "GREECE SUPER LEAGUE", - "GREEK SUPER LEAGUE", - "SUPER LEAGUE 1" - ] - } - }, - { - "SüPER LIG": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/18.png", - "names": [ - "SUPER LIG", - "SUPERLIG", - "SÜPERLIG", - "TURKISH SUPER LIG" - ] - } - }, - { - "TURKEY 1 LIG": { - "logo": "https://i.gyazo.com/730673f84223a85c9b9ae66123907bba.png", - "names": [ - "TFF 1. LIG", - "TRENDYOL 1. LIG" - ] - } - }, - { - "UEFA CHAMPIONS LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2.png", - "names": [ - "CHAMPIONS LEAGUE", - "UCL" - ] - } - }, - { - "UEFA CONFERENCE LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/20296.png", - "names": [] - } - }, - { - "UEFA EUROPA LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2310.png", - "names": [ - "EUROPA LEAGUE" - ] - } - }, - { - "UEFA EUROPEAN CHAMPIONSHIP": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/74.png", - "names": [ - "EUROS", - "UEFA EUROS" - ] - } - }, - { - "UEFA SUPER CUP": { - "logo": "https://i.gyazo.com/3b786181aba130321b85c0e2f9604652.png", - "names": [ - "EUROPEAN SUPER CUP" - ] - } - }, - { - "UEFA WOMEN'S CHAMPIONS LEAGUE": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2408.png", - "names": [ - "UCL WOMEN", - "UEFA WOMEN", - "WOMEN'S CHAMPIONS LEAGUE" - ] - } - }, - { - "WORLD CUP QUALIFIERS": { - "logo": "https://i.gyazo.com/1c4aa937f5ea01b0f29bb27adb59884c.png", - "names": [] - } - }, - { - "WSL": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2314.png", - "names": [ - "BARCLAY'S WOMEN'S SUPER LEAGUE", - "ENGLISH WOMEN'S SUPER LEAGUE", - "FA WSL", - "WOMEN'S SUPER LEAGUE" - ] - } - } - ], - "Tennis.Dummy.us": [ - { - "TENNIS": { - "logo": "https://i.gyazo.com/b5e83afc3a75dacfb831abe975fd3821.png", - "names": [] - } - } - ], - "UFC.247.Dummy.us": [ - { - "UFC": { - "logo": "https://1000logos.net/wp-content/uploads/2017/06/Logo-UFC-500x313.png", - "names": [ - "UFC FIGHT NIGHT" - ] - } - } - ], - "WNBA.dummy.us": [ - { - "WNBA": { - "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/wnba.png", - "names": [ - "NBA W", - "WOMEN'S NATIONAL BASKETBALL ASSOCIATION" - ] - } - } - ] + "leagues": { + "Basketball.Dummy.us": [ + { + "BASKETBALL": { + "logo": "https://1000logos.net/wp-content/uploads/2024/04/Basketball-Emoji-1536x864.png", + "names": [] + } + } + ], + "Golf.Dummy.us": [ + { + "GOLF": { + "logo": "https://i.gyazo.com/14a883f22796f631e6f97c34dbeb6ada.png", + "names": [] + } + }, + { + "PGA": { + "logo": "https://1000logos.net/wp-content/uploads/2024/10/PGA-Tour-Logo-500x281.png", + "names": ["PGA TOUR"] + } + } + ], + "MLB.Baseball.Dummy.us": [ + { + "MLB": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/mlb.png", + "names": ["BASEBALL", "MAJOR LEAGUE BASEBALL"] + } + } + ], + "NBA.Basketball.Dummy.us": [ + { + "NBA": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nba.png", + "names": ["NATIONAL BASKETBALL ASSOCIATION", "NBA PRESEASON"] + } + } + ], + "NCAA.Sports.Dummy.us": [ + { + "NCAA": { + "logo": "https://1000logos.net/wp-content/uploads/2021/12/NCAA-Logo-500x281.png", + "names": ["CBB", "CFB", "NCAAB", "NCAAF"] + } + } + ], + "NFL.Dummy.us": [ + { + "NFL": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nfl.png", + "names": [ + "AMERICAN FOOTBALL", + "NATIONAL FOOTBALL LEAGUE", + "NFL PRESEASON", + "USA NFL" + ] + } + } + ], + "NHL.Hockey.Dummy.us": [ + { + "NHL": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/nhl.png", + "names": ["HOCKEY", "NATIONAL HOCKEY LEAGUE", "NHL PRESEASON"] + } + } + ], + "PPV.EVENTS.Dummy.us": [ + { + "PAY PER VIEW": { + "logo": null, + "names": ["PAY-PER-VIEW", "PAYPERVIEW", "PPV"] + } + }, + { + "WRESTLING": { + "logo": null, + "names": ["AEW", "WWE"] + } + } + ], + "Racing.Dummy.us": [ + { + "F1": { + "logo": "https://1000logos.net/wp-content/uploads/2021/06/F1-logo-500x281.png", + "names": ["FORMULA 1", "FORMULA ONE"] + } + }, + { + "MOTO GP": { + "logo": "https://1000logos.net/wp-content/uploads/2021/03/MotoGP-Logo-500x281.png", + "names": ["MOTOGP"] + } + }, + { + "RACING": { + "logo": null, + "names": [] + } + } + ], + "Soccer.Dummy.us": [ + { + "2. BUNDESLIGA": { + "logo": "https://i.gyazo.com/6c343e57acf501f4df3502d7ec646897.png", + "names": [] + } + }, + { + "3. LIGA": { + "logo": "https://i.gyazo.com/9f4f2e8370377b6214b4103003196de7.png", + "names": [] + } + }, + { + "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", + "names": ["ACL", "ACL ELITE", "ASIAN CHAMPIONS LEAGUE"] + } + }, + { + "AFRICA CUP OF NATIONS": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/76.png", + "names": ["AFCON"] + } + }, + { + "AUSTRIA 2 LIGA": { + "logo": "https://i.gyazo.com/5d1464502b841fef6e5d78c8b0764b52.png", + "names": ["ADMIRAL 2. LIGA"] + } + }, + { + "AUSTRIA BUNDESLIGA": { + "logo": "https://i.gyazo.com/83d851fb1110f1e395690403f9cf01bb.webp", + "names": ["ADMIRAL BUNDESLIGA", "FEDERAL LEAGUE"] + } + }, + { + "BUNDESLIGA": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/10.png", + "names": ["BUNDESLIG", "GERMAN BUNDESLIGA"] + } + }, + { + "CAF CHAMPIONS LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2391.png", + "names": [] + } + }, + { + "CANADIAN PREMIER LEAGUE": { + "logo": "https://i.gyazo.com/f61986e2ccfbf88f7d753b4e7f2c9fdc.png", + "names": ["CANPL", "CPL"] + } + }, + { + "CHAMPIONSHIP": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/24.png", + "names": [ + "ENGLISH CHAMPIONSHIP", + "ENGLISH FOOTBALL LEAGUE CHAMPIONSHIP", + "SKY BET CHAMPIONSHIP" + ] + } + }, + { + "CONCACAF CENTRAL AMERICAN CUP": { + "logo": "https://b.fssta.com/uploads/application/soccer/competition-logos/CONCACAFCentralAmericanCup.png", + "names": ["COPA CENTROAMERICANA DE CONCACAF"] + } + }, + { + "CONCACAF CHAMPIONS LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2298.png", + "names": ["CONCACAF CHAMPIONS CUP"] + } + }, + { + "CONCACAF GOLD CUP": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/59.png", + "names": ["COPA ORO CONCACAF"] + } + }, + { + "COPA AMÉRICA": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/83.png", + "names": [ + "CONMEBOL COPA AMERICA", + "COPA AMERICA", + "COPA LIBERTADORES DE AMÉRICA", + "SOUTH AMERICAN FOOTBALL CHAMPIONSHIP" + ] + } + }, + { + "COPA LIBERTADORES": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/58.png", + "names": [ + "CONMEBOL LIBERTADORES", + "COPA LIBERTADORES DE AMERICA", + "COPA LIBERTADORES DE AMÉRICA", + "LIBERTADORES" + ] + } + }, + { + "COPA SUDAMERICANA": { + "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": [ + "CARABAO CUP", + "EFL CUP", + "ENGLISH FOOTBALL LEAGUE CUP", + "LEAGUE CUP" + ] + } + }, + { + "EFL LEAGUE ONE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/25.png", + "names": [ + "ENGLISH FOOTBALL LEAGUE ONE", + "LEAGUE ONE", + "SKY BET LEAGUE ONE" + ] + } + }, + { + "EFL LEAGUE TWO": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/26.png", + "names": [ + "ENGLISH FOOTBALL LEAGUE TWO", + "LEAGUE TWO", + "SKY BET LEAGUE TWO" + ] + } + }, + { + "EKSTRAKLASA": { + "logo": "https://i.gyazo.com/362e31efdd0dad03b00858f4fb0901b5.png", + "names": ["PKO BANK POLSKI EKSTRAKLASA", "POLAND EKSTRAKLASA"] + } + }, + { + "EREDIVISIE": { + "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": [ + "EMIRATES FA CUP", + "FA CUP", + "FOOTBALL ASSOCIATION CHALLENGE CUP" + ] + } + }, + { + "FIFA CLUB WORLD CUP": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1932.png", + "names": ["FIFA CWC"] + } + }, + { + "FIFA WORLD CUP": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/4.png", + "names": ["FIFA WC", "WC"] + } + }, + { + "FIFA'S WOMEN WORLD CUP": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/60.png", + "names": ["FIFA WOMEN WC"] + } + }, + { + "FOOTBALL": { + "logo": "https://i.gyazo.com/1c4aa937f5ea01b0f29bb27adb59884c.png", + "names": [] + } + }, + { + "FRAUEN BUNDESLIGA": { + "logo": "https://i.gyazo.com/d13d4c0330be96801aa4b2d8b83d3a8f.png", + "names": ["GOOGLE PIXEL FRAUEN-BUNDESLIGA", "WOMEN'S FEDERAL LEAGUE"] + } + }, + { + "J1 LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2199.png", + "names": ["J.LEAGUE", "JAPANESE J.LEAGUE", "MEIJI YASUDA J1 LEAGUE"] + } + }, + { + "K LEAGUE 1": { + "logo": "https://i.gyazo.com/721eba6c954e2015d999ead7a0bd5c69.png", + "names": [] + } + }, + { + "LA LIGA": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/15.png", + "names": [ + "CAMPEONATO NACIONAL DE LIGA DE PRIMERA DIVISION", + "CAMPEONATO NACIONAL DE LIGA DE PRIMERA DIVISIÓN", + "LALIGA", + "PRIMERA DIVISION", + "PRIMERA DIVISIÓN", + "SPANISH LA LIGA", + "SPANISH LALIGA" + ] + } + }, + { + "LA LIGA 2": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/107.png", + "names": [ + "CAMPEONATO NACIONAL DE LIGA DE SEGUNDA DIVISION", + "CAMPEONATO NACIONAL DE LIGA DE SEGUNDA DIVISIÓN", + "LALIGA 2", + "SEGUNDA DIVISION", + "SEGUNDA DIVISIÓN", + "SPAIN SEGUNDA DIVISION", + "SPANISH LA LIGA 2", + "SPANISH LALIGA 2" + ] + } + }, + { + "LIGA I": { + "logo": "https://i.gyazo.com/3fd4b38d5263ca391e45850eb58d11e6.png", + "names": [ + "ROMANIA LIGA 1", + "ROMANIA LIGA I", + "ROMANIAN LIGA 1", + "ROMANIAN LIGA I", + "SUPERLIGA" + ] + } + }, + { + "LIGA MX": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/22.png", + "names": [ + "LIGA BBVA MX", + "LIGA MAYOR", + "MEXICAN LIGA BBVA MX", + "MEXICO LIGA MX", + "PRIMERA DIVISION DE MEXICO", + "PRIMERA DIVISIÓN DE MÉXICO" + ] + } + }, + { + "LIGA PROFESIONAL ARGENTINA": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1.png", + "names": [ + "ARGENTINE PRIMERA DIVISION", + "ARGENTINE PRIMERA DIVISIÓN", + "LIGA PROFESIONAL DE FUTBOL", + "LIGA PROFESIONAL DE FÚTBOL", + "PRIMERA DIVISION", + "PRIMERA DIVISIÓN", + "TORNEO BETANO" + ] + } + }, + { + "LIGUE 1": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/9.png", + "names": ["FRANCE LIGUE 1", "FRENCH LIGUE 1"] + } + }, + { + "LIGUE 2": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/96.png", + "names": ["FRANCE LIGUE 2", "FRENCH LIGUE 2"] + } + }, + { + "MLS": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/19.png", + "names": ["MAJOR LEAGUE SOCCER"] + } + }, + { + "NWSL": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2323.png", + "names": ["NATIONAL WOMEN'S SOCCER LEAGUE", "NWSL WOMEN"] + } + }, + { + "PREMIER LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/23.png", + "names": ["ENGLISH PREMIER LEAGUE", "EPL"] + } + }, + { + "PRIMEIRA LIGA": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/14.png", + "names": ["LIGA PORTUGAL", "PORTUGUESE PRIMEIRA LIGA"] + } + }, + { + "PRIMERA A": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/1543.png", + "names": ["COLOMBIAN PRIMERA A"] + } + }, + { + "PRIMERA B": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2295.png", + "names": ["COLOMBIAN PRIMERA B"] + } + }, + { + "SCOTTISH PREMIERSHIP": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/45.png", + "names": ["PREMIERSHIP", "SPFL"] + } + }, + { + "SERBIA SUPERLIGA": { + "logo": "https://i.gyazo.com/0992f078dcacfef489477fc7bb1f5220.webp", + "names": ["MOZZART SUPERLIGA", "SERBIAN SUPER LEAGUE"] + } + }, + { + "SERIE A": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/12.png", + "names": ["ITALIAN SERIE A"] + } + }, + { + "SERIE B": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/99.png", + "names": ["ITALIAN SERIE B"] + } + }, + { + "SOCCER": { + "logo": "https://i.gyazo.com/1c4aa937f5ea01b0f29bb27adb59884c.png", + "names": [] + } + }, + { + "SUPER LEAGUE GREECE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/98.png", + "names": [ + "A1 ETHNIKI KATIGORIA", + "GREECE SUPER LEAGUE", + "GREEK SUPER LEAGUE", + "SUPER LEAGUE 1" + ] + } + }, + { + "SÜPER LIG": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/18.png", + "names": ["SUPER LIG", "SUPERLIG", "SÜPERLIG", "TURKISH SUPER LIG"] + } + }, + { + "TURKEY 1 LIG": { + "logo": "https://i.gyazo.com/730673f84223a85c9b9ae66123907bba.png", + "names": ["TFF 1. LIG", "TRENDYOL 1. LIG"] + } + }, + { + "UEFA CHAMPIONS LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2.png", + "names": ["CHAMPIONS LEAGUE", "UCL"] + } + }, + { + "UEFA CONFERENCE LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/20296.png", + "names": [] + } + }, + { + "UEFA EUROPA LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2310.png", + "names": ["EUROPA LEAGUE"] + } + }, + { + "UEFA EUROPEAN CHAMPIONSHIP": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/74.png", + "names": ["EUROS", "UEFA EUROS"] + } + }, + { + "UEFA SUPER CUP": { + "logo": "https://i.gyazo.com/3b786181aba130321b85c0e2f9604652.png", + "names": ["EUROPEAN SUPER CUP"] + } + }, + { + "UEFA WOMEN'S CHAMPIONS LEAGUE": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2408.png", + "names": ["UCL WOMEN", "UEFA WOMEN", "WOMEN'S CHAMPIONS LEAGUE"] + } + }, + { + "WORLD CUP QUALIFIERS": { + "logo": "https://i.gyazo.com/1c4aa937f5ea01b0f29bb27adb59884c.png", + "names": [] + } + }, + { + "WSL": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/2314.png", + "names": [ + "BARCLAY'S WOMEN'S SUPER LEAGUE", + "ENGLISH WOMEN'S SUPER LEAGUE", + "FA WSL", + "WOMEN'S SUPER LEAGUE" + ] + } + } + ], + "Tennis.Dummy.us": [ + { + "TENNIS": { + "logo": "https://i.gyazo.com/b5e83afc3a75dacfb831abe975fd3821.png", + "names": [] + } + } + ], + "UFC.247.Dummy.us": [ + { + "UFC": { + "logo": "https://1000logos.net/wp-content/uploads/2017/06/Logo-UFC-500x313.png", + "names": ["UFC FIGHT NIGHT"] + } + } + ], + "WNBA.dummy.us": [ + { + "WNBA": { + "logo": "https://a.espncdn.com/combiner/i?img=/i/teamlogos/leagues/500/wnba.png", + "names": ["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" + ] + } }