From 00000d9000bc52d0936b4493ad8084f85bedabff Mon Sep 17 00:00:00 2001 From: doms9 <96013514+doms9@users.noreply.github.com> Date: Sat, 13 Sep 2025 13:32:32 -0400 Subject: [PATCH] e --- M3U8/scrapers/ace.py | 5 +--- M3U8/scrapers/fstv.py | 46 +++++++++++++++++------------------ M3U8/scrapers/livetvsx.py | 5 +--- M3U8/scrapers/ppv.py | 6 ++--- M3U8/scrapers/streameast.py | 5 +--- M3U8/scrapers/tvpass.py | 5 +--- M3U8/scrapers/utils/config.py | 9 +++++++ 7 files changed, 37 insertions(+), 44 deletions(-) diff --git a/M3U8/scrapers/ace.py b/M3U8/scrapers/ace.py index 04114a1..d4f151c 100644 --- a/M3U8/scrapers/ace.py +++ b/M3U8/scrapers/ace.py @@ -114,10 +114,7 @@ async def main(client: httpx.AsyncClient) -> None: urls[f"[{sport}] {event} (S{i})"] = { "url": link, - "logo": LOGOS.get( - sport, - "https://i.gyazo.com/ec27417a9644ae517196494afa72d2b9.png", - ), + "logo": LOGOS.get(sport, LOGOS["default"]), } log.info(f"Collected {len(urls)} events") diff --git a/M3U8/scrapers/fstv.py b/M3U8/scrapers/fstv.py index 97e4e77..7097b7d 100644 --- a/M3U8/scrapers/fstv.py +++ b/M3U8/scrapers/fstv.py @@ -41,23 +41,24 @@ async def get_events( events = [] for wrpr in soup.css("div.fixtures-live-wrapper"): - for games in wrpr.css(".match-table-item"): + for league_block in wrpr.css(".match-table-item > .league-info-wrapper"): + if not ( + league_name_el := league_block.css_first(".league-info a.league-name") + ): + continue - league_name = games.css_first(".league-info a.league-name") + full_text = league_name_el.text(strip=True) - league_match = games.css_first(".common-table-row a[href*='/match/']") + if "]" in full_text: + event_name = full_text.split("]", 1)[1].strip() + else: + event_name = full_text - if league_name and league_match: - full_text = league_name.text(strip=True) + parent_item = league_block.parent - if "]" in full_text: - event_name = full_text.split("]", 1)[1].strip() - else: - event_name = full_text - - href = league_match.attributes.get("href") - - link = urljoin(base_url, href) + for game in parent_item.css(".common-table-row a[href*='/match/']"): + if not (href := game.attributes.get("href")): + continue if cached_hrefs & {href}: continue @@ -65,11 +66,8 @@ async def get_events( events.append( { "sport": event_name, - "link": link, - "logo": LOGOS.get( - event_name, - "https://i.gyazo.com/ec27417a9644ae517196494afa72d2b9.png", - ), + "link": urljoin(base_url, href), + "logo": LOGOS.get(event_name, LOGOS["default"]), "href": href, } ) @@ -103,13 +101,13 @@ async def process_event( og_title.attributes.get("content", "").split(" start on")[0].strip() ) - if ifr := soup.css_first("iframe"): - if src := ifr.attributes.get("src", ""): - log.info(f"URL {url_num}) Captured M3U8") - return match_name, unquote(src).split("link=")[-1] + if not (ifr := soup.css_first("iframe")): + log.info(f"URL {url_num}) No M3U8 found") + return "", "" - log.info(f"URL {url_num}) No M3U8 found") - return "", "" + if src := ifr.attributes.get("src", ""): + log.info(f"URL {url_num}) Captured M3U8") + return match_name, unquote(src).split("link=")[-1] async def main(client: httpx.AsyncClient) -> None: diff --git a/M3U8/scrapers/livetvsx.py b/M3U8/scrapers/livetvsx.py index e0c102e..bb1302a 100644 --- a/M3U8/scrapers/livetvsx.py +++ b/M3U8/scrapers/livetvsx.py @@ -310,10 +310,7 @@ async def main(client: httpx.AsyncClient) -> None: if url: entry = { "url": url, - "logo": LOGOS.get( - sport, - "https://i.gyazo.com/ec27417a9644ae517196494afa72d2b9.png", - ), + "logo": LOGOS.get(sport, LOGOS["default"]), "base": "https://livetv.sx/enx/", "timestamp": now.timestamp(), } diff --git a/M3U8/scrapers/ppv.py b/M3U8/scrapers/ppv.py index 4b2b655..1a9e3be 100644 --- a/M3U8/scrapers/ppv.py +++ b/M3U8/scrapers/ppv.py @@ -12,6 +12,7 @@ import httpx from playwright.async_api import async_playwright from .utils import ( + LOGOS, TZ, capture_req, firefox, @@ -138,10 +139,7 @@ async def get_events( event["name"], event["starts_at"], event["ends_at"], - event.get( - "poster", - "https://i.gyazo.com/ec27417a9644ae517196494afa72d2b9.png", - ), + event.get("poster", LOGOS["default"]), event["uri_name"], ) diff --git a/M3U8/scrapers/streameast.py b/M3U8/scrapers/streameast.py index 1ff8818..70d8e59 100644 --- a/M3U8/scrapers/streameast.py +++ b/M3U8/scrapers/streameast.py @@ -149,10 +149,7 @@ async def get_events( "sport": sport, "event": name, "link": href, - "logo": LOGOS.get( - sport, - "https://i.gyazo.com/ec27417a9644ae517196494afa72d2b9.png", - ), + "logo": LOGOS.get(sport, LOGOS["default"]), } ) diff --git a/M3U8/scrapers/tvpass.py b/M3U8/scrapers/tvpass.py index d28683c..87f5bd5 100644 --- a/M3U8/scrapers/tvpass.py +++ b/M3U8/scrapers/tvpass.py @@ -55,10 +55,7 @@ async def main(client: httpx.AsyncClient) -> None: entry = { "url": f"http://origin.thetvapp.to/hls/{url.split('/')[-2]}/mono.m3u8", - "logo": LOGOS.get( - sport, - "https://i.gyazo.com/ec27417a9644ae517196494afa72d2b9.png", - ), + "logo": LOGOS.get(sport, LOGOS["default"]), "base": "https://tvpass.org", "timestamp": now.timestamp(), } diff --git a/M3U8/scrapers/utils/config.py b/M3U8/scrapers/utils/config.py index 85547e3..777b47b 100644 --- a/M3U8/scrapers/utils/config.py +++ b/M3U8/scrapers/utils/config.py @@ -22,6 +22,7 @@ UA = ( ) LOGOS = { + "default": "https://i.gyazo.com/ec27417a9644ae517196494afa72d2b9.png", "MLB": "https://i.gyazo.com/0fe7865ef2f06c9507791b24f04dbca8.png", "NBA": "https://i.gyazo.com/773c23570f095a5d549c23b9401d83f4.png", "NCAAF": "https://i.gyazo.com/ca63b40c86e757436de9d34d369b24f8.png", @@ -29,7 +30,15 @@ LOGOS = { "NFL": "https://i.gyazo.com/fb4956d7a2fe54a1bac54cd81e1b3f11.png", "NHL": "https://i.gyazo.com/526607d4e886d5ed1fecca4bff3115e2.png", "WNBA": "https://i.gyazo.com/02d665a5704118d195dbcd5fa20d5462.png", + "La Liga": "https://i.gyazo.com/3ea07074f7faab98c00493f07f4c6661.png", + "Premier League": "https://i.gyazo.com/5cf939a9669647ec49c5ca61ab34789d.png", + "Serie A": "https://i.gyazo.com/38fd8ea613b0f02780d2314fd49f7595.png", + "Bundesliga": "https://i.gyazo.com/d608cd1fe95c288aba9e03a9b2f2b688.png", + "Ligue 1": "https://i.gyazo.com/e5cd3f3960ea0fc7a10f831b6c79d31d.png", + "Primeira Liga": "https://i.gyazo.com/0b9ff26408609ccb90bf45d60aa13500.png", + "MLS": "https://i.gyazo.com/014b639a369d2bd8a4b97d00a239f330.png", } +LOGOS["EPL"] = LOGOS["Premier League"] LOG_FMT = ( "[%(asctime)s] "