Commit
[ka6] fix connecteur sartcastik.com: domaine mis en vente (parking Afternic/GoDaddy « lander ») → catalogue vide fidèle. Cause racine vérifiée live 2026-10-02: NS basculés vers ns3/ns4.afternic.com cette nuit (whois Updated 2026-10-02T02:55Z, expiry 2027 — geste volontaire du proprio, pas une expiration) alors que la boutique Woo servait encore 616 produits la veille (dernier ok 10-01 20:38). Tout le site répond 200 avec un mini-HTML window.location.href="/lander" qui mène à forsale.godaddy.com (confirmé mondial via Scrapfly); la Store API renvoie ce HTML → r.json() plante → « Expecting value » → broken (3 échecs). Aucun nouveau domaine (Serper: Google n'indexe que sartcastik.com; le marchand Sartcastik/Rock-Baby vendait aussi via Etsy/Facebook). Fix minimal woocommerce.py, même philosophie que _woo_uninstalled/_wix_domain_parked/_StorefrontLockedError: accueil avec marqueur lander/forsale.godaddy/afternic confirmé (_domain_parked) → return [] (0 fidèle, sync ok). Un non-JSON sans ce marqueur continue de lever l'erreur — pas de masquage. Sync réel 2026-10-02: sartcastik.com ok / 0 produit, les 616 produits en base préservés (removed=0, réactivation auto si le site revient); non-régression seatply.com ok / 91 produits (chemin Woo nominal intact). pm2 restart fabri-ka-sync fait, web local 200.
modified
fabrika/connectors/woocommerce.py
+19 −0
@@ -167,6 +167,23 @@ class WooCommerceConnector(BaseConnector): | ||
| 167 | 167 | return True |
| 168 | 168 | return "upstream 404" in str(exc) |
| 169 | 169 | |
| 170 | + def _domain_parked(self) -> bool: | |
| 171 | + """Domaine parqué chez un revendeur : tout le site (accueil compris) | |
| 172 | + répond un mini-HTML qui redirige vers /lander, la page « for sale » | |
| 173 | + Afternic/GoDaddy — le WordPress a disparu avec le domaine (ex. | |
| 174 | + sartcastik.com, NS basculés vers ns3/ns4.afternic.com le 2026-10-02 | |
| 175 | + alors que la boutique servait encore 616 produits la veille). | |
| 176 | + Catalogue vide fidèle à la source, pas une panne. Un non-JSON sans ce | |
| 177 | + marqueur continue de lever l'erreur — pas de masquage.""" | |
| 178 | + try: | |
| 179 | + r = self.get(self.base + "/") | |
| 180 | + except Exception: | |
| 181 | + return False | |
| 182 | + body = r.text[:4096] | |
| 183 | + return ('window.location.href="/lander' in body | |
| 184 | + or "forsale.godaddy.com" in body | |
| 185 | + or "afternic.com" in body) | |
| 186 | + | |
| 170 | 187 | def _woo_uninstalled(self) -> bool: |
| 171 | 188 | """WordPress vivant mais WooCommerce désinstallé : l'index REST /wp-json/ |
| 172 | 189 | répond (wp/v2 présent) sans plus aucun namespace wc* — la boutique a été |
@@ -394,6 +411,8 @@ class WooCommerceConnector(BaseConnector): | ||
| 394 | 411 | return slug_out |
| 395 | 412 | if self._is_404(first_page_exc) and self._woo_uninstalled(): |
| 396 | 413 | return [] |
| 414 | + if self._domain_parked(): | |
| 415 | + return [] | |
| 397 | 416 | raise first_page_exc |
| 398 | 417 | |
| 399 | 418 | if not out and first_page_exc is None: |
| 400 | 419 | |