Revert "[ka6] fix connecteur artisacreations.ca: garde-fou _domain_parked dans le connecteur Shopify (domaine expiré, parking GoDaddy). Cause racine vérifiée live le 2026-10-12: artisacreations.ca a expiré le 2026-10-07 (WHOIS statut autoRenewPeriod — renouvellement impayé, délai de grâce) et a basculé entre 03h et 09h (heure de Mtl) le 2026-10-12 sur le lander de parking GoDaddy (NS ns61/ns62.domaincontrol.com, mini-HTML « window.location.href=\"/lander\" » sur tous les chemins, lander avec marqueur ap:"parking") — la boutique Shopify servait encore 18 produits (= médiane) le matin même à 02h59. /products.json renvoie donc ce mini-HTML en 200 → JSONDecodeError en direct ET via Scrapfly (« scrapfly: Expecting value: line 1 column 1 ») → 4 échecs consécutifs, broken. Pas une migration: Google indexe encore l'ancien site, Instagram du marchand actif, aucun nouveau domaine ni handle myshopify trouvé (botikiperle/artisacreations/artisa-creations/art-isa-creations .myshopify.com → tous 404). Fix minimal calqué sur le garde-fou validé WooCommerceConnector._domain_parked (sartcastik.com, dd99f2b): ShopifyConnector._domain_parked() (mêmes marqueurs /lander, forsale.godaddy.com, afternic.com) + dans fetch(), sur échec de page sans produits accumulés, sonde de l'accueil → si parking, retour [] → ok/0 FIDÈLE (le domaine ne vend plus rien), les 18 produits en base sont préservés et se réactiveront au retour du domaine. Un non-JSON sans marqueur parking continue de lever l'erreur — aucun masquage. Sync réel 2026-10-12: artisacreations.ca ok / 0 produit; non-régression arthicetnunc.com ok / 24 produits (chemin Shopify nominal intact). pm2 restart fabri-ka-sync fait, web local 200. Si la propriétaire renouvelle le domaine (probable: délai de grâce GoDaddy ~45 j), le connecteur reprendra tout seul; ne pas toucher la fiche."
This reverts commit a11556526d688c30e835fbe1917c713d85d33807.
1 changed file +0 −23
modified
fabrika/connectors/shopify.py
+0 −23
@@ -110,25 +110,6 @@ class ShopifyConnector(BaseConnector): | |||||
| 110 | time.sleep(3 * (attempt + 1)) | 110 | time.sleep(3 * (attempt + 1)) | ||
| 111 | raise RuntimeError(f"{url}: scrapfly: {last_err}") | 111 | raise RuntimeError(f"{url}: scrapfly: {last_err}") | ||
| 112 | 112 | ||||
| 113 | − def _domain_parked(self) -> bool: | ||||
| 114 | − """Domaine parqué chez un revendeur : tout le site (accueil compris) | ||||
| 115 | − répond un mini-HTML qui redirige vers /lander, la page de parking | ||||
| 116 | − GoDaddy/Afternic — le Shopify a disparu avec le domaine (ex. | ||||
| 117 | − artisacreations.ca, expiré le 2026-10-07, basculé sur le lander | ||||
| 118 | − GoDaddy le 2026-10-12 alors que la boutique servait encore | ||||
| 119 | − 18 produits le matin même). Catalogue vide fidèle à la source, pas | ||||
| 120 | − une panne. Un non-JSON sans ce marqueur continue de lever l'erreur — | ||||
| 121 | − pas de masquage. Même garde-fou que WooCommerceConnector._domain_parked | ||||
| 122 | − (sartcastik.com).""" | ||||
| 123 | − try: | ||||
| 124 | − r = self.get(self.base + "/") | ||||
| 125 | − except Exception: | ||||
| 126 | − return False | ||||
| 127 | − body = r.text[:4096] | ||||
| 128 | − return ('window.location.href="/lander' in body | ||||
| 129 | − or "forsale.godaddy.com" in body | ||||
| 130 | − or "afternic.com" in body) | ||||
| 131 | − | ||||
| 132 | def fetch(self) -> list[Product]: | 113 | def fetch(self) -> list[Product]: | ||
| 133 | out: list[Product] = [] | 114 | out: list[Product] = [] | ||
| 134 | page = 1 | 115 | page = 1 | ||
@@ -141,10 +122,6 @@ class ShopifyConnector(BaseConnector): | |||||
| 141 | raise | 122 | raise | ||
| 142 | except _StorefrontLockedError: | 123 | except _StorefrontLockedError: | ||
| 143 | break | 124 | break | ||
| 144 | − except Exception: | ||||
| 145 | − if not out and self._domain_parked(): | ||||
| 146 | − return [] | ||||
| 147 | − raise | ||||
| 148 | items = data.get("products", []) | 125 | items = data.get("products", []) | ||
| 149 | if not items: | 126 | if not items: | ||
| 150 | break | 127 | break | ||
| 151 | 128 | ||||