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%
1# UEAT (commande en ligne) — connecteur `ueat`23_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._45**État : actif** · Palier (tier) : 1 · Backend : direct · Restos actifs : 934/93667## Description de la source89Connecteur TEMPLATISÉ pour UEAT (foodtech de Québec — plateforme de commande en ligne marque blanche, très répandue au QC). Couvre tous les restos listés dans data/sources.json -> source « ueat » -> « integrations » (un GUID d'intégration par marque/resto). Mode d'extraction : API GraphQL interne (https://api.ueat.io/graphql), la même que consomme le widget de commande officiel — données structurées, aucun rendu navigateur requis. Auth anonyme : en-têtes `x-ueatapikey: <GUID d'intégration>` + `x-ueatculture: fr`. Contexte de prix produit : TAKEOUT (prix réels de la commande en ligne du resto lui-même, non majorés — source de première partie, voir CLAUDE.md §9 Palier 1 et §15). Couverture par intégration : - restaurant { name url logo } -> identité de la marque - franchises(modeType: TAKEOUT) -> UNE FICHE PAR ADRESSE (succursales reliées par `chain`, jamais fusionnées — §12.1) - menu { categories } + items(categoryId) -> sections & plats (sous-catégories via menu(parentCategoryId), récursif) - variations d'item -> options « Format » - item.question (1er niveau) -> groupes d'options (garnitures, choix de base…) — mis en cache par marque, refait seulement quand le menu change (detail_cache). Limite documentée : le menu est capté au niveau de la MARQUE (menu par défaut du siège). Les écarts locaux de prix entre succursales d'une même bannière ne sont pas captés (menus standardisés §9 P6).1011- **Plateforme** : ueat · **Site** : https://ueat.io12- **Extraction (registre)** : API GraphQL interne (api.ueat.io/graphql), auth anonyme par GUID d'intégration — la même API que le widget officiel de commande13- **Contexte de prix** : takeout14- **Module** : `restoka/connectors/ueat.py` — `UeatConnector`15- **Intégrations recensées** : 50 clés GUID (48 actives, 2 retirées) — voir `data/sources.json` et `data/ueat-discovered.json`1617## Accès1819- **Type d'accès** : API GraphQL interne20- **Endpoint de base** : https://api.ueat.io/graphql21- **URLs du module** : https://api.ueat.io/graphql · https://order.ueat.io/integration/{guid}/fr22- **Pagination** : réponse unique (pas de pagination)23- **Backend anti-bot / rendu** : requests direct (session UA RestoKaBot, throttling poli)24- **Politesse** : 0.35 s entre requêtes, timeout 30 s, UA `RestoKaBot/1.0 (+https://www.resto-ka.com/bot)`25- **Authentification** : aucune — accès public/anonyme2627## Champs récupérés → schéma cible2829Le connecteur alimente la table `restaurants` (et `menus` le cas échéant). Complétude mesurée en SQL sur les 934 fiches actives ; exemple tiré d'une ligne réelle de la BD.3031| Colonne `restaurants` | Contenu | Renseignée (actives) | Exemple réel |32|---|---|---|---|33| `name` | Nom de l'établissement | 100 % | Poulet Rouge - Alexis-Nihon |34| `chain` | Chaîne / bannière | 98 % | Poulet Rouge |35| `cuisines` | Cuisines (JSON, taxonomie §6.1) | 100 % | ["poulet", "quebecois", "cafe-dessert", "vegetarien-vegan"] |36| `establishment_type` | Type d'établissement | 100 % | restaurant |37| `price_range` | Fourchette de prix | 91 % | $ |38| `address` | Adresse civique | 100 % | 1500 Avenue Atwater |39| `city` | Ville | 100 % | Montréal |40| `region` | Région administrative | 100 % | Montréal |41| `postal_code` | Code postal | 100 % | H3Z 1X5 |42| `lat` | GPS (lat/lng) | 100 % | 45.488805 |43| `phone` | Téléphone | 100 % | 514 419-2191 |44| `website` | Site web | 96 % | https://poulet-rouge.ca/ |45| `hours` | Horaires structurés (JSON) | 0 % | {} |46| `services` | Services (JSON) | 100 % | ["takeout"] |47| `dietary_options` | Options alimentaires (JSON) | 82 % | ["vegetarien"] |48| `images` | Photos (JSON) | 100 % | 5 photo(s) — https://storage.googleapis.com/ueat-assets/b914c5ae-48e4-44d2-9df1-03ceeb04f… |49| `url` | URL de la fiche source | 100 % | https://order.ueat.io/integration/4268100d-6470-40b9-a755-e11342c91d6d/fr |5051**Menus** : 934 menus rattachés (91881 items, 1 contexte(s) de prix, dernière capture 2026-08-18T07:25:47Z) — table `menus` (sections → items → options, prix CAD).5253## Fréquence & budget5455- **Cadence déclarée (registre)** : hebdomadaire56- **Cadence observée** (médiane sync_log) : ≈ 70 min57- **Dernier passage OK** : 2026-08-18 03:25 — 934 trouvées, +84 / ~0 / -158- **Caps / budgets du module** : `MAX_DEPTH` = 3, `MAX_QUESTION_FETCH` = 40059- **Cache des payloads détail** : activé (table `detail_cache`)6061## Volumétrie & complétude6263- **Fiches en BD** : 936 au total, **934 actives**64- **Première ingestion** : 2026-08-17 · **Dernière observation** : 2026-08-1865- **Complétude clé (actives)** : GPS 100 % · adresse 100 % · cuisines 100 % · horaires 0 % · site web 96 %66- **Runs journalisés (60 derniers)** : 6, dont 0 en erreur6768## Erreurs connues & dépannage6970Aucune erreur dans les 60 derniers runs journalisés.7172Rejouer la source seule : `python3 run.py sync ueat` · vérifier `sync_log` (`SELECT * FROM sync_log WHERE source='ueat' ORDER BY ts DESC LIMIT 5;`).7374## Licence, attribution & conditions7576- **Cadre d'accès (registre, `acces_legal`)** : Source de première partie : plateforme de commande des restos eux-mêmes, prix réels non majorés (CLAUDE.md §9 Palier 1, §15). API anonyme publique, throttling poli 0,35 s, User-Agent identifiable RestoKaBot.77- **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.78- Retrait sur demande : contact@spboucher.ai.7980## Historique8182- 2026-08-17 — premières fiches de la source ingérées dans la BD.83- 2026-08-18 — vague d'enrichissement : standardisation de la documentation des connecteurs (fiche générée par `scripts/gen_connector_docs.py`).84