SPB Git

spb/lou-ka Public

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

HTML 99.7%
3.4 KB

# progim — Gestion Immobilière Progim (plateforme Building Stack)

  • site: https://progimannonces.bstk.io/Listing/Listings (fragments POST /Listing/ApartmentView)
  • méthode: json-api (JSON var units = […] embarqué + fragments HTML structurés)
  • annonces: 62 → 62 (65 unités à la source, 3 hors Grand Montréal exclues)
  • couverture après (sur 62 annonces): prix 100%, adresse 100%, dispo 100%, superficie 66%, commodités 100%
  • fixture: ok · test: ok

# Champs extraits

  • JSON liste (déjà : prix, adresse, ville, lat/lng, chambres→unit_type, photos) ; nouveaux champs structurés :
    • Apartment.Areaarea_sqft (0% → 66% ; null à la source pour les 21 restants),
    • Apartment.NumberOfBathrooms → amenity "1 salle de bain"/"2 salles de bains",
    • ParkingsIsAvailable / StoragesIsAvailable (booléens plateforme) → details.parking.available / details.storage (vrai ET faux),
    • Building.ListingEmployeesContacts[0]details.contact{phone,email} (ex. 514-856-7781, mgaron@progim.com).
  • Fragment ApartmentView : équipements par clés structurées label for= (HeatingIncluded, HotWaterIncluded, ElectricityIncluded, Furnished, Fridge, Stove, Dishwasher…) → inclusions/appliances/furnished explicites (Oui et Non), étage ("Étage" du tableau Général) → details.floor, superficie de secours ("Superficie (pi.ca)"), photos, description (div.unit-notes, plus fiable que l'ancienne heuristique find_next), libellés français affichables en amenities.

# Champs indisponibles à la source

  • Date de disponibilité précise : la plateforme n'affiche que des unités disponibles, sans date ("Disponible" posé, jamais inventé de date).
  • Animaux, superficie pour 21 unités (Area null), secteur/quartier.

# Fragilités

  • var units = [...] extrait par regex : un changement du bundle JS Building Stack casserait la découverte (mais la plateforme est stable et multi-clients).
  • Fragments ApartmentView : classes main-items/amentities (sic) propres à Building Stack.
  • Photos placeholder relatives (/Content/Images/apartmenttypes/residential.svg) désormais filtrées (causait des images non absolues).

# Améliorations apportées

  • Migration des fiches vers self.detail(...) (demandé) : le POST ApartmentView n'est refait que si l'unité JSON de la liste a changé (clé = sha1 du blob JSON de l'unité). Sync sans changement : ~55 s → ~1 s ; plafond max_details=120 vrais POST/sync (compteur dans fetch_fn, hits de cache non comptés). La fixture enregistre bien les POST (63 requêtes, rejeu ok).
  • area_sqft, salles de bains, parking/rangement, contact, étage, furnished/inclusions/électros structurés (voir ci-dessus).
  • Parsing du fragment par paires titre/valeur et attributs for= au lieu de regex "… Oui$" (les valeurs "Non" sont maintenant captées comme faux structurés au lieu d'être perdues).

# Échantillon avant/après

  • Avant : 812 Dawson — unité 7 | 1450 | 4½ | Disponible | area=None | details={"inclusions": {"heating": true, "hot_water": true}, "furnished": true}
  • Après : 812 Dawson — unité 7 | 1450 | 4½ | Disponible | area=737 | details={"inclusions": {"heating": true, "hot_water": true}, "appliances": {"fridge": true, "stove": true}, "furnished": true, "parking": {"available": false}, "storage": false, "contact": {"phone": "514-856-7781", "email": "mgaron@progim.com"}, "floor": 1}