поправил live-status обновление. должно после того, как матч окончен, выставиться правильный статус игры
This commit is contained in:
71
get_data.py
71
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}]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user