SPB Git

spb/lou-ka Public

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

HTML 99.7%
3.2 KB

# interrent — InterRent REIT (irent.com)

  • site: https://www.irent.com/communities/city/montreal (flux RSC Next.js, 1 requête)
  • méthode: json-api (JSON embarqué dans le flux self.__next_f.push)
  • annonces: 203 → 203
  • couverture après (sur 203 annonces): prix 100%, adresse 100%, dispo 100%, superficie 99%, commodités 100%
  • fixture: ok · test: ok

# Champs extraits

  • amenities : nœud structuré Amenities.Amenity (19+ items par communauté) — AVANT : le connecteur lisait amenities_TextField, champ inexistant → amenities=[] sur 100% des annonces (bug corrigé, ancien champ gardé en repli)
  • inclusions structurées : Utilities.Utility (Heat, Water, Hot Water, Hydro…) → details.inclusions{heating, hot_water, electricity, internet, cable} + item « Utilities included: … » dans les amenities
  • pets : indicateurs structurés PetFriendly / PetFriendlyCats|SmallDogs|LargeDogs / PetFriendlyNotAllowed → oui/conditions/non (203/203) + PetDetails en description
  • details.parking : champ ParkingDetails (« Indoor Parking: $150 / month ») → available/type/included/price (prix min), + texte en description
  • details.contact : ContactInformation (téléphone + courriel du bureau de location)
  • description : résolution des références texte RSC $NN → vraie description de l'immeuble (BuildingDescription), + promotion en cours (Promotions.Title), + description de la suite
  • area_sqft : maintenant explicite depuis SquareFeet (structuré) au lieu de dérivé du texte
  • déjà extraits : prix (Rate), type (Bedrooms), sdb, dispo (AvailabilityDate), adresse/quartier/GPS (Location), photos + plans d'étage

# Champs indisponibles à la source

  • 1 suite sans SquareFeet
  • furnished : non exposé
  • textes de la source en anglais (amenities, descriptions) — les règles de normalize.py sont bilingues pour l'essentiel

# Fragilités

  • Dépend du format RSC de Next.js (self.__next_f.push + références $NN:Txxx,) : un changement de framework/App Router casserait le parsing (couvert par la fixture)
  • Le filtre Grand Montréal repose sur la table _GM_CITIES : une nouvelle ville QC d'InterRent serait silencieusement ignorée (comportement voulu)
  • Les pseudo-suites « Promotional Price » sans numéro restent exclues ; celles AVEC numéro (ex. « app. XXX1 ») sont conservées telles quelles

# Améliorations apportées

  • Correction du bug amenities (champ inexistant) : 0% → 100%
  • pets structuré 0% → 100% (oui 154, conditions/non selon communauté)
  • inclusions/parking/contact structurés par communauté
  • description réelle de l'immeuble (références RSC résolues) + promotions
  • superficie explicite (SquareFeet)

# Échantillon avant/après

  • Trent & Kingsley Plan E AVANT : amenities=[], details={}, pets=None, desc=578 pi² — 1 sdb — plan 7460 Ch. Kingsley - Plan E
  • Trent & Kingsley Plan E APRÈS : 20 amenities (« Laundry facilities », …, « Utilities included: Heat, Water »), pets=oui, details={inclusions{heating}, parking{available, included:false, price:110}, contact{438-476-2316, rentsync-leads@rentclv.com}, elevator, balcony, laundry, storage}, desc=… + Promotion : Two Months Free* + description de l'immeuble + stationnement