SPB Git

Repository Public

History of louka/normalize.py Clear filter
Page 1
  1. Tue, Aug 18, 20262 commits

    1. Qualité des données + solidité mobile + framework de juste valeur (fair value)
      ···
      Mission 1 — enrichissement des connecteurs et qualité :
      - quality.py : score de complétude 0-100 + seuil de publication (quarantaine
        des annonces sans prix plausible / localisation / contenu exploitable)
      - imgcheck.py : audit des images (liens morts 404/410, minuscules, placeholders
        multi-adresses, doublons) -> galeries nettoyées images_ok, cache image_checks,
        politesse 3 requêtes/hôte, écriture hors transaction réseau
      - 26 connecteurs enrichis (galeries complètes, descriptions, prix, adresses) :
        kangalou, royal_lepage, medway, remax_quebec, groupe_maurice, mellem, sutton,
        lespac, heafey, kijiji, fb_marketplace, zumper, equinoxe_batimo, logis_experts,
        quartier_sila, msi, summum, quartier_plus, urban_services, cosoltec, garic,
        lakle, matinale, huma, jutras, groupe_theoret, ferrovia
      - normalize : clean_city/clean_sector (rues et entités HTML retirées des menus),
        kijiji : adresses françaises « 89, rue X » correctement découpées
      - geocode : virgule après le n° civique corrigée (lot AQ), base en WAL
      - dedup : une annonce en quarantaine ne masque jamais un doublon publié
      
      Mission 2 — mobile :
      - /api/img : miniatures WebP servies à la taille de l écran (cache disque)
      - SmartImg : miniature -> original -> visuel de secours Lou-Ka (jamais d icône cassée)
      - lightbox tactile : balayage scroll-snap + pincement + double-tape
      - bannière témoins : ne recouvre plus le bouton Filtres (--consent-h)
      - cibles tactiles >= 44 px (pointer: coarse) ; KA Agent plein écran à l ouverture
      - stats : complétude moyenne, quarantaine par source
      
      Mission 3 — juste valeur locative (fairvalue.py, fv-logement-1.0) :
      - 3 niveaux : segments médians (repli en échelle) + coefficients de
        caractéristiques appris et centrés + comparables kNN géographiques (médiane
        pondérée) ; couloir de sécurité, fourchette, indice de confiance
      - prudence : pas de verdict si confiance faible, prix « à partir de »,
        prix non mensuel, écart hors plausible ; chambres/coloc = segment dédié
      - pastilles sous/dans/au-dessus du marché (cartes + fiche), bloc Analyse de
        prix avec histogramme, filtre « Sous le marché » + tri, page /juste-valeur
      - API : champs fv_* + deal/sort, /api/fairvalue/{uid} ; stats + PDF ;
        historisation fv_segments ; tests synthétiques ; docs/FAIRVALUE*.md
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher 1 file +43
    2. Vague 2 : colonnes bedrooms/bathrooms, perf fb_marketplace/logisquebec, connecteurs Kangalou + Rentals.ca, visites virtuelles
      ···
      - Schéma : colonnes bedrooms/bathrooms REAL (additives) dérivées dans
        finalize() — details explicites > type d'unité (n½ -> n-2, convention QC)
        > extraction texte ; backfill one-shot : 96,7 % bedrooms / 51 % bathrooms
        sur le parc actif.
      - fb_marketplace : recherche et détails Scrapfly EN PARALLÈLE (6 fils,
        mêmes requêtes, aucun volume perdu), TTL détail 10 -> 30 j, annonces
        louées filtrées avant enrichissement : 43-47 min -> 7,3 min/cycle.
      - logisquebec : budget détail 1200 -> 400 (dimensionné TTL 7 j / ~10
        passes/j), fiches jamais vues servies en premier, délai 0,7 -> 0,5 s :
        19 min -> 7,6 min/cycle, parc complet (6 393 fiches).
      - Kangalou (nouveau) : découverte en 1 requête via les pins de la carte
        (/fr/recherche/ajax/search-map/, loués/commerciaux exclus), fiches SSR
        (adresse, chambres/SDB, GPS, galerie, dispo, superficie) : 7 916 annonces.
      - Rentals.ca (nouveau) : même GraphQL que Louer.ca mais inventaire ~+15 %,
        rejoué via Scrapfly ASP sans rendu JS (Cloudflare), détails PAR LOTS de
        40 via nodes(ids), villes/volumes plafonnés : 3 452 annonces (les
        recoupements Louer.ca sont résorbés par la dédup, déjà dans PORTALS).
      - Visites virtuelles : details.virtual_tour — tours{} Matterport/YouTube
        du réseau Rentals.ca (louer_ca clé cache v2 + rentals_ca) + détection
        générique Matterport/iGUIDE/Klapty dans les fiches logisquebec,
        duproprio, kangalou. 1 107 annonces actives en ont déjà une.
      - TtlDetailCache : peek()/put() pour la planification de lots parallèles.
      - sources.json : +kangalou, +rentals_ca (275 sources, 212 connecteurs).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher 1 file +79
  2. Sun, Aug 9, 20261 commit

    1. Expansion provinciale P1 : 26 nouveaux connecteurs + 8 extensions (+1 358 annonces)
      ···
      Lot 0 extensions : girescom +Beauce, msi +Thetford, utile +Trois-Rivières/
      Rimouski, cogir/realstar/centurion/plan_a +Gatineau/Sherbrooke.
      Lot 1 plateformes maîtrisées : thrace (Livya, 181), lr_gestion (Rentsync),
      urban_services + immobilia (Building Stack).
      Lot 2 Est & Nord : immeubles_bc (Rimouski), tri_logis (Rouyn), devcore
      (Sept-Îles/Outaouais), multi_logis (Côte-Nord+Lévis), courtemanche (Saguenay).
      Lot 3 Estrie : lachance (82), gesteco (API Umbraco), savouet, laureat_richard,
      desroches. Lot 4 Mauricie/CdQ : location_di, cap_gestion (122), capital_rdr,
      gestion_tb, summum (93). Lot 5 Outaouais/Ch-App : halfred (165), heafey (245),
      brigil (Firecrawl), mellem, quartier_oree, le_st_georges, place_florimay.
      
      Enrichissement complet appliqué : géocodage provincial (+616), POI 1 756
      immeubles, quartier 1 088 annonces jointes (0 hors-zone), normalize corrigé
      (frontières de mots des mois). Registre : 114 sources, 108 connecteurs,
      ~7 350 annonces. Secrets tiers caviardés des fixtures (jetons Mapbox +
      caviardage automatique à l'enregistrement).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher 1 file +4 −2
  3. Sat, Aug 8, 20267 commits

    1. Mission 1b (lot 8) — logisbourg, logisco, logisma, lokalia, lynk_olymbec
      ···
      - lokalia : +12 annonces (variantes « + DEN » dédupliquées à tort), GPS 100 %
      - logisco : adresse complète JSON-LD, superficie/étage structurés, 4 sections
        de commodités, pages unité en cache
      - lynk_olymbec : valeurs semi-inventées supprimées, prix/dispo réels RentCafe
      - normalize.py : non-chauffé avec trait d'union, branchements combinés,
        « refusés sauf un chat » -> conditions, « (sans utilisation) » neutralisé,
        fourchettes « de X $ à Y $ » = prix plancher
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher 1 file +11 −7
    2. Mission 1b (lot 5) — gestipro, gimcote, gparadis, groupe_dallaire, hazelview
      ···
      - groupe_dallaire : superficie 49 % -> 100 %, inclusions réelles par unité,
        fiches en cache (180 requêtes/sync évitées)
      - gestipro : GPS 100 %, animaux 92 %, inclusions depuis « Frais et charge »
      - gimcote : description/animaux/meublé 100 %, GPS 100 %
      - gparadis : +1 immeuble Saint-Roch (regex pluriels)
      - normalize.py : « à la charge des locataires » -> non inclus,
        « actuellement vacant » -> disponible maintenant
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher 1 file +7 −4
    3. Mission 1b (lot 6) — headway, huma, immomarketing, immostar, interrent
      ···
      - interrent : bug amenities (champ inexistant) corrigé, animaux 0 -> 203
      - immostar : commodités 0 -> 100 % sur les 6 micro-sites, superficie 100 %
      - huma : dates de dispo réelles par unité, adresses et GPS par phase
      - immomarketing : GPS 100 %, cache detail, animaux 53/82
      - normalize.py : animal au singulier, promos neutralisées, prix stationnement
        complet (formats 150 $ et $85)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher 1 file +16 −7
    4. Mission 1b (lots 4,7,9-13) + mission 2 — 37 connecteurs mis à niveau, Logis-Experts activé
      ···
      Nouveau connecteur logis_experts (logis-experts.com, API JSON) : 516 annonces,
      188 immeubles, prix/adresse/code postal/secteur/lat-lng à 100 %, superficie et
      commodités via pages détail en cache.
      
      Faits saillants de l'audit :
      - lakle : +20 unités (phases 2-3 ignorées), superficie terrasse->habitable
      - dma_locago : +11 unités Tour Frontenac, correction des disponibilités
      - equinoxe_batimo : adresses 0 % -> 100 % (602 annonces)
      - sgiq : lat/lng 88 %, animaux 100 %, sync 83 s -> 4 s
      - msi/picard/progim/capreit… : pages détail migrées vers le cache BD
      - utile : statut hero corrigé (2 annonces faussement « Complet »)
      - per : « Animaux permis : Non » inversé corrigé
      
      normalize.py : ~20 nouveaux cas génériques remontés par les agents (dates
      anglaises mois-jour, animaux singulier/poids/interdits, aires communes,
      piscine/stationnement « chauffé », balcon négatif, vélo, « ($) », semi-meublé,
      superficies balcon/terrasse ignorées, milliers avec virgule, hydro/heat/terrace
      anglais, nombres en toutes lettres) — chaque cas couvert par un test.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher 1 file +92 −25
    5. Mission 1b (lot 1) — akelius, app_urbains, axia, beaudoin, boardwalk, bribourg
      ···
      - akelius : JSON détail découvert (pets 221/247, meublé, inclusions, photos HD)
      - boardwalk : superficie 100 %, dispo réelle, sync 210 s -> 54 s (cache detail)
      - beaudoin : commodités 100 % (additional_features), superficie 67 %
      - app_urbains : superficie 100 %, adresse Le Charlie corrigée
      - normalize.py : « chiens et chats acceptés » -> oui (priorité sur conditions)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher 1 file +7 −1
    6. Mission 1b (lots 2-3) — audit et mise à niveau de 10 connecteurs + correctifs normalisation
      ···
      Connecteurs : brio, brivia_1sp, brochu, capreit, cogir, contraste, copley,
      cromwell, denux, devimco — fixtures + tests + rapports d'audit.
      
      Faits saillants :
      - cogir : collision d'uid corrigée (283 annonces au lieu de 270), annonces
        fantômes « liste d'attente » exclues
      - capreit : lat/lng 100 %, fiches derrière cache detail (sync 75 s -> 0,4 s)
      - devimco : adresses 84 % -> 100 %, superficie structurée
      - contraste : commodités 0 % -> 100 %, faux « 0 $/mois » supprimés
      - brivia_1sp : API AJAX des plans découverte (dispo réelle, superficies)
      
      normalize.py : négations chauffage/éclairage, « chiens non permis » -> pets
      conditions, options payantes neutralisées (optionnel/en sus), stationnement
      mixte int+ext, étage restreint aux commodités, refrigerator/cooling anglais.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher 1 file +31 −10
    7. Mission 1a — couche commune : schéma enrichi, normalisation centrale, robustesse, tests
      ···
      - schema.Listing : availability_date (ISO/now), area_sqft, pets, furnished,
        details (JSON structuré) + finalize() appliqué à toutes les sources
      - normalize.py : dates FR/EN → ISO, superficies pi²/m², prix robuste,
        types d'unité (chambres→½, 6½+, MDV…), commodités → tags canoniques,
        stationnement/animaux/fumeur/contact extraits du texte
      - db.py : migration auto, délai de grâce (2 syncs) avant désactivation,
        détection de dérive (volume + taux de prix null) avec retraits suspendus,
        cache des pages détail, cache de géocodage (préparé pour la carte)
      - fixtures.py + run.py record : enregistrement/rejeu des réponses HTTP,
        tests de régression pytest par connecteur (snapshot + validité schéma)
      - web.py : nouveaux filtres pets/furnished/available_by/area_min
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher 1 file +421
Menu

Theme