Skip to content
- 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
- JSON liste (déjà : prix, adresse, ville, lat/lng, chambres→unit_type, photos) ; nouveaux champs structurés :
Apartment.Area → area_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}