#!/usr/bin/env python3 # ----------------------------------------------------------------------------- # Immo-Ka — régénère data/via_capitale_agencies.json en sondant les domaines # des sous-agences Via Capitale (plateforme source.immo). Étend facilement la # couverture : ajoute des bannières/domaines à CANDIDATES et relance. # Usage : .venv/bin/python scripts/refresh_via_capitale.py # ----------------------------------------------------------------------------- from __future__ import annotations import json import re import urllib.request from pathlib import Path UA = {"User-Agent": "Mozilla/5.0 Chrome/126"} CFG = "/wp-content/uploads/_sourceimmo/_configs.json" OUT = Path(__file__).resolve().parent.parent / "data" / "via_capitale_agencies.json" # Domaines connus + bannières à tester (viacapitale.{immo,com,ca}). KNOWN_DOMAINS = [ "viacapitaleelite.immo", "viacapitaleselect.com", "viacapitaledumontroyal.com", "viacapitaleacces.com", "viacapitalepartenaires.com", ] BANNERS = [ "elite", "select", "dumontroyal", "acces", "horizon", "diamant", "expertise", "cite", "vendu", "action", "distinction", "premium", "platine", "signature", "prestige", "excellence", "sommet", "boreal", "alliance", "synergie", "expert", "optima", "concept", "capitale", "3000", "2000", "or", "plus", "inter", ] TLDS = [".immo", ".com", ".ca"] def fetch_cfg(domain: str) -> dict | None: for host in (domain, f"www.{domain}"): try: b = urllib.request.urlopen( urllib.request.Request(f"https://{host}{CFG}", headers=UA), timeout=12 ).read().decode("utf-8", "ignore") d = json.loads(b) if d.get("account_id") and d.get("api_key") and d.get("default_view"): return {"domain": host, "cfg": d} except Exception: continue return None def main() -> None: domains = set(KNOWN_DOMAINS) for b in BANNERS: for t in TLDS: domains.add(f"viacapitale{b}{t}") reg, seen = [], set() for dom in sorted(domains): r = fetch_cfg(dom) if not r or r["domain"] in seen: continue seen.add(r["domain"]) d = r["cfg"] banner = re.sub(r"^www\.viacapitale|\.(immo|com|ca)$", "", r["domain"]) reg.append({ "banner": banner, "domain": r["domain"], "account": d["account_id"], "api": d["api_key"], "app": d["app_id"], "view": d["default_view"], }) print(f"OK {banner:16} {r['domain']}") OUT.write_text(json.dumps(reg, ensure_ascii=False, indent=1), encoding="utf-8") print(f"→ {len(reg)} sous-agences écrites dans {OUT}") if __name__ == "__main__": main()