SPB Git forge

spb/food-ka

Public

Food-Ka — agrégateur de produits d'épicerie du Québec — www.food-ka.com

55commits 1branches 0releases
10.2 MBsize
maindefault branch
10 days agolast push
Python 53.9% TypeScript 24% CSS 14.9% JavaScript 5.8% HTML 1.4%

History of foodka/connectors/_flipp.py · clear filter

  1. Tue, Aug 18, 2026 3

    1. Vague 3 : SAQ (API GraphQL directe) + 6 circulaires Flipp (4 pharmacies, Adonis, Avril) + Metro 4 pages allees prioritaires
      …
      - saq : connecteur Adobe Live Search (catalog-service.adobe.io, cle publique
        du storefront) — 3 282 produits prioritaires/sync (vin/spiritueux/mousseux
        plafonnes, petites categories entieres), prix final+regulier, format ml,
        pays, cepages, pastille de gout, code SAQ, dispo en ligne, images ;
        22 requetes directes, zero Scrapfly. Categorie canonique « Alcool »
        (ajoutee a normalize.CATEGORIES), exclue du matching inter-bannieres
        (matching.EXCLUDED_SOURCES — banniere unique, prix provinciaux uniformes).
      - Flipp : pharmaprix (2170), jean_coutu (2521), brunet (3753), uniprix (3467)
        — keep_categories=GROCERY_CATEGORIES ne garde que les rayons alimentaires
        des cahiers de pharmacie (filtre AVANT la fiche item : zero requete pour
        les items ecartes) ; adonis_flyer (3384) et avril_flyer (3940) completent
        les catalogues adonis/avril. Testes : 127/44/65/25/389/87 produits.
      - _flipp : desambiguisation « eau de parfum/toilette/javel », « creme
        adhesive/corps » (les cahiers pharmacie exposaient ces faux Boissons /
        Produits laitiers).
      - metro : pages_override — 4 pages (au lieu de 2) sur fruits-et-legumes,
        viandes-et-volailles, produits-laitiers-et-oeufs ; 664 -> 1 005 produits.
        Cout mesure 40-80 credits Scrapfly/page (ASP sans render_js).
      - Sondes documentees : Costco (recherche montee cote client, API Lucidworks
        403 sans cle JS — render_js reste la seule voie) ; Dollarama absent de
        Flipp. sources.json : 54 -> 61 entrees ; docs regeneres.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +25 −1
    2. Vague 2 : circulaires grandes bannières + comparateur inter-bannières + nutrition OFF
      …
      1. Connecteurs Flipp des grandes bannières (API backflipp publique, 0 crédit
         Scrapfly) : iga_flyer (merchant 4592), metro_flyer (2269, filtre Quebec),
         superc_flyer (2585), maxi_flyer (2349), provigo_flyer (2338),
         walmart_flyer (234, filtre Circulaire), costco_flyer (2596, Grocery).
         Flyers provinciaux verifies sur H2X 1Y4 et G1R 4P5 (memes flyer_id).
         _flipp : tri des flyers par valid_from (la semaine courante gagne sur les
         slugs dupliques semaine courante/a venir).
      
      2. foodka/matching.py : rapprochement inter-bannieres — table product_links
         (group_id, uid) reconstruite apres chaque cycle. Cle marque+nom nettoye+
         format, matching conservateur (marque obligatoire, similarite nom >= 0,86
         avec format identique / 0,95 sans format, jetons numeriques strictement
         egaux — lait 2 % jamais fusionne avec 3,25 %). Une source *_flyer = meme
         banniere que son catalogue. Endpoint GET /api/products/{uid}/compare +
         compteurs matching/nutrition dans /api/stats.
      
      3. foodka/nutrition.py : enrichissement Open Food Facts (voila.ca PDP derriere
         Incapsula et Shopify sans code-barres public -> croisement OFF par
         marque+nom+format, conservateur). search.openfoodfacts.org (le vieux
         cgi/search.pl repond 503) + /api/v2/product/{code} pour les ingredients.
         Nutriscore/NOVA/ecoscore/allergenes/nutriments dans details.off, budget
         100 recherches/cycle, throttle 6 s, cache off_cache (jamais re-cherche).
      
      db.py : tables product_links + off_cache. ingest.py : hooks post-cycle
      matching + nutrition (jamais bloquants). sources.json : 54 sources.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +5
    3. Enrichissement connecteurs + robustesse DB (audit 2026-08-18)
      …
      - pa_nature : merchant Flipp 3343 disparu -> merchant 3287 (Supermarche PA)
        + filtre flyer_name_filter sur le « Nature Flyer » (60 produits retrouvés)
      - Flipp : fiche /flipp/items/{id} via le cache détail (1 appel/item/semaine) ->
        details.fine_print (description, +tx, disclaimer), discount_pct généralisé
        (percent_off), dollars_off, regular_price depuis original_price
      - Shopify : details.variants (<=15, multi-formats), created_at/updated_at,
        body_html tronqué à 1500 car., unit_price via grams de variante,
        max_pages 8 -> 24 (pa/nuvo/epipresto/boite_a_grains étaient tronqués à 2000)
      - WooCommerce Store API : brand depuis la taxonomie brands, details
        (average_rating, review_count, weight, dimensions, attributes,
        low_stock_remaining, variation_count), unit_price via formatted_weight,
        max_pages 8 -> 32 (aliments_merci tronqué à 800 ; catalogue réel 2765) ;
        akhavan : mêmes details + plafond 4 -> 12 (688 produits)
      - db.connect() : WAL + busy_timeout 15 s ; base.get() : retry x3 sur
        ConnectionError/ChunkedEncodingError (parité auto-ka)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +71 −4
  2. Sun, Aug 16, 2026 1

    1. Connecteurs Flipp : socle + 19 bannières de circulaires (~2 760 produits)
      …
      Socle _flipp.py : API publique backflipp.wishabi.com (résolution hebdo du
      flyer_id, filtrage merchant_id côté client, catégorisation par mots du nom,
      external_id stable marque+nom+format pour l'historique price_log).
      
      Vague 1 — bannières sans e-commerce (Metro/Sobeys affiliés) : richelieu,
      marche_ami, bonichoix, tradition, rachelle_bery (réactivée, 2 flyers).
      Vague 2 — balayage de l'index Flipp (12 codes postaux, 156 marchands) :
      inter_marche (+intl), axep, pasquier, kim_phat (réactivé), marche_ct,
      fu_tai, aures, euro_marche, val_mont, bonanza, marche_vegetarien,
      pa_nature, aliments_mm. postal_code par connecteur (visibilité régionale).
      
      Tests : fixtures calquées des vraies réponses API (mapping, dédup, garde-fous
      prix, frontières de mots du classifieur).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +180