diff --git a/get_data.py b/get_data.py index 3cb9b4b..5668bf0 100644 --- a/get_data.py +++ b/get_data.py @@ -168,6 +168,49 @@ def results_consumer(): "data": incoming_status if incoming_status is not None else payload, } + elif "live-status" in source: + # просто сохраним, как и остальные + latest_data[source] = { + "ts": msg["ts"], + "data": incoming_status if incoming_status is not None else payload, + } + + # попытка ДОПОЛНИТЕЛЬНО обновить глобальный STATUS по live-status + try: + ls_data = payload.get("result") or payload # иногда сразу result + # тут нужно посмотреть, какое именно поле у тебя в live-status + # допустим, там есть что-то вроде "status" или "gameStatus" + raw_ls_status = ( + ls_data.get("status") + or ls_data.get("gameStatus") + or ls_data.get("state") + ) + + if raw_ls_status: + raw_ls_status = str(raw_ls_status).lower() + + # варианты, которые считаем "матч окончен" + finished_markers = [ + "finished", + "result", + "resultconfirmed", + "ended", + "game over", + "final", + ] + + if any(m in raw_ls_status for m in finished_markers): + # перезатираем глобальный статус — он более актуальный + # если матч сегодня — делаем finished_today, иначе просто finished + from datetime import datetime + + if GAME_START_DT and GAME_START_DT.date() == datetime.now().date(): + globals()["STATUS"] = "finished_today" + else: + globals()["STATUS"] = "finished" + except Exception as e: + print("results_consumer: live-status postprocess error:", e) + else: if source == "game": has_game_already = "game" in latest_data @@ -1500,9 +1543,35 @@ async def regular_standings(): @app.get("/live_status.json") async def live_status(): + # если матч реально идёт/вот-вот — пытаемся отдать то, что есть if STATUS in ["live", "live_soon"]: - return [latest_data["live-status"]["data"]["result"]] + ls = latest_data.get("live-status") + + if not ls: + # live-status ещё не прилетел + return [{"foulsA": 0, "foulsB": 0}] + + raw = ls.get("data") + + # 1) если это уже готовый dict и в нём есть result → как было раньше + if isinstance(raw, dict): + # иногда API кладёт всё прямо в root, иногда внутрь result + if "result" in raw and isinstance(raw["result"], dict): + return [raw["result"]] + else: + # отдадим как есть, но в списке, чтобы фронт не сломать + return [raw] + + # 2) если это просто строка статуса ("ok" / "no-status" / "error") + if isinstance(raw, str): + return [{ + "status": raw + }] + + # fallback + return [{"foulsA": 0, "foulsB": 0}] else: + # матч не идёт — как у тебя было return [{"foulsA": 0, "foulsB": 0}]