This commit is contained in:
doms9 2025-10-12 00:27:42 -04:00
parent 69cf0b4754
commit 00000d9b81
9 changed files with 30 additions and 8 deletions

View file

@ -25,6 +25,7 @@ async def get_events(
base_url: str,
cached_hrefs: set[str],
) -> list[dict[str, str]]:
log.info(f'Scraping from "{base_url}"')
try:
@ -80,6 +81,7 @@ async def process_event(
url: str,
url_num: int,
) -> tuple[str, str]:
try:
r = await client.get(url)
r.raise_for_status()

View file

@ -34,6 +34,7 @@ async def write_to_cert(
url: str,
cert: Path,
) -> None:
try:
r = await client.get(url)
r.raise_for_status()
@ -94,6 +95,7 @@ async def process_event(
url_num: int,
context: BrowserContext,
) -> str | None:
page = await context.new_page()
captured: list[str] = []

View file

@ -21,6 +21,7 @@ async def process_event(
url: str,
url_num: int,
) -> str | None:
try:
r = await client.get(url)
r.raise_for_status()

View file

@ -25,6 +25,7 @@ async def process_event(
url_num: int,
context: BrowserContext,
) -> str | None:
page = await context.new_page()
captured: list[str] = []

View file

@ -55,6 +55,7 @@ async def process_event(
url_num: int,
context: BrowserContext,
) -> str | None:
page = await context.new_page()
captured: list[str] = []

View file

@ -22,6 +22,7 @@ class Cache:
per_entry: bool = True,
index: bool = False,
) -> dict[str, dict[str, str | float]]:
try:
data: dict = json.loads(self.file.read_text(encoding="utf-8"))
except (FileNotFoundError, json.JSONDecodeError):

View file

@ -35,7 +35,12 @@ class Time(datetime):
return self.__class__.fromtimestamp(dt.timestamp(), tz=ZONES[tzone])
@classmethod
def from_str(cls, s: str, fmt: str | None = None) -> "Time":
def from_str(
cls,
s: str,
fmt: str | None = None,
) -> "Time":
pattern = re.compile(r"\b(ET|UTC|EST|EDT)\b")
match = pattern.search(s)
@ -99,7 +104,12 @@ class Leagues:
return (None, self.live_img)
def is_valid(self, event: str, league: str) -> bool:
def is_valid(
self,
event: str,
league: str,
) -> bool:
pattern = re.compile(r"\s+(?:-|vs\.?|at)\s+", flags=re.IGNORECASE)
if pattern.search(event):
@ -109,7 +119,12 @@ class Leagues:
return event.lower() == "nfl redzone" if league == "NFL" else False
def get_tvg_info(self, sport: str, event: str) -> tuple[str | None, str]:
def get_tvg_info(
self,
sport: str,
event: str,
) -> tuple[str | None, str]:
match sport:
case "American Football":
return (

View file

@ -84,6 +84,7 @@ class Network:
got_one: asyncio.Event,
patterns: list[str] | None = None,
) -> None:
if not patterns:
patterns = ["amazonaws", "knitcdn"]

View file

@ -36,10 +36,7 @@ SPORT_ENDPOINTS = [
]
async def get_api_data(
client: httpx.AsyncClient,
url: str,
) -> list[dict[str, Any]]:
async def get_api_data(client: httpx.AsyncClient, url: str) -> list[dict[str, Any]]:
try:
r = await client.get(url, timeout=10)
r.raise_for_status()
@ -137,6 +134,7 @@ async def process_event(
await iframe.click("button.vds-play-button")
except TimeoutError:
log.warning("Play button not found inside iframe.")
return
wait_task = asyncio.create_task(got_one.wait())
@ -218,7 +216,7 @@ async def get_events(
{
"sport": sport,
"event": name,
"link": f"https://www.watchfooty.live/en/stream/{match_id}",
"link": urljoin(base_url, f"stream/{match_id}"),
"logo": logo,
"timestamp": event_dt.timestamp(),
}