SPB Git

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

History of data/sources.json Clear filter
page 1
  1. Tue, Oct 27, 2026 1

    1. [ka2] fix connecteur summum: migration du portail — Building Stack (location.summumpm.com) → Eversa (rental.summumpm.com). Au sync de 15:36 le connecteur rapportait found=0 « ok » (dérive détectée, retraits suspendus) : location.summumpm.com redirige désormais TOUT en 302 vers app.buildingstack.com (le portail jumeau edifialocation.com, lui, répond encore — c'est bien Summum qui a migré, lien « rental.summumpm.com/listings/list » sur summumpm.com). Le nouveau portail est une app Eversa (React Router « turbo-stream »), exactement le gabarit de gestion_cem : réécriture sur le patron gestion_cem.py (dont on importe _decode/_num/_unit_type) — /fr/listings/list.data (45 cartes immeuble) puis /fr/listings/<slug>/details.data par immeuble (units[] listed=true, via cache BD detail, clé = prix/dispo/compteur de la carte ; la fiche LÈVE si `listing` absent pour ne jamais empoisonner le cache). external_id = slug-uuid de l'UNITÉ (granularité inchangée, mais ids nécessairement neufs : les ApartmentId Building Stack n'existent plus → 75 ajouts, les 40 anciens partent en miss_count). Nouveautés : secteur (quartier, 56/75), pi² bornés 80-20000 (le portail publie des area=0/1 bidons), images Supabase préfixées BASE. Volume : le nouveau portail publie plus d'inventaire → 75 unités vs ~40 (Montréal 69, Blainville 2, Granby 2, Saint-Calixte 1, Longueuil 1 ; 695-2 589 $, 100 % prix/images, GPS 70/75). robots.txt : Crawl-delay 10 → request_delay = 10 s (patron halfred). Garde-fous : erreur franche si payload sans `listings` ou si cartes présentes mais 0 parsée. sources.json : URLs migrées vers rental.summumpm.com, secteurs mis à jour. Fixture ré-enregistrée (46 requêtes, 75 annonces), pytest summum 2 passed. Testé : fetch() venv → 75 unités, run.py sync summum → found=75 ok (added=75, removed=0, missed=40, 2,4 s) vs médiane 40, pm2 restart lou-ka-sync, site :8095 → 200.
      Simon-Pierre Boucher · 1 file +3 −3
  2. Mon, Oct 26, 2026 2

    1. [ka2] fix connecteur logispro_mauricie: refonte du site — thème Elementor « adncommunication », migration sur l'API REST WP. Au sync de 12:18 le connecteur rapportait found=0 « ok » (dérive détectée, retraits suspendus) : logispro.ca a été entièrement refait — /appartements-a-louer/ (cartes div.apartments-item que l'ancien parseur lisait) redirige 301 vers /locations/, nouveau gabarit Elementor sans aucun des anciens sélecteurs. Réécriture complète sur l'API REST WordPress : les logements sont des posts CPT « location » (/wp-json/wp/v2/location, ACF exposé) — prix numérique + prix promo (le plus bas affiché, ex. « 1495 $ / mois (promo, prix régulier 1725 $) »), adresse géocodée + GPS (100 %), chambres/salles de bain/superficie/étage, galerie d'IDs médias résolus via /wp-json/wp/v2/media (requête groupée, avec cache BD detail invalidé par la date `modified` du post — et qui LÈVE sur hoquet HTTP pour ne jamais empoisonner le cache avec une galerie vide), taxonomies disponibilité/ville-secteur/dimension/caractéristiques/stationnement/proximité. external_id = slug (inchangé comme schéma : 10 des 12 anciennes annonces ont matché → updated=10, zéro churn inutile). Volume : le nouveau site publie TOUT l'inventaire à louer (dispo immédiate ET à venir) → ~69 unités vs ~12 avant la refonte (5 villes : Trois-Rivières 38, Bécancour 14, Shawinigan 11, Grandes-Piles 4, Nicolet 2). Garde-fous : échec franc si la requête page 1 échoue (pas de faux zéro) et si des posts existent mais 0 parsé (structure ACF changée). sources.json : listing_url migrée vers /locations/, secteurs mis à jour. Fixture enregistrée (75 requêtes, 69 annonces), pytest logispro_mauricie 2 passed. Testé : fetch() venv → 69 unités (775-1 745 $, 100 % prix/images/GPS, 31 promos), run.py sync logispro_mauricie → found=69 ok (added=59, updated=10, removed=0, 8,3 s) vs médiane 12, pm2 restart lou-ka-sync, site :8095 → 200.
      …
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
    2. [ka2] fix connecteur immogex: refonte du site — GoDaddy Website Builder → site statique Netlify (www.immogex.com). Au sync de 11:55 le connecteur rapportait found=0 « ok » (zéro silencieux) : immogex.com a été entièrement refait (assets versionnés v=20261026h, déployé le jour même) — l'ancienne page /%C3%A0-louer redirige vers www.immogex.com/a-louer.html, nouveau gabarit SSR sans aucun bloc ABOUT_* (data-aid) que l'ancien parseur lisait. Réécriture : la liste /a-louer expose les logements en cartes <li class=annonce> (titre, adresse, prix, dispo, photo) pointant vers de vraies pages détail /logements/<slug> (nouveauté : galerie complète, immeuble en surtitre, <dl> de faits Disponibilité/Grandeur/Étage/Adresse, description, inclusions) — parsing liste + détail via self.detail() (cache BD, clé = hash titre|adresse|prix|dispo de la carte). external_id = slug de la page détail, PAR UNITÉ — l'ancien schéma nom+civique fusionnait les unités d'un même immeuble (« 4955-4955 » couvrait les logements 14 et 17 du 4955 Fugère) → les 2 anciens ids sont de vrais retraits remplacés par 3 ids granulaires. Garde-fous : ul.annonces introuvable = erreur franche (gabarit changé) ; cartes affichées mais 0 parsée = erreur franche ; ul présent et vide = vrai zéro. Bonus : amenities, étage et immeuble (details), galeries 5-7 photos (vs 1 avant). sources.json : URLs migrées vers www.immogex.com. Fixture ré-enregistrée (4 requêtes, 3 annonces), pytest immogex 2 passed. Testé : fetch() venv → 3 unités (3½, 955-1 355 $, 100 % prix/adresse/dispo/images/inclusions), run.py sync immogex → found=3 ok (added=3, removed=2, 2,8 s) vs médiane 1.0 et dernier bon sync à 2, pm2 restart lou-ka-sync, site :8095 → 200.
      Simon-Pierre Boucher · 1 file +2 −2
  3. Sun, Oct 11, 2026 1

    1. Simon-Pierre Boucher · 1 file +1 −1
  4. Thu, Oct 8, 2026 1

    1. retrait: connecteur Ubee supprimé et 466 inscriptions effacées (plainte de Ubee, 2026-10-08)
      …
      - louka/connectors/ubee.py + docs/connecteurs/ubee.md supprimés, ligne INDEX retirée
      - data/sources.json : ubee → retiré (ne pas réactiver sans accord écrit)
      - louka/web.py : les statuts inactif/retiré sont aussi déclarés disabled_sources à api-ka
      - base : listings (466), price_log (505), fairvalue (375), listing_events (319),
        recycled_cache (77), managers (1), sync_log (372), image_checks (12 701 URL
        Cloudinary ubee-media) effacés ; dédup inter-sources recalculée
      - sauvegarde à froid hors dépôt : ~/ubee-retrait-20261008/
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +1 −1
  5. Wed, Sep 9, 2026 1

    1. [ka2] fix connecteur groupe_theoret: réécriture pour la refonte du site (GoDaddy Website Builder → GoDaddy Airo, ~2026-09-09) — le widget « menu » n'existe plus. Le sync de 15:40 a rapporté found=0 ok=1 (médiane 23, retraits suspendus) : reproduit en live, l'URL accentuée /appartements-%C3%A0-louer redirige 301 vers /appartements-a-louer et la nouvelle page (React Router, 88 Ko) ne contient plus aucun marqueur data-aid MENU_SECTION_*. Le nouveau site embarque TOUT le catalogue dans le payload d'hydratation window.__staticRouterHydrationData (données créées le 2026-09-01, unités ajoutées encore aujourd'hui) : 40 immeubles avec adresse + ville + code postal + slug /proprietes/<slug> + services + photos (/airo-assets/images/<slotKey>, vérifiées 200 image/jpeg) + contact, et par unité DISPONIBLE un id stable, le type, le loyer et la date de dispo ISO. Nouveau fetch() : une seule requête (plus de pages immeuble ni de cache détail), extraction du littéral JS par regex tolérante aux guillemets échappés puis double json.loads, external_id=u<id> (clé BD du site), RuntimeError si le payload est absent ou sans immeuble (une page saine embarque toujours les ~40 immeubles même à 0 dispo — même pattern que c3r/brio). Gain net vs l'ancien site : photos 25/25 (avant 0 %), inclusions 25/25, contact 24/25, code postal systématique. Testé : run.py sync groupe_theoret → found=25 ok (médiane 23, added=25 — nouveaux ids, les 23 anciennes annonces seront dépubliées par les retraits), fixtures ré-enregistrées (record → 1 requête, 25 annonces ; pytest 2 passed), pm2 restart lou-ka-sync, site :8095 → 200. sources.json : listing_url → /appartements-a-louer.
      …
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +1 −1
  6. Tue, Sep 8, 2026 1

    1. [ka2] fix connecteur c3r: réécriture pour la refonte du site (Wix → Astro, 2026-09-08) — l'API wix-data n'existe plus. Le sync de 12:32 a rapporté found=0 ok=1 (médiane 8, retraits suspendus) : reproduit en live, les collections Wix Import1/Import2 renvoient 404 WDE0025 « collection does not exist » et les anciennes URLs d'unités (/terrasses-st-maurice/…) répondent 302 → /logements. Gestion C3R a lancé aujourd'hui (sitemap lastmod 2026-09-08) un nouveau site statique Astro servi par Express : catalogue /logements?page=N paginé côté serveur (5 pages, 73 unités, 4 projets — Chemin du Lac, Terrasses St-Maurice, Rue des Tournesols, Maisons St-Bo), chaque unité en <article data-rental-unit> avec data-city/project/bedrooms/price/status + type, adresse, sdb, superficie, photo. Nouveau fetch() : pagination avec dédup par slug (au-delà de la dernière page le serveur re-sert la même page), décodage UTF-8 forcé (pas de charset dans les en-têtes → requests décodait « Loué » en « Loué »), filtre statut Disponible conservé, RuntimeError si 0 carte parsée (garde contre rendu partiel/structure changée, même pattern que brio/le_fjord). Testé : parsing 73/73 unités (prix 73, adresses 73, sdb 73, superficie 73, photos 65), found=0 en prod — VRAI zéro : les 73 unités du nouveau site sont toutes « Loué », y compris les 8 qui étaient « Disponible » ce matin sur l'ancien CMS. Le garde-fou lèvera la suspension des retraits après le 3e sync à 0 (DRIFT_HISTORY=5) et les 8 annonces périmées seront dépubliées naturellement. pm2 restart lou-ka-sync, site :8095 → 200. sources.json : listing_url → /logements, + Shawinigan.
      …
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2 −2
  7. Fri, Sep 4, 2026 1

  8. Thu, Aug 27, 2026 4

    1. pause(ontario): expansion ON suspendue temporairement — rien d'effacé
      …
      - .env : LOUKA_ONTARIO=1 commenté (les 56 connecteurs gatés sortent du registre)
      - sources.json : 65 sources ON -> status pause + note_pause
      - quality.evaluate : quarantaine pause-ontario (published=0) pour province=ON
        tant que le flag n'est pas reposé ; province ajoutée au backfill et à
        l'évaluation à l'ingestion (db.py)
      - docs/ONTARIO-PAUSE.md : quoi/pourquoi/comment réactiver
      
      5 851 annonces ON conservées en base, dépubliées. QC intact (62 412 publiées).
      Simon-Pierre Boucher · 1 file +196 −131
    2. feat(ontario): vague 2 — 45 nouvelles sources ON (+2 964 annonces, ~5 800 ON au total)
      …
      7 rsgw_* (passerelle website-gateway : sterlingkaramar, drewlo, fitzrovia,
      bgo, panoramic, drakepm, arcanos), 12 lift_*, 5 rc_*, 11 bld_* (Buildium),
      1 apf_* (AppFolio), 9 sur mesure (starlight, medallion, kggroup,
      qresidential, riocan, sifton, accommod8u, greenrock, westdale).
      Anti-doublons : exclude_import_ids (Greenrock via sterlingkaramar) +
      sterlingkaramar.com dans _SKIP_DOMAINS de starlight. sources.json : 503
      entrées, champ connector harmonisé. Tout gaté LOUKA_ONTARIO=1.
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +468 −18
    3. feat(ontario): activation — les 20 sources ON passent à « actif » dans sources.json
      …
      LOUKA_ONTARIO=1 posé dans le .env de prod (non versionné). Première
      synchronisation faite : 2 828 annonces ON en base (2 624 publiées) sur
      30 sources — Toronto 685, London 219, Ottawa 214, Hamilton 154, Sarnia 117,
      Kitchener 117… Villes ON exposées automatiquement par /api/facets.
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +20 −20
    4. feat(ontario): 20 nouveaux connecteurs ON + socle province, tout gaté LOUKA_ONTARIO=1 (zéro impact prod QC)
      …
      Socle : Listing.province + bbox coordonnées ON (schema.py), migration
      province TEXT DEFAULT 'QC' (db.py), géocodage ON via Nominatim sans repli
      Adresses Québec (geocode.py), townhouse/bungalow résidentiels (quality.py).
      
      Nouveaux connecteurs (disabled hors gate) : liftsystem.py (13 clients
      dynamiques lift_* via data/liftsystem_clients.json — Greenwin, Park,
      Williams & McDaniel, Briarlane, DMS, Signet, Shelter, York, Terracorp,
      RentSarnia, First North, TVM, Urbandale ; 922 propriétés résidentielles),
      rentcafe.py (4 clients rc_* via data/rentcafe_clients.json — Effort Trust,
      Osgoode ON, GWLRA, O'Shanter ; Scrapfly ASP), homestead.py + skyline.py
      (passerelle publique website-gateway.rentsync.com), killam.py (blob
      #available_prop RentCafe).
      
      Connecteurs QC élargis sous gate (uids QC vérifiés identiques hors gate) :
      capreit +189, boardwalk +74, minto +81, hazelview +14, interrent +83,
      morguard +258, akelius +95, metcap +60, realstar +12, cogir +38,
      centurion +52 annonces ON potentielles.
      
      sources.json : +19 entrées ON (status inactif) + skyline recyclé.
      Registre : 365 connecteurs sans gate (inchangé), 385 avec LOUKA_ONTARIO=1.
      Potentiel à l'activation : ~1 200-1 600 annonces ON (~30 sources).
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +196 −6
  9. Tue, Aug 25, 2026 1

    1. Campagne connecteurs province 2026-08-24 : 149 nouveaux connecteurs (+3 685 annonces)
      …
      Création massive issue de la recherche province (reports/expansion/
      recherche-province-2026-08-24.md), en 17 lots parallèles :
      - 149 connecteurs actifs (Building Stack, RentCafe/Yardi, Rentsync/
        LiftSystem, Planpoint, Livya, silo.immo, Webflow, Wix SSR, WordPress
        admin-ajax/wp-json/SSR, PDF+pdfplumber, OCR tesseract, Google Sheets CSV)
      - helpers partagés _planpoint.py et _livya.py
      - 9 sources documentées non connectables (doublons Cogir, vitrines sans
        inventaire, OMHQ annuaire, Skyline 0 propriété QC)
      - registre data/sources.json : 281 → 439 sources
      - fix groupe_mathieu : découverte via /condos-locatifs/ (le méga-menu Jet
        n'est servi que par certaines variantes de cache Elementor)
      - pdfplumber ajouté aux dépendances ; doc régénérée (367 fiches)
      
      Syncs initiaux : 3 685 annonces ajoutées.
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +1,580
  10. Sat, Aug 22, 2026 2

    1. apartments_com : acteur Apify maison ka-apartments-com (toute la province via Bright Data) + enrichissement PDP fb_marketplace
      …
      - nouvel acteur actors/ka-apartments-com : recherche /qc/ paginée (arrêt sur
        retombée page 1 via <title>), fiches détail en français (GPS, description,
        plans d'unités dédoublonnés, commodités, galerie), déblocage Akamai délégué
        au Web Unlocker Bright Data (curl_cffi/Scrapfly/Oxylabs → 403)
      - connecteur louka/connectors/apartments_com.py : 1 annonce = 1 propriété,
        prix « à partir de » (minimum des plans), bedrooms/bathrooms = minimum,
        cache détail 30 j, cadence LOUKA_APTS_INTERVAL_H (12 h) avec ré-émission
        des actives entre deux runs — 615 propriétés QC au premier passage
      - fb_marketplace : acteur 0.1.3 (adresse civique, beds/sdb, commodités,
        disponibilité, walk/transit/bike scores, visite virtuelle) + PAYLOAD_VERSION
        pour re-visiter progressivement le cache, filtre hors-Québec state+bbox GPS
      - sources.json : apartments_com passe de « non connectable » à actif
      - docs connecteurs régénérées (218 fiches)
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +4 −4
    2. fb_marketplace : acteur Apify maison ka-fb-marketplace (33 villes, tout le Québec)
      …
      Remplace la chaîne Scrapfly par un acteur Apify maison (curl_cffi sans rendu
      JS, proxy Oxylabs résidentiel CA via proxyUrlTemplate) : recherche 116 URLs
      (10 grandes villes × 7 tranches de prix + 23 régions par ID Marketplace),
      fiches détail (GPS, description, statut) et galerie complète via le
      MediaViewer préchargé. Filtre hors-Québec à deux niveaux : state du
      reverse_geocode dès la recherche + filet bbox GPS côté connecteur (FB glisse
      des suggestions d'autres provinces dans le flux public). Coût ~100× moindre.
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +1 −1
  11. Tue, Aug 18, 2026 3

    1. Vague 3 : connecteurs Zumper (API directe), Atimco (Livya), Simplex (Supabase)
      …
      - zumper : API JSON interne en DIRECT (bundle CSRF -> pages/listables par bbox
        -> fiches /buildings avec cache BD cle modified_on), 8 bbox QC, filtre
        state=QC ; 4 345 annonces au premier sync (2 391 absorbees par la dedup =
        +1 954 nettes). PadMapper = meme API (ids 100/100 identiques) : couvert.
      - _livya : base commune des gestionnaires servis par Livya (ex-RealVuu),
        patron generalise du connecteur thrace (flux RSC des pages plans).
      - atimco : ~18 projets Monteregie (Longueuil, St-Constant, St-Hyacinthe,
        Chambly, Chateauguay, St-Jean, Sorel, Cowansville) — 299 unites disponibles,
        prix/GPS/chambres/sdb complets, 0 doublon.
      - simplex : catalogue Supabase public (RPC get_public_rental_listings_page),
        Trois-Rivieres/Shawinigan — 3 annonces actives (28 publiees en rotation).
      - sources.json : +6 entrees (zumper, atimco, simplex actifs ; padmapper
        couvert via zumper ; apartments.com non connectable — 403 CoStar ;
        cloria non connectable — inventaire Livya complet mais 0 prix publie).
      - docs/connecteurs regeneres (217 fiches).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +61 −1
    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 +21 −1
    3. Connecteurs : rivero/trudel suspendus (RealVuu mort), groupe_dallaire via proxy Scrapfly, disjoncteur ingest, capreit/logisquebec/royal_lepage enrichis
      …
      - rivero + trudel : app.realvuu.com hors-ligne depuis 2026-08-10 (DNS NXDOMAIN)
        -> flag disabled=True (exclus du registre auto), statut sources.json mis a
        jour, 244 annonces zombies archivees (active=0, aucune suppression)
      - ingest : disjoncteur leger — une source en echec aux 5 derniers passages
        est sautee (log sync_log "disjoncteur: ..."), retentee 1 passage sur 5
      - groupe_dallaire : le pare-feu bloque l IP du serveur (timeout TCP sur tout
        le domaine) -> timeout direct 8 s puis repli proxy Scrapfly (simple, puis
        escalade ASP residentiel apres 422 WAF) pour admin-ajax et fiches ;
        teste : 255/256 unites retrouvees en ~5 min
      - capreit : area_sqft (colonne pi2 de la fiche) et availability_date
        (earliest_date du flux) mappes directement — 117/117 vs 107/117 avant
      - logisquebec : details canoniques postal_code / contact.phone / rooms
        (JSON-LD) ; superficie : verifie, aucune source structuree sur la fiche
      - royal_lepage : enrichissement fiche detail (description "Remarques",
        superficie habitable, agence) avec cache detail2 + cap 100/cycle
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +3 −3
  12. Mon, Aug 17, 2026 1

    1. Nouvelles sources + déduplication inter-sources
      …
      8 connecteurs (208 → 212), testés en live :
      - logisquebec — portail (~9 800 fiches) : sitemaps + JSON-LD, expiration HTTP 410
      - duproprio — location par particuliers (~4 200, 0 % chevauchement) : sitemaps gz + JSON-LD, retrait = 302
      - louer_ca — réseau Rentals.ca (~1 700) : API GraphQL interne (JWT), 1 annonce par plan d'étage
      - roomies — chambres/colocation : JSON-LD Room
      - groupe_maurice — 37 résidences pour aînés (RPA) : API REST + grilles de prix
      - bons_locataires — agence Montréal : carte MapListPro + fiches WordPress
      - omhm — logements abordables ENHARMONIE
      - fb_marketplace — Scrapfly ASP, pagination par tranches de prix (scroll bloqué hors login)
      
      Déduplication inter-sources (louka/dedup.py) :
      - colonnes dup_of / dup_sources (migration db.py), recalcul idempotent dans ingest.watch() après géocodage
      - blocage par clé d'adresse (civique + rue normalisée FR/EN + ville), confirmation type + prix ±4 %
      - contrainte « ≤1 annonce par source par groupe » (évite de fusionner des unités distinctes d'un immeuble)
      - canonique = source la plus autoritaire (gestionnaire direct > portail > petites annonces)
      - web.py n'affiche que les annonces canoniques (dup_of IS NULL) ; dup_sources exposé pour le badge « aussi publiée sur »
      - résultat : 147 groupes, 154 doublons masqués sur 18 536 annonces
      
      Utilitaire _detailutil.TtlDetailCache : cache de pages détail avec TTL + budget par sync.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +81 −1
  13. Wed, Aug 12, 2026 1

    1. Portails & courtiers en location — 10 connecteurs portés d'Immo-Ka (Kijiji, LesPAC, RE/MAX, Sutton, Royal LePage, Via Capitale, Proprio Direct, Ubee, Barnes, M Immobilier)
      …
      - base.py : backends Scrapfly (scrapfly/get_scrapfly) + post() portés d'Immo-Ka
      - _detailutil.py : helper partagé d'enrichissement fiche détail (cache BD, budget par sync) adapté au schéma Listing
      - Kijiji c37 apparts/condos + c36 chambres/coloc (Apollo __NEXT_DATA__, QC l9001)
      - LesPAC b457 logements + b458 coloc + b460 aînés (searchResponse, ancre Montréal = province entière triée par distance)
      - RE/MAX Québec : index Meilisearch public shardé par RTA, slugs -a-louer seulement
      - Sutton : sitemap inscriptions typeInscription=2 (= locations)
      - Royal LePage : recherche transactionType=LEASE (formulaire caché), 28 villes d'ancrage
      - Via Capitale : criteresJson AVendre:false via Firecrawl (Cloudflare)
      - Proprio Direct : API searchListings filter rentOrSale:rent, volet résidentiel
      - Ubee : API SearchProperties listingType Renter (askPrice = loyer mensuel)
      - Barnes : Algolia facette type:rental (property_rent) ; M Immobilier : CODE_STATUT=AL
      - sources.json : 255 → 265 (10 nouvelles sources « Province »/Montréal)
      - Écartés après vérification live (pas de location résidentielle) : DuProprio, Profusion, Engel & Völkers, KW Prestige/Distinction/Urbain, Expert PM, Sotheby's
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +100
  14. Sun, Aug 9, 2026 3

    1. Simon-Pierre Boucher · 1 file +231 −1
    2. Expansion P3 — Outaouais (5 connecteurs +41 annonces, 10 non-connectables)
      …
      wandji (API /api/buildings découverte, 29) · gio (crawl-delay 3 respecté) ·
      immnasr · quanta · leviu (portail Magex). Registre fusionné.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +1,175 −1
    3. 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 +260
  15. Sat, Aug 8, 2026 2

    1. Mission 3 (suite) — 13 nouveaux connecteurs Québec/Lévis (+747 annonces)
      …
      somex_saintnicolas (145) · quartier_sila (200) · edifia (184 : Le Vital,
      Capella, Cardinal N/S) · aula (69) · girescom (38) · mercini (35) ·
      quartier_mosaique (24) · la_cour (20) · louis14 (18, prix réels via widget
      Livya jamais affichés sur leur site) · immeubles_guillot (7) · sig (4
      résidences étudiantes UL) · promenade_des_forts (2) · centurion (Quartier QB,
      684 unités — 'No Vacancy' actuellement, se peuplera automatiquement).
      
      Découverte transverse : 4 sites (Somex, Sila, Louis XIV, Le Vital) utilisent
      le module Livya (ex-RealVuu) dont le flux RSC Next.js rendu serveur expose
      l'inventaire JSON complet. La Cour + AULA partagent le parseur do-selecteur
      (REST wp-json), déjà éprouvé chez Immostar.
      
      Registre : 88 sources, 82 connecteurs. 191 tests verts.
      Couverture GPS : 95,6 % global · 97,5 % des annonces avec adresse.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +134
    2. 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 +10
  16. Thu, Aug 6, 2026 1

    1. Lou-Ka — agrégateur de logements à louer (Québec, Lévis, Grand Montréal)
      …
      Plateforme complète : 68 connecteurs de gestionnaires immobiliers, schéma
      standardisé avec détection de changements (hash), API FastAPI, frontend
      React/Vite PWA (design éditorial sharp, thème clair), déployée sur
      www.lou-ka.com avec resynchronisation horaire.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +745
Menu

Theme