# 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