SPB Git forge

spb/resto-ka

Public

Resto·Ka — tous les restaurants du Québec, menus complets et prix réels (famille ·Ka)

52commits 1branches 0releases
11.6 MBsize
maindefault branch
19 days agolast push
Python 69.3% TypeScript 16.7% CSS 7.9% JavaScript 4.7% HTML 1.4%
5.8 KB

# Sites web des restos (menus maison) — connecteur site-resto

Fiche générée automatiquement par scripts/gen_connector_docs.py le 2026-08-18 06:06 — ne pas éditer à la main, régénérer.

État : actif · Palier (tier) : 3 · Backend : Firecrawl · Restos actifs : 86/86

# Description de la source

Connecteur « sites web des restos » (Palier 3) — capte les MENUS MAISON des restaurants découverts par OSM qui publient un site web. Pipeline par site (budget par passage, incrémental via detail_cache) : 1. GET la page d'accueil (requests direct, UA RestoKaBot). 2. DÉTECTION DE PLATEFORME (CLAUDE.md §9 P3) : si le site embarque UEAT (order.ueat.io/integration/ ou *.order-online.ai), le GUID est consigné dans data/ueat-discovered.json — le connecteur UEAT (Palier 1, menu structuré parfait) le couvrira au prochain passage. Aucune fiche émise ici. 3. Sinon : trouver le lien « menu/carte », récupérer la page (Firecrawl en secours pour les sites JS, budget limité) ou le PDF du menu. 4. Structuration par Claude Haiku 4.5 (restoka/menullm.py) — sorties structurées JSON + validation STRICTE des prix. 5. Émettre une fiche site-resto clonée de la fiche OSM avec le menu ; la déduplication masque la fiche OSM derrière elle. Contexte de prix produit : DINE-IN (menu affiché par le resto lui-même — la référence idéale, §6.2). price_source: site-resto. Les fiches déjà captées sont RÉÉMISES depuis la base à chaque passage (délai de grâce) et re-crawlées après REFRESH_DAYS.

  • Plateforme : sites-web · Site : https://www.resto-ka.com/sources
  • Extraction (registre) : Crawl des sites web publiés par les restos découverts via OSM : détection de plateforme (UEAT → GUID consigné dans ueat-discovered.json), sinon page menu HTML (requests, Firecrawl en secours pour le JS) ou PDF → structuration par Claude Haiku 4.5 (sorties structurées JSON) → validation stricte des prix (≥5 plats avec prix, ≥40 % des items, 0,50–500 $). Budget de 250 sites/passage, re-crawl mensuel.
  • Contexte de prix : dine-in
  • Module : restoka/connectors/siteresto.py — SiteRestoConnector

# Accès

  • Type d'accès : pages HTML (rendu serveur)
  • Endpoint de base : https://{m.group(1
  • URLs du module : https://{m.group(1
  • Pagination : itération sur 11 racines (constante _RESERVATION_DOMAINS)
  • Backend anti-bot / rendu : requests direct (session UA RestoKaBot, throttling poli) ; Firecrawl (HTML rendu, JavaScript exécuté)
  • Politesse : 1.0 s entre requêtes, timeout 20 s, UA RestoKaBot/1.0 (+https://www.resto-ka.com/bot)
  • Authentification : aucune — accès public/anonyme

# Champs récupérés → schéma cible

Le connecteur alimente la table restaurants (et menus le cas échéant). Complétude mesurée en SQL sur les 86 fiches actives ; exemple tiré d'une ligne réelle de la BD.

Colonne restaurants Contenu Renseignée (actives) Exemple réel
name Nom de l'établissement 100 % Chez Roger
chain Chaîne / bannière 5 % —
cuisines Cuisines (JSON, taxonomie §6.1) 100 % ["fruits-de-mer", "bbq-grillades", "cafe-dessert", "fast-food"]
establishment_type Type d'établissement 100 % restaurant
price_range Fourchette de prix 100 % $
address Adresse civique 86 % 2316 Rue Beaubien Est
city Ville 10 % —
region Région administrative 100 % Montréal
postal_code Code postal 45 % —
lat GPS (lat/lng) 100 % 45.5470572
phone Téléphone 83 % +1 514 593 4200
website Site web 100 % https://www.chezroger.ca/
hours Horaires structurés (JSON) 50 % {"osm": "Mo-Su 17:00-23:00", "mon": [["17:00", "23:00"]], "tue": [["17:00", "23:00"]], "w…
services Services (JSON) 100 % ["salle"]
dietary_options Options alimentaires (JSON) 70 % []
images Photos (JSON) 0 % —
url URL de la fiche source 100 % https://www.chezroger.ca/restaurant/menus.html

Menus : 86 menus rattachés (4667 items, 1 contexte(s) de prix, dernière capture 2026-08-18T07:17:34Z) — table menus (sections → items → options, prix CAD).

# Fréquence & budget

  • Cadence déclarée (registre) : hebdomadaire (batch incrémental), re-crawl mensuel
  • Cadence observée (médiane sync_log) : ≈ 25 min
  • Dernier passage OK : 2026-08-18 03:17 — 86 trouvées, +82 / ~3 / -0

# Volumétrie & complétude

  • Fiches en BD : 86 au total, 86 actives
  • Première ingestion : 2026-08-18 · Dernière observation : 2026-08-18
  • Complétude clé (actives) : GPS 100 % · adresse 86 % · cuisines 100 % · horaires 50 % · site web 100 %
  • Runs journalisés (60 derniers) : 3, dont 0 en erreur

# Erreurs connues & dépannage

Aucune erreur dans les 60 derniers runs journalisés.

Rejouer la source seule : python3 run.py sync site-resto · vérifier sync_log (SELECT * FROM sync_log WHERE source='site-resto' ORDER BY ts DESC LIMIT 5;).

# Licence, attribution & conditions

  • Cadre d'accès (registre, acces_legal) : Sites publics de première partie (le menu affiché par le resto lui-même — la voie la plus légitime, CLAUDE.md §15). UA identifiable RestoKaBot, 1 req/s, aucun contournement.
  • Scraping / API : User-Agent identifiable RestoKaBot/1.0 (+https://www.resto-ka.com/bot; contact@spboucher.ai), throttling poli, aucun contournement d'accès ; les fiches pointent vers la source d'origine.
  • Retrait sur demande : contact@spboucher.ai.

# Historique

  • 2026-08-18 — premières fiches de la source ingérées dans la BD.
  • 2026-08-18 — vague d'enrichissement : standardisation de la documentation des connecteurs (fiche générée par scripts/gen_connector_docs.py).