SPB Git forge

spb/api-ka

Public

API-KA — plateforme centrale : collecte quotidienne des 8 services KA, historisation append-only et API publique sur www.api-ka.com

48commits 1branches 0releases
5.9 MBsize
maindefault branch
19 days agolast push
Python 60.9% HTML 21% TypeScript 7.3% JavaScript 5.2% CSS 4.8% Shell 0.8%
ZIP tar.gz
NameLast commitUpdated
docs docs: README ultra détaillé + visite guidée en 10 captures 26 days ago
frontend footer: ajout Ka·Stats (www.ka-stats.com) à l'écosystème 1 mo ago
logs API-KA — plateforme centrale : collecte quotidienne des 8 services KA... 1 mo ago
scripts Page /stats : tableau de bord analytique de la plateforme + rapport... 1 mo ago
src URL des apps sœurs résolues depuis le registre maclustr-dispatch... 19 days ago
systemd API-KA — plateforme centrale : collecte quotidienne des 8 services KA... 1 mo ago
tests feat(monitoring): statut retired — retrait des sources désactivées ou... 1 mo ago
.env.example recherche: /api/v1/search + /api/v1/suggest — proxy du moteur... 1 mo ago
.gitignore API-KA — plateforme centrale : collecte quotidienne des 8 services KA... 1 mo ago
alembic.ini API-KA — plateforme centrale : collecte quotidienne des 8 services KA... 1 mo ago
CLAUDE.md API-KA — plateforme centrale : collecte quotidienne des 8 services KA... 1 mo ago
pyproject.toml API-KA — plateforme centrale : collecte quotidienne des 8 services KA... 1 mo ago
README.md docs: README ultra détaillé + visite guidée en 10 captures 26 days ago
requirements.txt KA AGENT — assistant IA central de l écosystème (Claude Haiku 4.5) :... 1 mo ago
README.md source

API·Ka — La donnée de l'écosystème, par API

API·Ka

La donnée de l'écosystème, par API

Site Documentation PDF Swagger Nœud Port PM2

Collectes 7 j Enregistrements 7 j Appels API 7 j Connecteurs OK Connecteurs en panne PostgreSQL Dernière collecte

Python FastAPI PostgreSQL APScheduler Claude pytest PM2 ngrok Groupe KA spbgit

API·Ka (www.api-ka.com) est la plateforme de données centrale de l'écosystème Groupe KA. Chaque jour, 11 collecteurs (lou-ka, immo-ka, food-ka, auto-ka, fabri-ka, resto-ka, sorti-ka, crea-ka, job-ka, house-ka, rent-ka) sauvegardent les données des plateformes dans une base PostgreSQL unifiée (fetch → validation → checksum → insertion → backup → journal de run, retry 3× avec backoff 30 s → 2 min → 10 min), puis les exposent via une API FastAPI publique : données paginées, historiques par date, statistiques, rapports PDF.

Elle héberge aussi le KA Agent — l'assistant IA central du groupe (Claude Haiku 4.5, SSE, boucle de 34 outils branchés sur les API publiques des plateformes) servi en widget (/ka-agent.js) aux 13 domaines de l'écosystème — et sert de superviseur des connecteurs (~4 460 connecteurs suivis au 2026-08-28 : historique des collectes /api/v1/runs, santé par service, alertes). L'accès à l'API produit exige une authentification : session KA ID ou jeton personnel (kapi_, généré sur groupe-ka.com/compte).

# Chiffres live (au 2026-08-28)

Instantané de GET /api/stats et GET /health — les pastilles dynamiques ci-dessus restent à jour en continu.

Métrique Valeur
Collectes sur 7 jours 70 / 74 réussies (4 échecs, rattrapées par le backfill)
Enregistrements collectés sur 7 jours 4 522 761
Appels API sur 7 jours 5 680
Services collectés 11 (house-ka et rent-ka intégrés les 2026-08-27/28)
Connecteurs supervisés (écosystème) 4 458 — 4 179 OK · 133 dégradés · 3 en panne · 85 périmés · 58 retirés

Dernière collecte par service (2026-08-28) :

Service Enregistrements Service Enregistrements
fabrika 384 574 jobka 2 297
rentka 55 241 immoka 36
sortika 17 168 autres* 0
louka 7 365 Total du jour 466 681

* creaka, restoka, autoka, foodka et houseka rapportaient 0 enregistrement pour la date du jour au moment de la capture (collectes différentielles / heure de passage) — le statut du run restait success. Les valeurs live sont sur /health.

# Visite guidée

10 captures du 2026-08-28 (desktop 1440×900 · mobile 390×844), versionnées dans docs/screenshots/.

Accueil API·Ka
Accueil — « Toutes les données KA, centralisées chaque jour »
Le héros de www.api-ka.com : badge « API opérationnelle · M3U96B », réponse live de GET /health (nœud, base, dernières collectes) et compteurs en direct.
Accueil — section Sources
Accueil · 01 — Sources
Les services collectés en cartes : vocation, route /api/v1/{service}, enregistrements historisés et lien vers chaque plateforme Ka.
Accueil — section Endpoints
Accueil · 02 — Référence des endpoints
Chaque endpoint documenté en place : description, paramètres, extraits curl / Python / JavaScript copiables et bouton « Essayer ».
Accueil — endpoints historiques
Accueil — les endpoints d'historique
/api/v1/{service}/latest et /api/v1/{service}/date/{YYYY-MM-DD} : paramètres requis/optionnels, pagination (limit max 500).
Page /stats
/stats — la supervision de la plateforme
Appels API, latences moyenne et p95, taux d'erreur, collectes réussies/échouées, enregistrements — filtres de période et rapports PDF (complet, personnalisés).
Swagger /docs
/docs — l'API interactive (Swagger, OpenAPI 3.1)
Tous les routeurs (health, auth, runs, monitoring, stats, services, agent…) avec schémas et essais en direct.
Guide /doc
/doc — « Comment fonctionne API·Ka »
Le guide public : vue d'ensemble (collecteurs quotidiens, retry 3× + backfill, backups 90 jours, KA Agent), téléchargeable en PDF.
Guide /doc (route directe)
/doc — la même page servie sur la route sans barre oblique finale
Le guide reste accessible aux deux chemins (/doc et /doc/).
Page /contact
/contact — « Nous joindre »
Les trois courriels officiels du Groupe KA (projets/partenariats, médias, légal & Loi 25) et le rappel que la connexion « Se connecter avec KA » est déléguée au hub KA ID.
Accueil mobile
Accueil — version mobile (390×844)
Le même héros et le statut /health live, en colonne unique avec la nav mobile v2.

🗄️ Les captures du guide et du Swagger en WebP restent dans docs/screenshots/desktop/ et docs/screenshots/mobile/ ; les captures d'époque sont conservées dans docs/archive/.

# Nouveautés

  • 2026-08-28 — Rent-Ka devient le 11ᵉ service : collecteur rentka (pagination offset/2000 comme lou-ka), table rentka_data, supervision des ~680 sources du connecteur au premier run (6c64acd).
  • 2026-08-27 — House-Ka devient le 10ᵉ service : collecteur + modèle + CORS + supervision (17 sources) (eb543c9).
  • KA Agent v3.234 outils (recherche fédérée, annuaires déménageurs/inspecteurs, agences immobilières, historique/coût réel/TAL logement, ValoPlex, KA Scores) ; cartes d'annonces construites côté serveur (afficher_cartes), lien public lien_fiche sur chaque résultat, reprise automatique après coupure max_tokens.
  • Widget ka-agent v4 servi aux 13 domaines — cartes cliquables (ka-card) et choix en boutons (ka-choix).
  • Monitoring des connecteurs — statut retired pour les sources désactivées ou disparues.
  • Nav mobile v2 sur les pages web.

# Rôle central dans l'écosystème

API·Ka est le système nerveux du Groupe KA, avec trois missions :

  1. API unifiée des plateformes — un seul point d'entrée versionné (/api/v1/{service}) pour les données quotidiennes historisées des 11 services : mêmes conventions de pagination, mêmes enveloppes JSON, mêmes checksums, quel que soit le service interrogé. C'est ce qui alimente l'app iOS KA, Ka·Stats, les rapports PDF et les intégrations internes.
  2. Superviseur des connecteurs — la santé des ~4 460 connecteurs de collecte de tout l'écosystème (les sources de lou-ka, immo-ka, rent-ka, etc.) est agrégée ici (/api/v1/monitoring/connectors), avec statuts ok / degraded / broken / stale / retired, fenêtres de fraîcheur par service et alertes journalisées.
  3. Agent conversationnel central — le KA Agent répond en langage naturel sur les 13 sites via un seul backend (SSE), en s'appuyant sur les données live des plateformes plutôt que sur la base historisée : ce que l'agent dit est ce que les sites affichent.

# Fonctionnalités

  • 11 collecteurs quotidiens — un par plateforme Ka (Job-Ka intégré le 2026-08-18, House-Ka le 2026-08-27, Rent-Ka le 2026-08-28), avec validation, checksum, retry 3× (backoff exponentiel) et journal de run ; tout échec après 3 tentatives est loggé (collection_runs, logs/alerts.log).
  • Scheduler APScheduler — job quotidien à 02:00 (collecteurs en parallèle et indépendants) + backfill automatique des dates manquées (7 derniers jours).
  • API publique de donnéesGET /api/v1/{service} (pagination, limit max 500), /latest, /date/{YYYY-MM-DD}, /stats, /api/v1/runs (historique des collectes), pour {service} ∈ louka, immoka, foodka, autoka, fabrika, restoka, sortika, creaka, jobka, houseka, rentka.
  • Authentification obligatoire sur l'API produit — session KA ID ou jeton Bearer kapi_ ; monitoring, stats et agent restent ouverts.
  • KA Agent (IA)POST /api/agent/chat en SSE (Claude Haiku 4.5, boucle de 34 outils sur les données live des plateformes : logements, propriétés, véhicules, rappels, emplois, épicerie et comparateur de prix, produits et boutiques QC, restos, plats, menus, inspections MAPAQ, sorties, créateurs, recherche web Québec, recherche globale fédérée, suggestions, facettes, fiches détail, estimateurs Vrai-Prix et ValoPlex, annuaires déménageurs/inspecteurs, agences immobilières, historique/coût réel/TAL logement, KA Scores, cartes d'annonces serveur, stats et état des services) + recherche floue en cascade + widget embarquable GET /ka-agent.js (v4 : bulle déplaçable, position mémorisée par site, cartes cliquables et boutons de choix), CORS ouvert aux 13 domaines.
  • SSO KA IDGET /api/auth/ka/{login,callback}, session /api/auth/me, et échange de jeton pour les apps natives (POST /api/ios/auth/exchange, vérification HS256, aud ∈ ka-ios, ka-android).
  • Stats & rapports — tableau de bord /stats, GET /api/stats (KPI compact JSON), GET /api/stats/report (PDF de la plateforme) et GET /api/stats/ecosystem-report (rapport PDF consolidé de l'écosystème, liste dynamique via ecosystem.json) + rapports PDF personnalisés (catalogue + constructeur).
  • Recherche transversaleGET /api/v1/search + GET /api/v1/suggest (proxy du moteur Trouve-Ka, pivot moteur de recherche Groupe KA).
  • Backups quotidiens horodatés par service (data/backups/YYYY-MM-DD/, rétention 90 jours).
  • Santé & supervisionGET /health (nœud, état DB, dernière collecte par service, compteurs de connecteurs) ; chaque service vérifie le hostname au démarrage et refuse de tourner en production ailleurs que sur m3u96b.
  • SEO du site de doc — robots.txt, sitemap.xml, canonical/hreflang/JSON-LD.

# Authentification

Deux façons d'accéder à l'API produit — aucun secret n'est stocké dans ce repo :

  • Session KA ID (SSO) — le bouton « Se connecter avec KA » délègue au hub groupe-ka.com (compte unique de l'écosystème) : GET /api/auth/ka/login → callback → session serveur, introspectable via GET /api/auth/me.
  • Jeton personnel kapi_ — généré (et révocable) sur groupe-ka.com/compte, passé en en-tête Authorization: Bearer kapi_…. C'est la voie recommandée pour les scripts et intégrations.
  • Endpoints exemptés (publics sans authentification) : GET /health, GET /api/stats, la supervision (/api/v1/runs, /api/v1/monitoring/*), les pages web et le KA Agent (/api/agent/chat, /ka-agent.js).
  • Apps natives : POST /api/ios/auth/exchange échange le jeton du hub contre une session API (HS256, aud ka-ios / ka-android).
  • Rate-limit global : 120 req/min.

# API (endpoints principaux)

Référence interactive complète : Swagger sur /docs. 🔒 = session KA ID ou jeton Bearer kapi_ requis.

Méthode & endpoint Description
GET /health santé : nœud, état DB, dernière collecte par service, compteurs de connecteurs
GET /api/stats KPI compact JSON : collectes 7 j, enregistrements, appels API, connecteurs (alimente les pastilles ci-dessus)
🔒 GET /api/v1/{service} données paginées (limit max 500) — service ∈ louka, immoka, foodka, autoka, fabrika, restoka, sortika, creaka, jobka, houseka, rentka
🔒 GET /api/v1/{service}/latest dernière collecte du service
🔒 GET /api/v1/{service}/date/{YYYY-MM-DD} collecte d'une date précise
🔒 GET /api/v1/{service}/stats statistiques du service
🔒 GET /api/v1/louka/fairvalue/{uid} juste prix d'une annonce Lou·Ka (proxy live, utilisé par l'app iOS KA)
GET /api/v1/runs historique des runs de collecte (supervision)
GET /api/v1/monitoring/connectors · /connectors/{service} santé des connecteurs de l'écosystème (~4 460 suivis, statuts ok/degraded/broken/stale/retired)
GET /api/stats/dashboard · /report · /catalog · POST /api/stats/report/custom tableau de bord + rapports PDF (catalogue, personnalisés)
GET /api/stats/ecosystem-report rapport PDF consolidé des 13 plateformes
POST /api/agent/chat (SSE) · GET /ka-agent.js KA Agent (Claude Haiku 4.5 + 34 outils live) et son widget embarquable
GET /api/v1/search · GET /api/v1/suggest recherche transversale (incl. recherche floue) et suggestions — proxy Trouve-Ka
GET /api/auth/config · /ka/login · /ka/callback · /me · POST /api/auth/logout SSO KA ID
POST /api/ios/auth/exchange échange de jeton pour les apps natives (aud ka-ios / ka-android)

# Architecture

  • FastAPI + Uvicorn (src/api/) : 9 routeurs (health, auth, runs, monitoring, stats, search, services, agent, iosauth) + pages web et PDF (fpdf2).
  • PostgreSQL via SQLAlchemy 2 (+ Alembic pour les migrations, psycopg2) : une table de données par service ({service}_data) + journal collection_runs.
  • Collecteurs (src/collectors/) : classe abstraite base_collector (fetch, validate, save, retry) + 11 collecteurs concrets, httpx.
  • Scheduler (src/scheduler/) : daily_job.py (02:00) + backfill.py.
  • Utils (src/utils/) : backups quotidiens, rétention 90 jours ; src/monitoring/ pour la supervision (connector_health sonde les 11 apps).
  • anthropic SDK pour le KA Agent.

Collecteurs et cadence :

Collecteur Source Cadence
louka · immoka · foodka · autoka · fabrika · restoka · sortika · creaka · jobka · houseka · rentka API publique de chaque plateforme Ka ({SERVICE}_SOURCE_URL) quotidien 02:00 (parallèle, indépendants)
backfill dates manquées des 7 derniers jours au démarrage du job quotidien
backups dump horodaté par service (data/backups/YYYY-MM-DD/) quotidien, rétention 90 jours

Processus PM2 sur le nœud (commandes de start réelles) :

Processus Commande Rôle
apika-api venv/bin/uvicorn src.api.main:app --host 127.0.0.1 --port 8000 l'API FastAPI/Uvicorn sur le port 8000 (liée à 127.0.0.1)
apika-scheduler venv/bin/python -m src.scheduler.daily_job le job quotidien 02:00 + backfill
apika-ngrok ngrok http --domain=www.api-ka.com 8000 --log stdout tunnel vers www.api-ka.com

# Démarrage rapide

bash
git clone gitsrv:api-ka.git && cd api-ka
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env                             # puis remplir les valeurs

python -m src.database.db --init                 # initialiser la base PostgreSQL
uvicorn src.api.main:app --reload --port 8000    # API en dev → http://127.0.0.1:8000
python -m src.scheduler.daily_job --now          # collecte manuelle immédiate
python -m src.scheduler.backfill --date 2026-08-15
pytest tests/ -v                                 # modules de tests (api, collectors, retry, backfill, search, stats, connector_health)

# Variables d'environnement

Déclarées dans .env.example (copier vers .env, jamais commité — aucun secret dans le repo) :

Variable Rôle
APP_ENV · NODE_NAME environnement + garde-fou de hostname (m3u96b en prod)
DATABASE_URL connexion PostgreSQL (SQLAlchemy)
API_PORT · RATE_LIMIT_PER_MINUTE port de l'API (8000) et rate-limit
DAILY_RUN_HOUR · BACKUP_RETENTION_DAYS heure du job quotidien (02) et rétention des backups (90)
NGROK_AUTHTOKEN · NGROK_DOMAIN tunnel ngrok (www.api-ka.com)
LOUKA_SOURCE_URLRENTKA_SOURCE_URL (×11) URL source de chaque collecteur
TROUVEKA_SEARCH_URL · TROUVEKA_SUGGEST_URL proxy du moteur de recherche Trouve-Ka
KA_HUB_URL · KA_SSO_SECRET · KA_IOS_SSO_SECRET · SESSION_SECRET SSO KA ID (hub groupe-ka.com) + sessions
ANTHROPIC_API_KEY clé du KA Agent (lue par le SDK anthropic)
APIKA_BASE_URL base URL publique de l'API

# Données & conformité

  • Provenance : les données proviennent exclusivement des API publiques des 11 plateformes Ka (aucun scraping tiers dans ce repo) ; chaque enregistrement passe par validation + checksum avant insertion.
  • Cadence : resynchronisation quotidienne à 02:00 (collecteurs parallèles) + backfill automatique des 7 derniers jours ; backups quotidiens horodatés, rétention 90 jours.
  • Accès : l'API produit exige une authentification (session KA ID ou jeton kapi_ révocable sur groupe-ka.com/compte) ; monitoring, stats et agent restent publics ; rate-limit 120 req/min.
  • Traçabilité : chaque run de collecte est journalisé (collection_runs, exposé via /api/v1/runs) ; alertes dans logs/alerts.log.

# Structure du repo

text
/opt/api-ka
├── src/          # api/ (routes, web, PDF), collectors/ (11), scheduler/, database/, monitoring/, utils/, config.py
├── scripts/      # deploy_m3u96b.sh, healthcheck.sh, run_daily_backup.sh, start_ngrok.sh…
├── systemd/      # unités historiques (le déploiement actuel utilise PM2)
├── tests/        # pytest (api, backfill, collectors, connector_health, retry, search, stats)
├── data/         # backups/YYYY-MM-DD/ (rétention 90 jours)
├── logs/         # logs centralisés + alerts.log
├── docs/         # screenshots/ (visite guidée + desktop/mobile WebP) · archive/
└── alembic.ini · pyproject.toml · requirements.txt · CLAUDE.md

# Documentation

  • Guide en ligne : www.api-ka.com/doc/ — à quoi sert la plateforme, le parcours en 3 étapes (site de doc → Swagger /docs → supervision /stats), d'où viennent les données, FAQ.
  • Guide PDF : api-ka-documentation.pdf — la même documentation, téléchargeable.
  • Swagger interactif : www.api-ka.com/docs — tous les endpoints, schémas et essais en direct.
  • Les captures du guide sont versionnées dans src/api/web/doc/img/ (etape1 → etape3).

# Historique

Date Jalon
2026-08-17 naissance de la plateforme : collecte quotidienne des 8 services KA + API publique (d8b3b82), design Groupe KA + SSO KA ID, page /stats, rapport écosystème PDF, KA Agent v1 (Claude Haiku, SSE, 12 outils, CORS 13 domaines)
2026-08-18 Job-Ka devient le 9ᵉ service (collecteur + supervision, 609d6bb) ; supervision centralisée des connecteurs de l'écosystème ; auth mobile ka-ios/ka-android
2026-08-19 KA Agent v2 : 24 outils + recherche floue en cascade + widget v2 (e548e0d) ; socle mobile (anti-zoom 16 px)
2026-08-22 ka-agent v3 : bulle déplaçable, position mémorisée par site ; standard header KA
2026-08-23 authentification obligatoire sur l'API produit (KA ID / jeton kapi_, 99ebb9e) ; stats v3 (rapports PDF personnalisés) ; recherche /api/v1/search (proxy Trouve-Ka) ; SEO complet ; monitoring affiné (fenêtre 6 h, sources vides ≠ pannes)
2026-08-24 page documentation /doc + guide PDF ; README v2 puis v3 (chiffres live, pastilles dynamiques)
2026-08-25 KA Agent v3.2 (33 → 34 outils, cartes serveur afficher_cartes, reprise après max_tokens) ; widget ka-agent v4 ; statut retired au monitoring ; nav mobile v2
2026-08-27 House-Ka devient le 10ᵉ service (eb543c9) — collecteur, modèle, CORS, supervision (17 sources)
2026-08-28 Rent-Ka devient le 11ᵉ service (6c64acd) — collecteur offset/2000, supervision (~680 sources) ; README v4 + visite guidée en 10 captures

# Développement (remote-first)

La source de vérité est le repo git sur le nœud M3U96b (/opt/api-ka) — on n'édite jamais les copies laptop. Toute modification se fait sur le nœud via SSH : édition, tests, pm2 restart, puis commit/push depuis le nœud.

  • Remote origin = spbgit (git perso git.spboucher.ai, bare repos sur M3U96a). Pas GitHub.
  • L'agent forwarding SSH est actif : le git push origin main fonctionne pendant une session SSH depuis le laptop.
  • Chaque fichier du dépôt porte l'en-tête d'auteur obligatoire (voir CLAUDE.md).
bash
pm2 restart apika-api                            # après un changement en production

# Déploiement

  • Nœud : M3U96b (Mac Studio, cluster MacLustr) — répertoire /opt/api-ka (hostname vérifié au démarrage)
  • Port : 8000 (API liée à 127.0.0.1, exposée uniquement via le tunnel)
  • Processus PM2 : apika-api (API) + apika-scheduler (collectes) + apika-ngrok (tunnel)
  • Domaine : https://www.api-ka.com (tunnel ngrok)

# Écosystème Groupe KA

Plateforme Vocation
groupe-ka.com portail du groupe et compte unique KA ID
lou-ka.com logements à louer (Québec)
immo-ka.com propriétés à vendre (Québec)
vrai-prix.com estimation immobilière
auto-ka.com véhicules
fabri-ka.com produits québécois
food-ka.com épicerie et alimentation
resto-ka.com restaurants
sorti-ka.com sorties et événements
job-ka.com emplois
crea-ka.com créateurs de contenu
trouve-ka.com petites annonces
house-ka.com maisons à vendre (Canada hors Québec)
rent-ka.com loyers (Canada hors Québec)
api-ka.com API de données (ce repo)

# Contact

Simon-Pierre Boucher — fondateur, Groupe KA 📧 contact@spboucher.ai


© Groupe KA — Simon-Pierre Boucher · contact@spboucher.ai Ce repo vit sur spbgit (git.spboucher.ai).