From 27faa3e78f26233117f95f7bdc67d841bff812e0 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: Sat, 1 Nov 2025 18:50:04 +0300 Subject: [PATCH] =?UTF-8?q?=D1=82=D0=B0=D0=B9=D0=BC=20=D1=81=D0=BB=D0=B8?= =?UTF-8?q?=D0=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get_data.py | 50 +++++++++++++++++++++++++++++++++----------------- replace.bat | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 replace.bat diff --git a/get_data.py b/get_data.py index 6f0dd74..f92367c 100644 --- a/get_data.py +++ b/get_data.py @@ -91,8 +91,8 @@ SEASON = None GAME_START_DT = None # datetime начала матча (локальная из календаря) GAME_TODAY = False # флаг: игра сегодня GAME_SOON = False # флаг: игра сегодня и скоро (<1 часа) -OFFLINE_SWITCH_AT = None # timestamp, когда надо уйти в оффлайн -OFFLINE_DELAY_SEC = 600 # 10 минут +OFFLINE_SWITCH_AT = None # timestamp, когда надо уйти в оффлайн +OFFLINE_DELAY_SEC = 600 # 10 минут # общая очередь results_q = queue.Queue() @@ -337,11 +337,12 @@ def get_data_from_API( logger.debug(f"[{ts}] name: {name}, status: {value.get('status', 'no-status')}") # сколько уже заняло - elapsed = time.time() - start + # elapsed = time.time() - start # сколько надо доспать, чтобы в сумме вышла нужная частота - to_sleep = sleep_time - elapsed - if to_sleep > 0: - time.sleep(to_sleep) + # to_sleep = sleep_time - elapsed + # print(to_sleep) + # if to_sleep > 0: + time.sleep(sleep_time) # если запрос занял дольше — просто сразу следующую итерацию @@ -357,7 +358,7 @@ def results_consumer(): stop_live_threads() start_offline_threads(SEASON, GAME_ID) # чтобы не повторять - globals()["OFFLINE_SWITCH_AT"] = None + globals()["OFFLINE_SWITCH_AT"] = None try: msg = results_q.get(timeout=0.5) except queue.Empty: @@ -460,8 +461,12 @@ def results_consumer(): raw_ls_status_low = str(raw_ls_status).lower() finished_markers = [ - "finished", "result", "resultconfirmed", - "ended", "final", "game over", + "finished", + "result", + "resultconfirmed", + "ended", + "final", + "game over", ] # 1) матч ЗАКОНЧЕН → запускаем ОТСРОЧЕННЫЙ переход @@ -469,7 +474,9 @@ def results_consumer(): now_ts = time.time() # если ещё не назначали переход — назначим if globals().get("OFFLINE_SWITCH_AT") is None: - switch_at = now_ts + globals().get("OFFLINE_DELAY_SEC", 600) + switch_at = now_ts + globals().get( + "OFFLINE_DELAY_SEC", 600 + ) globals()["OFFLINE_SWITCH_AT"] = switch_at # статус тоже обозначим, что он завершён, но ждёт @@ -481,20 +488,28 @@ def results_consumer(): else: globals()["STATUS"] = "finished_wait" - human_time = datetime.fromtimestamp(switch_at).strftime("%H:%M:%S") + human_time = datetime.fromtimestamp(switch_at).strftime( + "%H:%M:%S" + ) logger.info( f"[status] match finished → will switch to OFFLINE at {human_time} " f"(in {globals().get('OFFLINE_DELAY_SEC', 600)}s)" ) else: # уже ждём — можно в debug - logger.debug("[status] match finished → OFFLINE already scheduled") + logger.debug( + "[status] match finished → OFFLINE already scheduled" + ) # 2) матч снова стал онлайном → СБРАСЫВАЕМ отложенный переход - elif "online" in raw_ls_status_low or "live" in raw_ls_status_low: + elif ( + "online" in raw_ls_status_low or "live" in raw_ls_status_low + ): # если до этого стояла отложка — уберём if globals().get("OFFLINE_SWITCH_AT") is not None: - logger.info("[status] match back to LIVE → cancel scheduled OFFLINE") + logger.info( + "[status] match back to LIVE → cancel scheduled OFFLINE" + ) globals()["OFFLINE_SWITCH_AT"] = None if globals().get("STATUS") not in ["live", "live_soon"]: @@ -505,8 +520,9 @@ def results_consumer(): start_live_threads(SEASON, GAME_ID) except Exception as e: - logger.warning(f"results_consumer: live-status postprocess error: {e}") - + logger.warning( + f"results_consumer: live-status postprocess error: {e}" + ) else: if source == "game": @@ -1007,6 +1023,7 @@ async def game(): @app.get("/status") async def status(request: Request): global STATUS # будем его править, если live-status свежее + def color_for_status(status_value: str) -> str: """Подбор цвета статуса в HEX""" status_value = str(status_value).lower() @@ -1099,7 +1116,6 @@ async def status(request: Request): else: gs_class = status_raw gs_text = "⚪ Unknown" - html = f""" diff --git a/replace.bat b/replace.bat new file mode 100644 index 0000000..6937056 --- /dev/null +++ b/replace.bat @@ -0,0 +1,36 @@ +@echo off +setlocal + +rem === Проверка аргументов === +if "%~1"=="" ( + echo ❌ Укажите путь к XML-файлу. + echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru" + exit /b 1 +) +if "%~2"=="" ( + echo ❌ Укажите новый базовый URL. + echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru" + exit /b 1 +) + +set "FILE=%~1" +set "NEWURL=%~2" + +echo 🔄 Обработка файла: %FILE% +echo 🔗 Новый базовый URL: %NEWURL% +echo. + +powershell -NoLogo -NoProfile -Command ^ + $file = '%FILE%'; ^ + $newUrl = '%NEWURL%'; ^ + $content = Get-Content -Raw $file; ^ + # шаблон: ищем http(s)://домен или IP:порт и сохраняем хвост, если есть + $pattern = '(?s)(https?:\/\/\w{3,}\.\w+\.\w{2,}|http:\/\/\d+\.\d+\.\d+\.\d+:\d+)(\/[^\s<"]*)?'; ^ + # замена: если есть хвост — добавляем его обратно, иначе только базовый URL + $content = [regex]::Replace($content, $pattern, { + if ($matches[2]) { "$newUrl$($matches[2])" } else { "$newUrl" } + }); ^ + Set-Content -Path $file -Value $content -Encoding UTF8 + +echo ✅ Замена завершена. +pause