MLB 종료 판정을 detailedState→abstractGameState 기준으로 수정
우천 조기종료(detailedState="Completed Early") 등 "Final" 이외의 종료 변형 문자열은 감지되지 못해 해당 경기가 영원히 정산 안 된 채 live 로 고착되는 버그였다(MLB_PHI_BAL_20260803, 8:0 조기종료 확정임에도 누락). abstractGameState(Preview/Live/Final 세 값만 존재)로 판정 기준 교체. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
11dd968ced
commit
bc333d64f4
@ -95,17 +95,24 @@ async def _fetch_mlb(days_back: int, days_ahead: int) -> list[dict]:
|
||||
kickoff = (
|
||||
datetime.fromisoformat(gd.replace("Z", "+00:00")).astimezone(KST)
|
||||
)
|
||||
state = (g.get("status") or {}).get("detailedState", "")
|
||||
status_obj = g.get("status") or {}
|
||||
# detailedState 는 "Final"/"Game Over"/"Completed Early"(우천 조기종료) 등
|
||||
# 종료를 뜻하는 문자열이 여러 갈래라 그것만으로 판정하면 일부가 누락된다.
|
||||
# abstractGameState 는 Preview/Live/Final 세 값만 존재하는 신뢰 가능한 판정 기준.
|
||||
abstract = status_obj.get("abstractGameState", "")
|
||||
detailed = status_obj.get("detailedState", "")
|
||||
rec = {
|
||||
"league": "mlb",
|
||||
"teamA": a, "teamB": b,
|
||||
"dateKst": kickoff.strftime("%Y%m%d"),
|
||||
"kickoffKst": kickoff.isoformat(),
|
||||
"venue": (g.get("venue") or {}).get("name", ""),
|
||||
"cancelled": state in ("Postponed", "Cancelled", "Suspended"),
|
||||
"cancelled": abstract != "Final" and detailed.startswith(
|
||||
("Postponed", "Cancelled", "Suspended")
|
||||
),
|
||||
"gamePk": g.get("gamePk"), # MLB 라이브 피드 키
|
||||
}
|
||||
if state == "Final" and not rec["cancelled"]:
|
||||
if abstract == "Final" and not rec["cancelled"]:
|
||||
sa = g["teams"]["away"].get("score")
|
||||
sb = g["teams"]["home"].get("score")
|
||||
if sa is not None and sb is not None:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user