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
4 h agolast push
Python 38.4% HTML 30.3% TypeScript 17.2% CSS 11% JavaScript 3.2%

[ka6] fix connecteur colorantic.com: l'hébergeur bloque désormais le chemin /wp-json/ (404 serveur, même via Scrapfly) alors que la Store API Woo reste servie via la forme ?rest_route= — ajout d'un fallback rest_route dans le connecteur woocommerce (liste paginée + fiches unitaires du fallback sitemap). Sync réel: 241 produits / 0 erreur (= médiane historique 241); non-régression vérifiée sur cabanedupicbois.com (4 produits, inchangé)

Simon-Pierre Boucher committed 28 days ago (Aug 29, 2026) parent 23ec513

1 changed file +27 −5

modified fabrika/connectors/woocommerce.py +27 −5
@@ -16,6 +16,18 @@ from .base import BaseConnector
16 16 class WooCommerceConnector(BaseConnector):
17 17 platform = "woocommerce"
18 18
19 + # Certains hébergeurs bloquent le chemin /wp-json/ (404 serveur) alors que
20 + # l'API REST reste servie via la forme ?rest_route= (ex. colorantic.com).
21 + _use_rest_route = False
22 +
23 + def _store_api_url(self, path: str, query: str = "") -> str:
24 + """URL Store API : /wp-json/wc/store/v1/<path> ou ?rest_route= en secours."""
25 + if self._use_rest_route:
26 + sep = "&" if query else ""
27 + return f"{self.base}/?rest_route=/wc/store/v1/{path}{sep}{query}"
28 + sep = "?" if query else ""
29 + return f"{self.base}/wp-json/wc/store/v1/{path}{sep}{query}"
30 +
19 31 def _get_items(self, url: str):
20 32 """JSON direct, sinon Scrapfly (Cloudflare & cie) en dernier recours."""
21 33 try:
@@ -271,7 +283,7 @@ class WooCommerceConnector(BaseConnector):
271 283 out: list[Product] = []
272 284 for slug in slugs:
273 285 try:
274 − it = self._get_items(f"{self.base}/wp-json/wc/store/v1/products/{slug}")
286 + it = self._get_items(self._store_api_url(f"products/{slug}"))
275 287 if isinstance(it, dict) and it.get("id"):
276 288 out.append(self._parse_item(it))
277 289 except Exception:
@@ -284,11 +296,21 @@ class WooCommerceConnector(BaseConnector):
284 296 first_page_exc: Exception | None = None
285 297 while page <= self.max_pages:
286 298 try:
287 − items = self._get_items(f"{self.base}/wp-json/wc/store/v1/products?per_page=100&page={page}")
299 + items = self._get_items(self._store_api_url("products", f"per_page=100&page={page}"))
288 300 except Exception as exc:
289 − if page == 1:
290 − first_page_exc = exc
291 − break
301 + if page == 1 and not self._use_rest_route:
302 + # chemin /wp-json/ bloqué par l'hébergeur ? retenter via ?rest_route=
303 + self._use_rest_route = True
304 + try:
305 + items = self._get_items(self._store_api_url("products", f"per_page=100&page={page}"))
306 + except Exception:
307 + self._use_rest_route = False
308 + first_page_exc = exc
309 + break
310 + else:
311 + if page == 1:
312 + first_page_exc = exc
313 + break
292 314 if not isinstance(items, list) or not items:
293 315 break
294 316 for it in items:
295 317