SPB Git forge

spb/fabri-ka

Public

Agrégateur de produits québécois — www.fabri-ka.com

217commits 1branches 0releases
66.1 MBsize
maindefault branch
3 h agolast push
Python 38.4% HTML 30.3% TypeScript 17.2% CSS 11% JavaScript 3.2%

[ka6] fix connecteur maisondherbes.com: refonte du site WooCommerce→Next.js, fiche basculée woocommerce→generic + exclusion opt-in des doublons /en/. Cause racine (2026-09-18): le site a été entièrement refait en Next.js (Turbopack) — WordPress démonté, /wp-json/* répond 404 (vérifié via Scrapfly, l'accès direct est en plus derrière un challenge Cloudflare 403 « Just a moment »); la Store API /wp-json/wc/store/v1/products n'existe plus → 3 syncs en échec. Le nouveau site expose un sitemap.xml (150 produits fr sous /produit/ + 153 doublons anglais sous /en/produit/) et du JSON-LD schema.org Product complet (prix, images, sku, stock) sur chaque fiche → connecteur generic. Fix: (1) fiche stores.json: platform generic + catalog_endpoint __generic__ + skip_url_prefixes ["/en/"]; (2) generic.py/_sitemap_products: nouveau filtre skip_url_prefixes OPT-IN par fiche (jamais global: une 1re version globale « drop /en/ si des URLs racine existent » aurait purgé les boutiques generic à catalogue légitimement anglophone — pierresdailleurs.ca 771/771 produits actifs sous /en/, doucetlatendresse.com 230/232, le1603.com 107/135 — vérifié en base avant d'écrire le filtre). Sync réel 2026-09-18: maisondherbes.com 150 produits (médiane historique 118; les 118 anciennes fiches Woo à external_id numérique désactivées au profit des slugs). Non-régression: pierresdailleurs.ca 800 URLs sitemap dont 800 /en/ conservées, doucetlatendresse.com 232 dont 230 /en/ conservées (sans le flag, aucun filtrage). Web local 200.

Simon-Pierre Boucher committed 8 days ago (Sep 18, 2026) parent 55a2761

2 changed files +14 −3

modified data/stores.json +6 −3
@@ -91559,8 +91559,8 @@
91559 91559 "id": "maisondherbes.com",
91560 91560 "name": "Groupe La Feuille Verte",
91561 91561 "url": "https://maisondherbes.com",
91562 − "platform": "woocommerce",
91563 − "catalog_endpoint": "/wp-json/wc/store/v1/products",
91562 + "platform": "generic",
91563 + "catalog_endpoint": "__generic__",
91564 91564 "city": "",
91565 91565 "region": "Centre-du-Québec",
91566 91566 "postal_prefix": "J1Z",
@@ -91598,6 +91598,9 @@
91598 91598 "detail": "Certification Les Produits du Québec",
91599 91599 "source": "lesproduitsduquebec_ent"
91600 91600 }
91601 + ],
91602 + "skip_url_prefixes": [
91603 + "/en/"
91601 91604 ]
91602 91605 },
91603 91606 {
@@ -173762,4 +173765,4 @@
173762 173765 }
173763 173766 }
173764 173767 ]
173765 −}
173768 +}
\ No newline at end of file
modified fabrika/connectors/generic.py +8 −0
@@ -220,6 +220,14 @@ class GenericConnector(BaseConnector):
220 220 out.append(l)
221 221 if len(out) >= self.max_products * 2:
222 222 break
223 + # sites bilingues (ex. maisondherbes.com, refonte Next.js fr/en) : le
224 + # sitemap liste chaque produit en double sous un préfixe de langue
225 + # (/en/…). Exclusion OPT-IN par fiche registre (skip_url_prefixes),
226 + # jamais globale : d'autres boutiques génériques ont leur catalogue
227 + # légitimement sous /en/ (ex. pierresdailleurs.ca, 771 produits).
228 + skip = tuple(self.store.get("skip_url_prefixes") or [])
229 + if skip:
230 + out = [u for u in out if not urlparse(u).path.startswith(skip)]
223 231 # dédup en gardant l'ordre
224 232 return list(dict.fromkeys(out))[: self.max_products]
225 233
226 234