SPB Git

spb/lou-ka Public

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

HTML 99.7%
3.5 KB

# immeubles_dcl — Les Immeubles DCL

  • site: https://www.lesimmeublesdcl.com/logements-a-louer
  • méthode: API JSON interne (FleetCart/Laravel) — pas de rendu JS nécessaire
  • annonces: 9 (Rouyn-Noranda ×2, Val-d'Or ×1, Malartic ×6 — le rapport d'expansion classait ce site « JS-rendu / Playwright » : l'API interne a été rétro-ingéniée à la place)
  • couverture (sur 9 annonces): prix 100%, adresse 100% (avec code postal), ville 100%, GPS 100%, type 100% (catégorie n ½), disponibilité 89%, animaux 100%, meublé 100%, pièces/chambres/commodités/inclusions 100%, images 100% (galeries 6–13), description 100%
  • fixture: ok · test: ok

# Champs extraits

  • Le site est un FleetCart (catalogue e-commerce Laravel + Vue.js, agence Stylla-web, médias sur S3) : la grille /logements-a-louer est vide côté serveur et remplie par axios.post(route("products.index")). Le connecteur reproduit l'appel : GET /logements-a-louer (cookie de session Laravel + csrfToken lu dans window.FleetCart), puis POST /logements-a-louer (X-CSRF-TOKEN, X-Requested-With) avec {query, fromPrice, toPrice, perPage:50, page, attribute, sort} → JSON products.data paginé (last_page).
  • Chaque produit est entièrement structuré : address, city, zip, lat_lng (GPS réels, validés par finalize()), selling_price (montant numérique) + formatted_price (libellé, espaces fines nettoyées), catégorie « 1 ½ »/« 3 ½ »/« 4 ½ » → unit_type, attributs FleetCart : Disponibilité (« Janvier 2026 »…) → availability, Animauxpets (aucun → non ; chats/chiens acceptés → conditions), Ameublementfurnished, Pièces/Chambres/Salle de bain/Commodités/Commodités de l'immeuble/Inclusions/Secteursamenities/sector.
  • Fiche détail /logements-a-louer/<slug> (via self.detail + cache BD, budget 25) : description libre (bloc « Description ») et galerie complète (liens a.popup-img vers S3 ; la liste n'expose qu'une image de couverture).
  • external_id = id numérique du produit FleetCart — stable.

# Périmètre (exclusions volontaires)

  • Les logements loués vivent dans un catalogue séparé (page « Logements loués ») : jamais retournés par products.index de /logements-a-louer — bon signal de fraîcheur.

# Champs indisponibles à la source

  • Superficie : champ surface_area toujours 0 (non renseigné par l'agence) — ignoré.
  • Prix « spéciaux » (mécanique e-commerce) : non utilisés (special_price null partout).

# Fragilités

  • Le POST exige le jeton CSRF assorti au cookie de session du GET initial (session requests partagée) : si le site ajoute un délai d'expiration agressif, refaire le GET. Au rejeu de fixture, le jeton du HTML capturé rend le POST identique (le corps JSON est déterministe).
  • Données saisies à la main par l'agence : coquilles (« Prospecreurs », slug « rue-des-rubis » pour « rue des Prospecteurs »), attribut Animaux parfois contradictoire (« Chats acceptés » + « Non ») — le connecteur tranche prudemment vers non.
  • Si FleetCart est mis à jour (v4.0.7 aujourd'hui), la forme du payload peut évoluer ; le garde-fou max_pages=10 borne la pagination.

# Notes

  • Villes réelles observées : Rouyn-Noranda (Monseigneur Rhéaume Est, Perreault Est), Val-d'Or (3e Avenue), Malartic (rue des Prospecteurs — immeuble neuf, volet abordable).
  • robots.txt ouvert (Disallow: vide) ; politesse 0,6 s (GET et POST) ; 11 requêtes par sync au volume actuel.