Python 67%
TypeScript 18.2%
CSS 14.4%
1# -----------------------------------------------------------------------------2# Immo-Ka — Agrégateur de maisons à vendre (province de Québec)3# Auteur : Simon-Pierre Boucher — contact@spboucher.ai4# mortgage/providers/mcap.py : MCAP — distribution 100 % courtiers, aucune5# table publique de taux par terme (vérifié 2026-08). Seul signal public :6# le taux préférentiel MCAP (+ date d'effet). Collecté comme référence,7# exclu du comparateur de prêteurs (rate_type="other", purpose="unknown").8# -----------------------------------------------------------------------------9from __future__ import annotations1011import re1213from .base import RateProvider141516class McapProvider(RateProvider):17 provider_id = "mcap"18 institution = "MCAP"19 source_url = ("https://www.mcap.com/residential-mortgages/advice/"20 "mortgage-rates-canada")21 request_delay = 1.02223 def fetch(self) -> list[dict]:24 return self.parse(self.get(self.source_url).text)2526 def parse(self, payload: str) -> list[dict]:27 m = re.search(28 r'prime-rate-module.*?round-number-box[^>]*>\s*([\d.]+)\s*%',29 payload, re.S)30 if not m:31 return []32 prime = float(m.group(1))33 dm = re.search(r'Effective\s+([A-Z][a-z]+ \d{1,2},? \d{4})', payload)34 conditions = ("Taux préférentiel MCAP"35 + (f" — en vigueur le {dm.group(1)}" if dm else ""))36 return [self.make_product(37 rate=prime, rate_type="other", term_months=12, kind="posted",38 product_name="Taux préférentiel MCAP", purpose="unknown",39 conditions=conditions,40 raw={"prime": prime, "effective": dm.group(1) if dm else None})]41