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

History of fabrika/connectors/generic.py · clear filter

  1. Wed, Sep 23, 2026 1

  2. Fri, Sep 18, 2026 1

    1. [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 · 1 file +8
  3. Thu, Sep 10, 2026 1

  4. Fri, Aug 28, 2026 2

    1. Simon-Pierre Boucher committed 29 days ago · 1 file +1 −1
    2. feat(portée Canada): Fabri-Ka devient l'agrégateur des boutiques canadiennes, plus seulement québécoises.
      …
      - schema.py : REGIONS = 17 régions administratives QC (granularité historique conservée, données existantes intactes) + 12 provinces/territoires (Ontario, C.-B., Alberta, …) — les pages /region/<province>, facettes et sitemaps s'activent automatiquement dès qu'une boutique hors-Québec a des produits (une listing vide reste 404 anti soft-404, comportement voulu).
      - scripts/verify.py : signaux de localisation élargis au Canada — codes postaux A–Y (plus seulement G/H/J), indicatifs téléphoniques de toutes les provinces + territoires, « made in Canada / canadian made / fièrement canadien », mentions Canada/provinces, TLD .ca (présence canadienne exigée par la CIRA). Les champs gardent leurs noms historiques qc_* (compat cache + registry).
      - scripts/build_registry.py : garde-fou localisation désormais pan-canadien (ca_signal), région dérivée du code postal hors-Québec via première lettre → province (X0A/X0B/X0C = Nunavut, X* = TNO), ALL_REGIONS étendu.
      - Frontend + SEO : tous les textes « produits québécois / boutiques québécoises / Fabriqué au Québec (classes A–E) » → canadiens ; REGIONS_ALL dans api.ts (slugs provinces) ; fallbacks de localisation 'Québec' → 'Canada' ; manifest, tagline ecosystem.json, README. Noms propres préservés (certifications Aliments du Québec / Les Produits du Québec, régions Nord-du-Québec / Centre-du-Québec, taglines des autres apps Ka).
      - Connecteurs plateforme inchangés (ils ne filtrent pas par région : le registre stores.json décide) — les prochaines vagues de découverte peuvent maintenant admettre des sources pan-canadiennes.
      
      Vérifié : build Vite OK, pm2 restart fabri-ka-web + fabri-ka-sync, healthcheck 200 local + www.fabri-ka.com (titre « Tous les produits canadiens »), /api/products?region=Ontario répond, régions QC existantes intactes (/region/monteregie 200).
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 29 days ago · 1 file +1 −1
  5. Tue, Aug 25, 2026 1

    1. Major upgrade fabri-ka: connecteurs enrichis + refonte fiches produit/boutique
      …
      Backend — 6 connecteurs enrichis (details JSON par produit):
      - shopify: compare_at_price/image/requires_shipping par variante, sku, weight_grams, on_sale
      - woocommerce: on_sale, categories, variations + variants (attributs), fallback HTML enrichi (sku, notes, images, price_max)
      - wix: on_sale (V1 et V3) — fix 428 CATALOG_V1 intact
      - squarespace: parsing variantes réécrit (prix solde/barré, options agrégées, sku, stock par variante)
      - square: sku, review_count
      - generic (JSON-LD): brand, sku, gtin, aggregateRating, price_max, multi-images
      API /api/products: filtre on_sale=1 + tri discount, avec garde-fou rabais >90 % (prix barrés aberrants saisis en cents chez certains marchands, ex. okocreations.ca — 411 produits exclus)
      
      Frontend:
      - ProductDetail réécrit: lightbox plein écran (clavier, compteur), zoom, partage (Web Share/clipboard), étoiles de notation, badge −X %, notes de stock, options en chips, liste des déclinaisons (prix/barré/épuisé), fiche technique (SKU/GTIN/poids/dimensions), accordéons infos additionnelles, rail « Dans la catégorie »
      - StoreDetail: rail « En promotion », tri « Meilleures promos », stat prix moyen, réseaux sociaux étendus (TikTok/YouTube/Pinterest/LinkedIn/X + détection par domaine pour les socials en liste, ex. borealait.com qui n'affichait rien)
      - ProductCard: badge promo −X % + voile « Épuisé », prix barré masqué si aberrant
      - Icons: étoile, partage, chevrons, zoom, tiktok, youtube, pinterest, linkedin, X, globe
      - styles.css: ~400 lignes (badges, lightbox, variantes, specs, accordéons, rating)
      
      Validé: sync réel 6 boutiques (Shopify/Woo/Wix/Square/Generic) 0 erreur, test synthétique Squarespace OK, build tsc+vite OK, pm2 restart + healthchecks 8097 (promos assainies, fiches 200)
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +66 −13
  6. Tue, Aug 18, 2026 1

    1. Vague 2 : connecteur Square Online, re-sondage des boutiques, livraison, catégories
      …
      - connectors/square.py : API storefront publique Square Online
        (/app/store/api/v13, IDs user/site extraits du HTML) — 32 boutiques
        Square réactivées, ~2 700 produits gagnés. Ecwid documenté non
        couvert (client-only, API v3 = token secret).
      - scripts/reprobe_stores.py : re-sondage des boutiques enabled=0 /
        sans plateforme (Shopify/Woo/Wix/Squarespace/Square), MAJ
        stores.json + verify_cache + verified.jsonl + BD. 33 réactivées
        sur 400 sondées (32 square, 1 woocommerce).
      - scripts/enrich_shipping.py : colonne stores.shipping_info —
        politique de livraison (≤400 c.) extraite des pages usuelles,
        cache disque, throttle Shopify global 0,7 s. 271 boutiques.
      - schema.py : le classifieur exploite les options Shopify et
        attributs WooCommerce (details) + matériaux bijoux ;
        scripts/recategorize.py (backfill, 1 665 produits recatégorisés,
        jamais de rétrogradation vers autre) ; enrich_products.py aligné.
      - db.py : connect() tolérant aux verrous (retry), migration
        shipping_info, passage en WAL ; suppressions FTS par lots
        (uid UNINDEXED -> 1 balayage/lot de 500 au lieu de 1/produit,
        débloque les re-syncs massives).
      - README : 8 connecteurs, 294 266 produits, 1 298 boutiques.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +2 −1
  7. Wed, Aug 12, 2026 1

    1. 7e connecteur : générique (sitemap → JSON-LD/microdata/OG)
      …
      - Nouveau connecteur universel pour les plateformes à rendu serveur non
        couvertes : PrestaShop, Lightspeed, Snipcart, Magento, BigCommerce et sites
        custom — lit le sitemap, repère les pages produit, extrait le balisage
        schema.org Product / microdata itemprop=price / Open Graph product, avec
        Scrapfly en secours anti-bot
      - Détection (scripts/reprobe_generic.py) : 67 boutiques éligibles marquées
        __generic__ ; le connecteur a aspiré 9 409 produits depuis 59 d'entre elles
      - Prod : 291 031 produits / 1 263 boutiques / 17 régions
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +233