parse_cached_srvlist.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """Parse cached serverlist: decode the abbreviated serverData fields and find
  2. the TCP gateway (host/port) for the 玖扬复古176 servers.
  3. """
  4. import json
  5. import sys
  6. from pathlib import Path
  7. if hasattr(sys.stdout, "reconfigure"):
  8. sys.stdout.reconfigure(encoding="utf-8", errors="replace")
  9. SRVLIST = Path(r"D:\ProgramFiles\996box\GameBoxDownload\1\cq\cache_206923\ResServerlist.txt_206923")
  10. def main() -> int:
  11. data = json.loads(SRVLIST.read_text(encoding="utf-8"))
  12. servers = data["serverData"]
  13. groups = {g["tag"]: g["name"] for g in data["serverGroup"]}
  14. print("=== First 2 servers (all fields) ===")
  15. for s in servers[:2]:
  16. print(json.dumps(s, ensure_ascii=False, indent=2))
  17. print()
  18. print("=== Field value patterns (servers 3-6) ===")
  19. for s in servers[2:6]:
  20. print({k: (str(v)[:70]) for k, v in s.items()})
  21. print()
  22. # Find 玖扬 group
  23. jiuyang_tags = [t for t, n in groups.items() if "玖扬" in str(n) or "复古" in str(n)]
  24. print(f"jiuyang group tags: {jiuyang_tags} -> {[groups.get(t) for t in jiuyang_tags]}")
  25. print()
  26. print("=== Servers in 玖扬复古176 group (first 5) ===")
  27. count = 0
  28. for s in servers:
  29. if s.get("g") in jiuyang_tags:
  30. print(json.dumps(s, ensure_ascii=False))
  31. count += 1
  32. if count >= 5:
  33. break
  34. print(f"(total shown: {count})")
  35. print()
  36. print("=== User's server (s contains 14414738) ===")
  37. for s in servers:
  38. if "14414738" in str(s.get("s", "")) or "14414738" in str(s.get("d", "")):
  39. print(json.dumps(s, ensure_ascii=False, indent=2))
  40. break
  41. return 0
  42. if __name__ == "__main__":
  43. sys.exit(main())