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/tangerine.py : Tangerine — JSON statique publié5# (currentRates.json, le fichier que charge leur page /rates). Un seul taux6# par terme (pas de distinction affiché/spécial chez Tangerine) : kind7# "special" car c'est leur taux client réel.8# -----------------------------------------------------------------------------9from __future__ import annotations1011import json1213from .base import RateProvider, parse_rate1415RATES_URL = ("https://www.tangerine.ca/content/dam/tangerine-shared/"16 "product-rates/currentRates.json")171819class TangerineProvider(RateProvider):20 provider_id = "tangerine"21 institution = "Tangerine"22 source_url = "https://www.tangerine.ca/en/rates"23 request_delay = 1.02425 def fetch(self) -> list[dict]:26 return self.parse(self.get(RATES_URL).text)2728 def parse(self, payload: str) -> list[dict]:29 data = json.loads(payload)30 out: list[dict] = []31 for r in data.get("rates") or []:32 if r.get("group") != "mortgage":33 continue34 code = r.get("max_product_code")35 rate = r.get("interest_rate")36 term_years = r.get("term")37 if not isinstance(rate, (int, float)) or rate <= 0:38 continue39 if not isinstance(term_years, (int, float)) or term_years <= 0:40 continue41 if code == "Mortgage":42 rtype, label = "fixed", f"Fixe {int(term_years)} an(s)"43 elif code == "VarMortgage":44 rtype, label = "variable", f"Variable {int(term_years)} an(s)"45 else:46 continue # preferred_* et autres : clients connectés, ignorés47 apr = parse_rate(r.get("apr_value_en") or "")48 out.append(self.make_product(49 rate=float(rate), rate_type=rtype,50 term_months=int(term_years * 12), kind="special",51 product_name=label, apr=apr,52 conditions=f"Taux unique Tangerine (en date du {r.get('date')})",53 raw={"account_term": r.get("account_term"),54 "date": r.get("date"), "interest_rate": rate}))55 return out56