поправил 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,
|
"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:
|
else:
|
||||||
if source == "game":
|
if source == "game":
|
||||||
has_game_already = "game" in latest_data
|
has_game_already = "game" in latest_data
|
||||||
@@ -1500,9 +1543,35 @@ async def regular_standings():
|
|||||||
|
|
||||||
@app.get("/live_status.json")
|
@app.get("/live_status.json")
|
||||||
async def live_status():
|
async def live_status():
|
||||||
|
# если матч реально идёт/вот-вот — пытаемся отдать то, что есть
|
||||||
if STATUS in ["live", "live_soon"]:
|
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:
|
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}]
|
return [{"foulsA": 0, "foulsB": 0}]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user