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__":