v0.5.84: matches origin filter, mobile gate, refresh reliability.

Ship Web refresh cache/lock, mobile demand gate, matches 职业/国服 filter, and related site updates through 0.5.84.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
voson
2026-07-29 18:31:55 +08:00
co-authored by Cursor
parent 7681fdb069
commit b01552ee6e
50 changed files with 3406 additions and 487 deletions
+7 -7
View File
@@ -21,10 +21,9 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
import argparse
import json
from datetime import datetime, timezone
from shared.http_utils import http_json
from shared.http_utils import http_json, write_json_atomic
from shared.paths import DATA
OUT = DATA / "leaderboards.json"
@@ -67,6 +66,11 @@ def fetch_division(division: str) -> dict:
lb = raw.get("leaderboard")
if not isinstance(lb, list):
raise SystemExit(f"{division}: missing leaderboard array")
if len(lb) < TOP_N:
raise SystemExit(
f"{division}: leaderboard only returned {len(lb)} rows; "
"keeping previous cache"
)
top = [slim_entry(e) for e in lb[:TOP_N] if isinstance(e, dict)]
return {
"division": division,
@@ -102,11 +106,7 @@ def main() -> None:
regions[div] = fetch_division(div)
payload = build_payload(regions)
args.out.parent.mkdir(parents=True, exist_ok=True)
args.out.write_text(
json.dumps(payload, ensure_ascii=False, indent=2) + "\n",
encoding="utf-8",
)
write_json_atomic(args.out, payload)
parts = [
f"{div}={len((regions[div].get('top100') or []))}" for div in REGION_ORDER
]