Resto·Ka — tous les restaurants du Québec, menus complets et prix réels (famille ·Ka)
Python 69.3%
TypeScript 16.7%
CSS 7.9%
JavaScript 4.7%
HTML 1.4%
-
Tue, Aug 18, 2026 3
-
Vague 3 : avis/notes sans clé API + menus livraison + permis d alcool
…
- yelp-scrape : notes/avis Yelp SANS clé (1 page de recherche yelp.ca/resto via Scrapfly ASP, cache Apollo embarqué) -> details.yelp, croisement conservateur nom+civique+ville, budget 80 pages/cycle, re-visite 30 j, indépendants d abord. Yelp Fusion (yelp) reprend la main si clé fournie. - ubereats : menus livraison + notes via sitemaps publics (index local 37 087 slugs CA, 30 j) + __REACT_QUERY_STATE__ des pages resto ; croisement conservateur (téléphone / postal+civique / GPS<120 m + nom) avec restos EXISTANTS seulement, menus en price_context delivery, budget 60 pages/cycle. - permits (racj) : permis d alcool en vigueur (Données Québec, CC-BY 4.0), regroupés par établissement et croisés comme MAPAQ -> details.permis_alcool (1 924 restos croisés au premier run). - /api/stats : with_yelp_rating, with_ubereats, with_alcohol_permit ; ingest.enrich appelle permits.sync (guard 6 j) ; registre sources.json (9) + docs générées ; 73 tests verts (9 nouveaux, tout hors ligne). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Vague 2 : inspections MAPAQ, horaires structurés, contact site-resto, Yelp, fix Overpass 406
…
- MAPAQ (Données Québec, CC-BY 4.0) : module restoka/inspections.py — import des 2 994 condamnations (listecondamnation.csv) dans la table liée inspections, croisement CONSERVATEUR avec les restaurants (nom+lieu avec CP ou civique exigé ; adresse+nom hors tokens de ville — jamais la mauvaise succursale d une chaîne, jamais deux voisins d un centre commercial) : 288 condamnations croisées sur 204 restos. details.mapaq + endpoint GET /api/restaurants/{uid}/inspections + compteurs /api/stats. - Horaires : restoka/hours.py — parseur opening_hours OSM (plages de jours, double service, off, 24/7, PH ignoré ; l exotique reste en brut) + JSON-LD schema.org. Câblé dans le connecteur OSM et backfillé : 2 656/2 939 tags bruts structurés par jour (90,4 %). - site-resto : extraction téléphone (tel:/JSON-LD/regex, E.164, garde anti-annuaire de chaîne), horaires JSON-LD et lien de réservation (OpenTable, Libro, Resto Loco…) -> COALESCE conservateur sur la fiche OSM (db.enrich_contact) + details.reservation_url (pending_enrichment). - Yelp Fusion : connecteur d enrichissement complet (rating, review_count, price, categories, phone -> details.yelp ; croisement par téléphone puis /businesses/matches, GPS <300 m si ambigu, budget 450 req/run). Livré en SkipSource « clé requise » (YELP_API_KEY absente) — nouveau patron SkipSource dans base.py + .env.example. - Overpass 406 : overpass-api.de refuse les UA déguisés en navigateur mais accepte un UA de bot honnête — UA dédié OVERPASS_UA (vérifié live, 200). - Colonne restaurants.details (migration auto, jamais touchée par sync_source), registre data/sources.json à 6 sources, /api/stats expose inspections/inspections_matched/restaurants_with_inspections. - Tests : 64 au vert (51 existants + 13 nouveaux : hours, inspections, extraction contact). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Fiabilité sync + enrichissement UEAT/OSM
…
- Garde anti-fausses-fermetures : garde bootstrap (found < 60 % du max historique => retraits suspendus, active dès le 2e run), signal de run partiel remonté du connecteur au pipeline (sync_source(partial=...)). - OSM : run marqué partiel si un type échoue sur tous les miroirs ; réponses Overpass tronquées (remark timeout) et miroirs sans données (0 élément) traités comme des échecs ; overpass.osm.ch retiré (extrait suisse => 0 POI pour le Québec) ; +2 miroirs planet. - OSM : brand => chain, branch suffixé au nom, wheelchair/payment:*/ capacity => services, diet:*=limited accepté, ~45 cuisines OSM supplémentaires mappées (belgian, turkish, cantonese, peruvian...). - UEAT : phoneNumber + address.latitude/longitude captés a la source (GPS de première partie, COALESCE côté base) ; 20 GUID découverts par site-resto promus dans data/sources.json (50 intégrations). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 17, 2026 1
-
Resto·Ka v1 — agrégateur des restaurants du Québec (menus & prix réels)
…
- Pipeline complet calqué sur Lou·Ka : connecteurs auto-découverts, schéma Restaurant + menu imbriqué (sections → items → prix → options), validation stricte (price_context/price_source obligatoires), menus conservés PAR contexte, historique des prix par item, alertes de dérive, délai de grâce. - Connecteur templatisé UEAT (API GraphQL, prix takeout réels) : 19 marques, 542 restos, 61 330 plats (98 % avec photo, 69 % avec options), 14/17 régions. - Géocodage Nominatim + Adresses Québec (96 %), régions ville→région, déduplication inter-sources (succursales jamais fusionnées). - Frontend Vite/React 18/TS — design « éditorial sharp » Groupe KA, recherche par resto ET par plat (groupée par marque), pagination numérotée, images, options en pastilles avec suppléments, badges de contexte de prix. - 41 tests (fixtures UEAT réelles hors ligne). Déployé : www.resto-ka.com (M3U96b:8115, PM2 + ngrok + sync hebdo). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-