# hazelview — Hazelview Properties (ex-Timbercreek) - site: https://www.hazelviewproperties.com/ (API RentSync/LiftSystem https://lift-api.rentsync.com/v2, client_id 497) - méthode: json-api + pages immeuble html (JSON embarqué) - annonces: 6 → 6 - couverture après (sur 6 annonces): prix 100%, adresse 100%, dispo 100%, superficie 83%, commodités 100% - fixture: ok · test: ok ## Champs extraits - API `/v2/search` (par ville QC × nombre de chambres) : nom, adresse + code postal, loyer min/max, stats superficie, nb d'unités dispo, description (overview), lat/lng, statut de disponibilité. - Nouveaux champs structurés de l'API : **pets** (`pet_friendly` bool → oui/non), **contact de location** (`contact.phone`/`email` par immeuble → `details.contact`, relais de tracking leadmanaging exclus), **area_sqft** (stats `square_feet.min` du type quand > 0). - Page immeuble du site (nouveau, via `self.detail` + cache BD, 1 requête par immeuble) — JSON complet embarqué dans `data-locations` du widget carte : - **commodités réelles** (liste `Amenities`, 30/immeuble : Air conditioner, Elevators, Laundry facilities, No smoking allowed… → inclusions/`smoking` dérivés par finalize) — avant : `details.features` de l'API, vide (amenities 0/6) ; - **galerie photos** (13-15 images par immeuble au lieu d'une seule) ; - **animaux détaillés** (`pets_small_dogs`/`pets_large_dogs`/`pets_cats`/`pets_not_allowed` → oui/non/**conditions** si certains types refusés) ; - **suites du type demandé** : superficie par unité (`sq_ft`, min des unités disponibles), date de disponibilité précise si toutes publiées, meublé si toutes les unités le sont. ## Champs indisponibles à la source - Superficie : 1 immeuble (1405 Bishop) ne publie aucun `sq_ft` (ni stats ni suites). - Dates précises : `availability_date` des suites presque toujours « 0000-00-00 » (= disponible maintenant) ; le libellé « Available Now » reste la source. - `Utilities` (inclusions) : null sur les immeubles QC actuels. ## Fragilités - Jeton public `auth_token` embarqué dans le JS du site : peut tourner. - Le portefeuille QC ne compte plus qu'une ville active (Montréal, 3 immeubles) — les autres villes du mapping (`Verdun`, `Longueuil`…) n'ont plus de propriétés actives. - Le JSON `data-locations` est un attribut HTML du widget carte : un refactor du site le déplacerait ; l'API `/v2` n'expose pas d'endpoint par propriété (404). - Contenu du site partiellement en anglais (amenities, « Available Now ») — normalize gère les deux langues. ## Améliorations apportées - Enrichissement par page immeuble avec **cache BD** (`self.detail`, clé = pid|dispo|adresse, mémo en mémoire pour ne fetcher qu'une fois par immeuble malgré plusieurs annonces par type d'unité) + budget 150 vraies requêtes. - Commodités 0/6 → 6/6 (30 items réels), images 1 → 13-15, pets 4/6 → 6/6 (dont « conditions » granulaire), contact par immeuble, superficie par suite (Tour Sherbrooke Studio : 670 → 350 pi², superficie réelle de l'unité disponible), `smoking` dérivé (« No smoking allowed »). ## Échantillon avant/après - Avant : « 1405 Bishop — Studio » — 1425 $, amenities [], 1 image, pets NULL, details {price_from}. - Après : même annonce — pets=conditions (petits chiens + chats oui, grands chiens non), 14 images, 30 amenities, contact 438-700-8567 / 1405bishop@hazelview.com, smoking=false, elevator/laundry dérivés. - Après : « 4545 Walkley — 5½ » — area_sqft 1200 (suite disponible), gym/balcony/storage/parking dérivés, contact complet.