# Yelp (avis et notes, sans clé) — connecteur `yelp-scrape` _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) : 5 · Backend : Scrapfly ## Description de la source Connecteur d'ENRICHISSEMENT Yelp SANS clé API (avis/notes par scraping léger). Une seule page de RECHERCHE yelp.ca par resto (find_desc=&find_loc=) via Scrapfly ASP : la page embarque un cache Apollo (scripts data-apollo-state) avec, PAR commerce, alias, nom, note, nombre d'avis, fourchette de prix, catégories et adresse (ville + civique). Croisement CONSERVATEUR : nom similaire + même numéro civique + ville compatible (jamais fusionner deux établissements). Résultat -> details.yelp {rating, review_count, price, categories, url} (mêmes clés que Yelp Fusion — le connecteur officiel `yelp` reprend la main dès qu'une YELP_API_KEY existe). Économe : budget YELP_SCRAPE_BUDGET (défaut 80) pages/cycle, re-visite 30 jours (hit comme miss), priorité aux restos avec menu. Base légale : pages publiques, extraction minimale (note agrégée + lien vers la fiche Yelp, attribution affichée) — voir CLAUDE.md §15. - **Plateforme** : yelp · **Site** : https://www.yelp.ca - **Extraction (registre)** : Une page de RECHERCHE yelp.ca par resto (find_desc=nom&find_loc=ville) via Scrapfly ASP : le cache Apollo embarqué (scripts data-apollo-state) expose alias, note, nb d'avis, fourchette de prix, catégories, ville et civique par commerce -> details.yelp (mêmes clés que Yelp Fusion). Croisement conservateur : nom similaire + même numéro civique + ville compatible ; ambigu = ignoré. Budget YELP_SCRAPE_BUDGET (80 pages/cycle), re-visite 30 j (hit comme miss), priorité aux restos avec menu. N'émet aucune fiche. Le connecteur `yelp` (API Fusion) reprend la main dès qu'une YELP_API_KEY existe. - **Contexte de prix** : aucun - **Module** : `restoka/connectors/yelp_scrape.py` — `YelpScrapeConnector` ## Accès - **Type d'accès** : pages HTML (rendu serveur) - **Endpoint de base** : https://www.yelp.ca/search?find_desc={desc}&find_loc={loc} - **URLs du module** : https://www.yelp.ca/search?find_desc={desc}&find_loc={loc} · https://www.yelp.ca/biz/ - **Pagination** : réponse unique (pas de pagination) - **Backend anti-bot / rendu** : Scrapfly (asp + render_js — contournement anti-bot) - **Politesse** : 1.0 s entre requêtes, timeout 60 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 Aucune fiche en BD pour cette source (connecteur en attente ou clé manquante) — schéma cible : table `restaurants` + `menus`. ## Fréquence & budget - **Cadence déclarée (registre)** : quotidien par petits lots (80 pages), re-vérification 30 jours - **Cadence observée** (médiane sync_log) : — - **Caps / budgets du module** : `MAX_CONSECUTIVE_FAILURES` = 3 ## Volumétrie & complétude - Aucune donnée en BD pour cette source. - **Runs journalisés (60 derniers)** : 0, 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 yelp-scrape` · vérifier `sync_log` (`SELECT * FROM sync_log WHERE source='yelp-scrape' ORDER BY ts DESC LIMIT 5;`). ## Licence, attribution & conditions - **Cadre d'accès (registre, `acces_legal`)** : Pages publiques yelp.ca, extraction minimale (note agrégée + lien fiche), attribution Yelp affichée avec la note (mêmes conditions d'affichage que Fusion). Anti-bot réel : Scrapfly ASP, ~30 crédits/page — budget serré. À remplacer par l'API Fusion (clé gratuite) dès que possible (CLAUDE.md §15). - **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 — vague d'enrichissement : standardisation de la documentation des connecteurs (fiche générée par `scripts/gen_connector_docs.py`).