From 28d7d01fdf44293d4ab2ca1851524896fac6f1c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AE=D1=80=D0=B8=D0=B9=20=D0=A7=D0=B5=D1=80=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BA=D0=BE?= Date: Mon, 25 May 2026 11:42:51 +0300 Subject: [PATCH] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parsers/parser_schedule.py | 48 +++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/parsers/parser_schedule.py b/parsers/parser_schedule.py index 0606ddb..f71bd9e 100644 --- a/parsers/parser_schedule.py +++ b/parsers/parser_schedule.py @@ -50,6 +50,10 @@ 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", @@ -62,28 +66,28 @@ def fetch_html(url: str) -> str: return response.text except requests.exceptions.Timeout: - return "Ошибка: сайт слишком долго отвечает" + raise SiteUnavailableError("Сайт слишком долго отвечает") except requests.exceptions.ConnectionError: - return "Ошибка: не удалось подключиться к сайту" + raise SiteUnavailableError("Не удалось подключиться к сайту") except requests.exceptions.HTTPError as e: - return f"Ошибка HTTP: {e.response.status_code}" + raise SiteUnavailableError(f"Ошибка HTTP: {e.response.status_code}") except requests.exceptions.TooManyRedirects: - return "Ошибка: слишком много редиректов" + raise SiteUnavailableError("Слишком много редиректов") except requests.exceptions.InvalidURL: - return "Ошибка: неверный URL" + raise SiteUnavailableError("Неверный URL") except requests.exceptions.MissingSchema: - return "Ошибка: отсутствует схема URL (https://)" + raise SiteUnavailableError("Отсутствует схема URL, например https://") except requests.exceptions.SSLError: - return "Ошибка SSL сертификата" + raise SiteUnavailableError("Ошибка SSL сертификата") except requests.exceptions.RequestException as e: - return f"Неизвестная ошибка запроса: {e}" + raise SiteUnavailableError(f"Неизвестная ошибка запроса: {e}") def normalize_status(score1: str | None, score2: str | None, dt: datetime) -> str: now = datetime.now(TZ) @@ -190,11 +194,29 @@ def parse_schedule(html: str) -> list[dict]: return matches_data -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)}") +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}", + } if __name__ == "__main__":