diff --git a/app.py b/app.py index 5eb0496..fc6e1d7 100644 --- a/app.py +++ b/app.py @@ -29,7 +29,7 @@ import contextlib import os from parsers.parser_game import run_parser_game from parsers.parser_players import run_parser_players -from parsers.parser_schedule import run_parser_schedule +from parsers.parser_schedule import run_parser_schedule, SiteUnavailableError from parsers.parser_standings import run_parser_standings diff --git a/parsers/parser_game.py b/parsers/parser_game.py index 879ded9..57bfe15 100644 --- a/parsers/parser_game.py +++ b/parsers/parser_game.py @@ -7,18 +7,10 @@ BASE_MATCH_URL = "https://wfl.rfs.ru/match/" def fetch_html(url: str) -> str: - headers = { - "User-Agent": "Mozilla/5.0", - "Accept": "*/*" - } - - try: - r = requests.get(url, headers=headers, timeout=20) - r.raise_for_status() - return r.text - - except requests.exceptions.RequestException as e: - return f"Сайт недоступен: {e}" + headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"} + r = requests.get(url, headers=headers, timeout=20) + r.raise_for_status() + return r.text def extract_player_id_from_href(href: str) -> str: diff --git a/parsers/parser_players.py b/parsers/parser_players.py index 8e19245..c860913 100644 --- a/parsers/parser_players.py +++ b/parsers/parser_players.py @@ -17,18 +17,10 @@ AMPLUA_FULL = { def fetch_html(url: str) -> str: - headers = { - "User-Agent": "Mozilla/5.0", - "Accept": "*/*" - } - - try: - r = requests.get(url, headers=headers, timeout=20) - r.raise_for_status() - return r.text - - except requests.exceptions.RequestException as e: - return f"Сайт недоступен: {e}" + headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"} + r = requests.get(url, headers=headers, timeout=20) + r.raise_for_status() + return r.text def get_links(html: str) -> list[dict]: diff --git a/parsers/parser_schedule.py b/parsers/parser_schedule.py index f71bd9e..3a9e7a7 100644 --- a/parsers/parser_schedule.py +++ b/parsers/parser_schedule.py @@ -50,44 +50,12 @@ def parse_russian_date(date_str: str, year: int | None = None) -> datetime: return datetime(year, month, int(day), int(hh), int(mm), tzinfo=TZ) -class SiteUnavailableError(Exception): - pass - - def fetch_html(url: str) -> str: - headers = { - "User-Agent": "Mozilla/5.0", - "Accept": "*/*" - } + headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"} + response = requests.get(url, headers=headers, timeout=20) + response.raise_for_status() + return response.text - try: - response = requests.get(url, headers=headers, timeout=20) - response.raise_for_status() - return response.text - - except requests.exceptions.Timeout: - raise SiteUnavailableError("Сайт слишком долго отвечает") - - except requests.exceptions.ConnectionError: - raise SiteUnavailableError("Не удалось подключиться к сайту") - - except requests.exceptions.HTTPError as e: - raise SiteUnavailableError(f"Ошибка HTTP: {e.response.status_code}") - - except requests.exceptions.TooManyRedirects: - raise SiteUnavailableError("Слишком много редиректов") - - except requests.exceptions.InvalidURL: - raise SiteUnavailableError("Неверный URL") - - except requests.exceptions.MissingSchema: - raise SiteUnavailableError("Отсутствует схема URL, например https://") - - except requests.exceptions.SSLError: - raise SiteUnavailableError("Ошибка SSL сертификата") - - except requests.exceptions.RequestException as e: - raise SiteUnavailableError(f"Неизвестная ошибка запроса: {e}") def normalize_status(score1: str | None, score2: str | None, dt: datetime) -> str: now = datetime.now(TZ) @@ -194,29 +162,11 @@ def parse_schedule(html: str) -> list[dict]: return matches_data -def run_parser_schedule() -> dict: - try: - html = fetch_html(URL_SCHEDULE) - matches_data = parse_schedule(html) - sync_matches(matches_data) - - return { - "success": True, - "message": f"Матчи синхронизированы: {len(matches_data)}", - "count": len(matches_data), - } - - except SiteUnavailableError as e: - return { - "success": False, - "message": f"Сайт недоступен: {e}", - } - - except Exception as e: - return { - "success": False, - "message": f"Ошибка парсера: {e}", - } +def run_parser_schedule() -> None: + html = fetch_html(URL_SCHEDULE) + matches_data = parse_schedule(html) + sync_matches(matches_data) + print(f"[parser_schedule] Matches synced: {len(matches_data)}") if __name__ == "__main__": diff --git a/parsers/parser_standings.py b/parsers/parser_standings.py index 820f156..41ac1ea 100644 --- a/parsers/parser_standings.py +++ b/parsers/parser_standings.py @@ -8,18 +8,10 @@ SEASON = "2025/2026" def fetch_html(url: str) -> str: - headers = { - "User-Agent": "Mozilla/5.0", - "Accept": "*/*" - } - - try: - r = requests.get(url, headers=headers, timeout=20) - r.raise_for_status() - return r.text - - except requests.exceptions.RequestException as e: - return f"Сайт недоступен: {e}" + headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"} + r = requests.get(url, headers=headers, timeout=20) + r.raise_for_status() + return r.text def parse_standings(html: str) -> list[dict]: diff --git a/parsers/parser_teams.py b/parsers/parser_teams.py index 552bd4c..1abae50 100644 --- a/parsers/parser_teams.py +++ b/parsers/parser_teams.py @@ -9,18 +9,10 @@ TEAMS_URL = "https://wfl.rfs.ru/tournament/1061879/teams" def fetch_html(url: str) -> str: - headers = { - "User-Agent": "Mozilla/5.0", - "Accept": "*/*" - } - - try: - r = requests.get(url, headers=headers, timeout=20) - r.raise_for_status() - return r.text - - except requests.exceptions.RequestException as e: - return f"Сайт недоступен: {e}" + headers = {"User-Agent": "Mozilla/5.0", "Accept": "*/*"} + response = requests.get(url, timeout=30, headers=headers) + response.raise_for_status() + return response.text def get_links(html) -> list: