spb/lou-ka Public
Lou·Ka — tous les logements à louer du Québec, un seul endroit.
HTML 99.7%
1# progim — Gestion Immobilière Progim (plateforme Building Stack)2- site: https://progimannonces.bstk.io/Listing/Listings (fragments POST /Listing/ApartmentView)3- méthode: json-api (JSON `var units = […]` embarqué + fragments HTML structurés)4- annonces: 62 → 62 (65 unités à la source, 3 hors Grand Montréal exclues)5- couverture après (sur 62 annonces): prix 100%, adresse 100%, dispo 100%, superficie 66%, commodités 100%6- fixture: ok · test: ok78## Champs extraits9- JSON liste (déjà : prix, adresse, ville, lat/lng, chambres→unit_type, photos) ; **nouveaux champs structurés** :10 - `Apartment.Area` → **area_sqft** (0% → 66% ; null à la source pour les 21 restants),11 - `Apartment.NumberOfBathrooms` → amenity "1 salle de bain"/"2 salles de bains",12 - `ParkingsIsAvailable` / `StoragesIsAvailable` (booléens plateforme) → `details.parking.available` / `details.storage` (vrai ET faux),13 - `Building.ListingEmployeesContacts[0]` → `details.contact{phone,email}` (ex. 514-856-7781, mgaron@progim.com).14- 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.1516## Champs indisponibles à la source17- Date de disponibilité précise : la plateforme n'affiche que des unités disponibles, sans date ("Disponible" posé, jamais inventé de date).18- Animaux, superficie pour 21 unités (Area null), secteur/quartier.1920## Fragilités21- `var units = [...]` extrait par regex : un changement du bundle JS Building Stack casserait la découverte (mais la plateforme est stable et multi-clients).22- Fragments ApartmentView : classes `main-items`/`amentities` (sic) propres à Building Stack.23- Photos placeholder relatives (`/Content/Images/apartmenttypes/residential.svg`) désormais filtrées (causait des images non absolues).2425## Améliorations apportées26- **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).27- area_sqft, salles de bains, parking/rangement, contact, étage, furnished/inclusions/électros structurés (voir ci-dessus).28- 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).2930## Échantillon avant/après31- Avant : `812 Dawson — unité 7 | 1450 | 4½ | Disponible | area=None | details={"inclusions": {"heating": true, "hot_water": true}, "furnished": true}`32- 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}`33