SPB Git forge

spb/house-ka

Public
18commits 1branches 0releases
1.9 MBsize
maindefault branch
20 days agolast push
Python 67% TypeScript 18.2% CSS 14.4%
2.3 KB · 56 lines python
Raw Blame History
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