SPB Git forge

spb/sorti-ka

Public

Toutes les sorties et tous les événements du Québec, un seul endroit — 7 connecteurs, fiches SSR, design Groupe KA.

58commits 1branches 0releases
13.7 MBsize
maindefault branch
17 days agolast push
HTML 82.9% Python 15.2% TypeScript 0.9% JavaScript 0.7%
60.1 KB · 774 lines json
Raw Blame History
1{2 "_comment": "Sorti-Ka — Registre des sources d'événements (province de Québec). Auteur : Simon-Pierre Boucher — contact@spboucher.ai",3 "sources": [4  {5   "id": "sitq",6   "name": "SIT Québec — Ministère du Tourisme",7   "url": "https://www.donneesquebec.ca/recherche/dataset/sit-quebec-evenements",8   "type": "donnees-ouvertes",9   "extraction": "API JSON (Tourinsoft, syndication publique) — dates, géoloc, thèmes, contacts ; le flux ne publie ni heure (T00:00:00 partout) ni tarif ni photo (re-vérifié 2026-08-25) → enrichissement incrémental des SITES OFFICIELS des événements : og:image + og:description (filtre anti-slogan <30 car.), cache versionné v2, plafond SITQ_IMG_MAX=200/sync (90 % des sites livrent une vraie description)",10   "acces_legal": "Licence Creative Commons 4.0 (Données Québec) — API officielle publiée par le Ministère du Tourisme",11   "couverture": "Événements touristiques, toutes les régions du Québec",12   "cadence": "horaire (watcher PM2)",13   "statut": "actif"14  },15  {16   "id": "montreal",17   "name": "Ville de Montréal — Événements publics",18   "url": "https://donnees.montreal.ca/dataset/evenements-publics",19   "type": "donnees-ouvertes",20   "extraction": "API CKAN datastore_search (JSON, paginée) — venue = emplacement (si vrai nom de lieu) ou titre_adresse ; address = adresse_principale + adresse_secondaire ; le jeu de données ne publie pas l'heure → heure locale captée dans le JSON-LD des fiches montreal.ca (« startDate »:\"…T19:30:00-04:00\") lors de l'enrichissement og:image incrémental (cache, plafond MTL_IMG_MAX/sync). MAJ 2026-08-25 : plafond MTL_IMG_MAX doublé (600/sync), collecte complète puis priorisation jamais-visités/date proche — convergence atteinte : image 100 % et heure 99 % des événements à venir",21   "acces_legal": "Licence CC BY 4.0 (donnees.montreal.ca) — attribution : Ville de Montréal",22   "couverture": "Événements municipaux, île de Montréal",23   "cadence": "horaire (watcher PM2)",24   "statut": "actif"25  },26  {27   "id": "lepointdevente",28   "name": "Le point de vente — billetterie québécoise",29   "url": "https://lepointdevente.com/billets",30   "type": "billetterie",31   "extraction": "pages de liste HTML rendues serveur (paginées), parse des cartes (titre, date FR + heure « 17 août 2026, 20h00 » → start_time, salle, ville, image) + fiches détail /billets/<id> incrémentales (cache data/lepointdevente_cache.json, 150 fiches/sync, re-visite 7 j) : description og:description, heure précise, tarifs JSON réels via /plugins/rates/<id> → price_min/price_label/is_free ; artistes extraits des titres par patrons sûrs seulement (« Artiste - Salle », « X en concert »). MAJ 2026-08-25 (fiches v2, LPDV_DETAIL_MAX=150/sync) : adresse civique en microdonnées schema.org (streetAddress + addressLocality, 84 % des fiches) → géocodage aval",32   "acces_legal": "robots.txt : « User-Agent: * / Allow: * » — GET throttlés, identification honnête, lien direct vers chaque billetterie",33   "couverture": "Concerts, humour, théâtre, festivals — partout au Québec (~2 500 événements à venir)",34   "cadence": "horaire (watcher PM2)",35   "statut": "actif"36  },37  {38   "id": "laval",39   "name": "Ville de Laval — Calendrier des activités",40   "url": "https://www.donneesquebec.ca/recherche/dataset/calendrier-des-activites",41   "type": "donnees-ouvertes",42   "extraction": "fichier JSON officiel (Données Québec) — EventDate/EndDate publiés en UTC (vérifié 2026-08) → convertis en date + heure locales Québec (minuit local = « toute la journée », pas d'heure) ; détection du préfixe « ANNULÉ - » du titre → statut cancelled (Phase 2)",43   "acces_legal": "Licence CC 4.0 (Données Québec) — Ville de Laval",44   "couverture": "Activités municipales, Laval",45   "cadence": "horaire (watcher PM2)",46   "statut": "morte-a-la-source",47   "decision": "2026-08-19 (audit Phase 1 + Phase 2) : le jeu ouvert est MORT À LA SOURCE — 293 enregistrements, EventDate max 2025-12-09, plus aucun événement futur publié depuis fin 2025 alors que le connecteur tourne sans erreur (41 runs verts). Le connecteur reste branché (archivage naturel du stock + réveil automatique si la Ville republie), mais la source ne compte plus comme active. REMPLACEMENT prévu en Phase 3 : calendrier vivant laval.ca / Tourisme Laval (voir 04-SOURCES-CANDIDATES de l'audit).",48   "note": " REMPLACÉE 2026-08-19 (Phase 3) par la source « lavalweb » (calendrier vivant laval.ca)."49  },50  {51   "id": "sherbrooke",52   "name": "Ville de Sherbrooke — Calendrier des événements",53   "url": "https://www.sherbrooke.ca/fr/culture-sports-et-loisirs/calendrier-des-activites",54   "type": "municipal",55   "extraction": "la page rend TOUT le calendrier dans window['TRANSFER_CACHE'] (JSON embarqué, CMS Maruche) → 1 seule requête, ~270 événements (nom, périodes en UTC → date + heure locales Québec, gratuité `payant`, catégories, clientèles, images)",56   "acces_legal": "page municipale publique (référencée sur Données Québec) — GET direct, identification honnête",57   "couverture": "Événements municipaux et culturels, Sherbrooke (Estrie)",58   "cadence": "horaire (watcher PM2)",59   "statut": "actif"60  },61  {62   "id": "longueuil",63   "name": "Ville de Longueuil — Événements (nouveau portail)",64   "url": "https://longueuil.quebec/fr/evenements",65   "type": "municipal",66   "extraction": "page liste rendue serveur (portail Nuxt) — cartes <article class=\"event__item\"> : <time datetime> (date + heure locales, début/fin), titre, lien, extrait ; enrichissement par fiche incrémental (cache data/longueuil_cache.json, 30 fiches/sync, re-visite 30 j) : adresse civique, code postal, municipalité depuis l'état Nuxt (address_line1/postal_code/locality) ; GPS via le géocodeur central",67   "acces_legal": "portail municipal public, rendu serveur — GET throttlés 0,8 s, identification honnête",68   "couverture": "Événements municipaux, Longueuil (Montérégie)",69   "cadence": "horaire (watcher PM2, incrémental)",70   "statut": "actif",71   "note": "Remplace le jeu Données Québec « evenements » périmé (dernière date 2017-03, vérifié 2026-08-17) par le portail vivant longueuil.quebec."72  },73  {74   "id": "eventbrite",75   "name": "Eventbrite — billetterie libre-service (Québec)",76   "url": "https://www.eventbrite.ca/d/canada--montreal/all-events/",77   "type": "billetterie",78   "extraction": "pages de découverte publiques /d/<lieu>/all-events/?page=N (7 lieux QC pondérés : Montréal, Québec, Laval, Gatineau, Sherbrooke, Longueuil, Trois-Rivières) — window.__SERVER_DATA__ livre 20 résultats/page : nom, résumé, date + heure locales, salle géocodée (lat/lng, adresse, code postal), image, catégories (tags Eventbrite*), URL ; prix par fiche détail /e/<slug> incrémentale (JSON-LD AggregateOffer lowPrice/highPrice CAD ; cache data/eventbrite_cache.json, 150 fiches/sync, re-visite 7 j) ; en ligne exclus, filtre region=QC strict",79   "acces_legal": "robots.txt « User-agent: * » n'interdit ni /d/ ni /e/ (seuls /directory/, checkout et endpoints privés) — GET throttlés 0,8 s, identification honnête, lien direct vers chaque fiche",80   "couverture": "Événements communautaires, ateliers, festivals, affaires — grandes villes du Québec",81   "cadence": "horaire (watcher PM2, incrémental)",82   "statut": "actif"83  },84  {85   "id": "cantonsdelest",86   "name": "Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)",87   "url": "https://www.cantonsdelest.com/evenements",88   "type": "tourisme-regional",89   "extraction": "page 1 SSR + pagination AJAX POST /event/more {_csrf, ids, offset} jusqu'à épuisement (~596 occurrences, CDE_PAGE_MAX=120) — carte : lien /evenements/<id>/<slug>/<idDate>, catégorie, titre, image, « Ville | date FR (abrégés janv./févr. gérés) » ; fiches incrémentales (CDE_FICHE_MAX=40/sync, re-visite 7 j) : JSON-LD Event (dates précises, description, adresse, CP) + GPS data-lat/lng ; recoupement SITQ par dedup_key",90   "acces_legal": "pages publiques de l'ATR, rendu serveur — GET throttlés 0,8 s, identification honnête, lien vers la fiche originale",91   "couverture": "Festivals, spectacles, événements — Cantons-de-l'Est (Estrie)",92   "cadence": "horaire (watcher PM2, incrémental)",93   "statut": "actif"94  },95  {96   "id": "saguenay",97   "name": "Ville de Saguenay — Événements culturels",98   "url": "https://www.donneesquebec.ca/recherche/dataset/sag_evenements-culturels",99   "type": "donnees-ouvertes",100   "extraction": "CSV (Données Québec)",101   "acces_legal": "Licence CC 4.0 (Données Québec)",102   "couverture": "Saguenay",103   "cadence": "n/d",104   "statut": "abandonnee",105   "note": "Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17). REMPLACÉE 2026-08-19 (Phase 3) par la source « saguenaysorties » (portail sorties.saguenay.ca)."106  },107  {108   "id": "repentigny",109   "name": "Ville de Repentigny — Événements",110   "url": "https://www.donneesquebec.ca/recherche/dataset/evenement-sur-le-territoire-de-la-ville",111   "type": "donnees-ouvertes",112   "extraction": "CSV (Données Québec)",113   "acces_legal": "Licence CC 4.0 (Données Québec)",114   "couverture": "Repentigny (Lanaudière)",115   "cadence": "n/d",116   "statut": "abandonnee",117   "note": "Jeu de données périmé — dernière date d'événement : 2021-09 (vérifié 2026-08-17)"118  },119  {120   "id": "evenko",121   "name": "evenko — grands concerts et festivals",122   "url": "https://evenko.ca/fr/evenements",123   "type": "promoteur",124   "extraction": "API /api/search (proxy Algolia) — format percé : GET ?body=base64({params:[query,options],lang:'fr-CA'}), filters entity_type:evenko_show, ~5 requêtes/sync ; heure locale du spectacle via show_time (epoch → America/Montreal, respect de hide_show_time) ; artistes = champ headliners explicite ; gratuité : champ free (sondé null sur 100 % des hits, 2026-08) + étiquettes « gratuit » (event_tag/promotional_tag) ; aucun montant exposé par l'index. MAJ 2026-08-25 : aucun montant exposé (index Algolia complet 660 hits + JSON-LD des pages événement sans price) — prix uniquement chez Ticketmaster (connecteur ticketmaster, priceRanges)",125   "acces_legal": "robots.txt : Allow /api/search* (explicite) — lien billets = URL Ticketmaster officielle",126   "couverture": "Grands concerts (Centre Bell, Place Bell, MTELUS…), festivals (Osheaga, ÎleSoniq…)",127   "cadence": "horaire (watcher PM2)",128   "statut": "actif"129  },130  {131   "id": "atuvu",132   "name": "Atuvu.ca — calendrier culturel",133   "url": "https://atuvu.ca/",134   "type": "agregateur",135   "extraction": "sitemaps XML publics + fiches HTML en GET direct (repli Scrapfly seulement sur défi Cloudflare) — cache versionné v2 : heure précise (92 % des fiches v2), tarifs après mise en vente (46 %), séances multiples le même jour suffixées -HHMM ; re-visite roulante 14 j des fiches à venir, plafond ATUVU_MAX_FETCH/sync",136   "acces_legal": "robots.txt : Allow / + sitemap public",137   "couverture": "Sorties culturelles, Grand Montréal",138   "cadence": "horaire (watcher PM2, incrémental)",139   "statut": "actif"140  },141  {142   "id": "lavitrine",143   "name": "La Vitrine culturelle",144   "url": "https://www.lavitrine.com/",145   "type": "billetterie",146   "extraction": "sitemap.xml + fiches rendues serveur (carrousel dates/heures/salles, description, og:image) + pages REPRÉSENTATION (…/<ficheId>/<dateId>) : JSON-LD Event complet → adresse, code postal, GPS bruts de la source (100 % constaté), prix billetterie (73 %) ; date+heure locales prises du fil d'Ariane (le startDate JSON-LD est en UTC et change de jour — piège évité) ; incrémental versionné v3, plafond LV_MAX_FETCH/sync",147   "acces_legal": "robots.txt : Allow / + Content-Signal search=yes, use=reference — usage index + lien vers la fiche originale",148   "couverture": "Spectacles et sorties culturelles, Grand Montréal",149   "cadence": "horaire (watcher PM2, incrémental)",150   "statut": "actif"151  },152  {153   "id": "brossard",154   "name": "Ville de Brossard — Calendrier des événements",155   "url": "https://brossard.ca/calendrier-des-evenements/",156   "type": "municipal",157   "extraction": "API REST WordPress publique /wp-json/wp/v2/city-event (JSON paginé, ~400 fiches) + dates/heures par fiche : bannière « Cet événement aura lieu le … » (fiches ville) ou JSON-LD Event (fiches biblio.brossard.ca) — cache incrémental data/brossard_cache.json, 80 fiches/sync, re-visite 7 j ; repli : date entre parenthèses dans le titre",158   "acces_legal": "API REST WordPress publique (aucune authentification) — GET throttlés 0,8 s, identification honnête",159   "couverture": "Événements municipaux et de bibliothèque, Brossard (Montérégie)",160   "cadence": "horaire (watcher PM2, incrémental)",161   "statut": "actif"162  },163  {164   "id": "ticketmaster",165   "name": "Ticketmaster — Discovery API (Québec)",166   "url": "https://developer.ticketmaster.com/products-and-docs/apis/discovery-api/v2/",167   "type": "billetterie",168   "extraction": "SANS clé (mode par défaut) : scraping léger des pages découverte publiques www.ticketmaster.ca/discover/<ville>?page=N (montreal, quebec-city, gatineau) — l'état Next.js (__NEXT_DATA__, requête serveur cityEvents) livre 20 événements/page : titre, date UTC + fuseau → date/heure locales, salle géolocalisée (lat/lng), adresse, code postal, ville, URL billetterie, catégorie majeure, plan de salle (image) ; plafonds TM_MAX_EVENTS=360 / TM_PAGES_PER_CITY=8 ; Scrapfly ASP sans render_js en secours anti-bot ; aucun prix publié dans ce flux → jamais inventé. REPLI AUTOMATIQUE : si TICKETMASTER_API_KEY apparaît dans .env, bascule sur la Discovery API v2 officielle (priceRanges, attractions → artistes, images 16:9) — identifiants identiques, zéro doublon.",169   "acces_legal": "pages découverte publiques rendues serveur — robots.txt n'interdit pas /discover/ (seuls /api/ismds/*) ; GET throttlés 1 s, lien direct vers la billetterie officielle ; API officielle (clé gratuite) utilisée dès qu'une clé est fournie",170   "couverture": "Grands spectacles, sports et concerts — Montréal/Laval/Brossard, Québec, Gatineau",171   "cadence": "horaire (watcher PM2)",172   "statut": "actif",173   "note": "Fonctionne sans clé (scraping découverte). TICKETMASTER_API_KEY optionnelle : active le mode API riche (prix, artistes, images)."174  },175  {176   "id": "bandsintown",177   "name": "Bandsintown — dates de concerts par artiste",178   "url": "https://rest.bandsintown.com/",179   "type": "agregateur",180   "extraction": "API publique /artists/{artiste}/events (app_id format widget « js_www.sorti-ka.com », testé accepté 2026-08 ; un app_id arbitraire simple est refusé) — pas de recherche géographique : on interroge les artistes déjà extraits de la base (evenko/lepointdevente/ticketmaster, événements à venir), plafond 100 artistes/sync avec rotation et cache data/bandsintown_cache.json (re-visite 3 j) ; on ne garde que les dates au Québec (venue.region=QC) : datetime local (date+heure), salle géolocalisée, lineup → artistes, free → gratuité, lien billets. MAJ 2026-08-25 : image d'artiste reprise de n'importe quel événement de la réponse, sinon 1 GET de repli sur le profil /artists/<nom> (100 % constaté sur l'échantillon) ; rotation BIT_ARTIST_MAX/sync",181   "acces_legal": "API publique Bandsintown (app_id d'identification) — usage index + lien vers la fiche originale",182   "couverture": "Concerts au Québec des artistes en tournée connus de la base",183   "cadence": "horaire (watcher PM2, rotation d'artistes)",184   "statut": "actif"185  },186  {187   "id": "gatineau",188   "name": "Ville de Gatineau — Calendrier officiel",189   "url": "https://calendrier.gatineau.cloud",190   "type": "municipal",191   "extraction": "API JSON interne POST /calendrier/json/evenements.aspx (1 requête) — dates UTC→locale, lieux et images ~100 %. RÉACTIVÉE 2026-08-25 (l'abandon visait l'open data, mort ; le calendrier applicatif est vivant)",192   "acces_legal": "application municipale publique, robots: all",193   "couverture": "Gatineau (Outaouais)",194   "cadence": "quotidien",195   "statut": "actif"196  },197  {198   "id": "levis",199   "name": "Ville de Lévis — Calendrier des événements",200   "url": "https://levis.ca/fr/calendrier-des-evenements",201   "type": "municipal",202   "extraction": "GraphQL public du site (queryToken de lecture extrait de la page à chaque run). RÉACTIVÉE 2026-08-25 (l'abandon visait le WAF sur GET — l'API GraphQL publique passe)",203   "acces_legal": "API du site municipal public, jeton public, robots.txt permissif",204   "couverture": "Lévis (Chaudière-Appalaches)",205   "cadence": "quotidien",206   "statut": "actif"207  },208  {209   "id": "terrebonne",210   "name": "Ville de Terrebonne — Calendrier",211   "url": "https://terrebonne.ca/calendrier-des-evenements/",212   "type": "municipal",213   "extraction": "API REST wp-json/wp/v2/event via Scrapfly (Cloudflare), 3-5 appels/sync. RÉACTIVÉE 2026-08-25",214   "acces_legal": "API publique du site municipal ; anti-bot contourné avec volumes minimes",215   "couverture": "Terrebonne (Lanaudière)",216   "cadence": "quotidien",217   "statut": "actif"218  },219  {220   "id": "lavalweb",221   "name": "Ville de Laval — calendrier vivant laval.ca",222   "url": "https://www.laval.ca/calendrier-activites/",223   "type": "municipal",224   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = WordPress rendu serveur, pagination ?findstr[group]=events&findstr[page]=N (58 pages × ~8 cartes ≈ 460 activités à venir mesurées) ; l'API REST /wp-json/wp/v2/events (764 fiches) ne publie PAS la date de l'événement → listes SSR retenues ; volume mesuré ~460 ; couverture = activités municipales/culturelles/sportives Laval ; robots.txt lu : Disallow /wp-admin/ seulement ; effort ●●.",225   "extraction": "listes SSR paginées (cartes .event-item : date FR « 18 août 2026 | 18 h » → date + heure, titre, lieu, lien, image lazy) + fiches détail incrémentales (cache data/lavalweb_cache.json, LAVALWEB_FICHE_MAX/sync, re-visite 7 j) : og:description ; GPS via annuaire de salles + géocodeur",226   "acces_legal": "robots.txt laval.ca : Disallow /wp-admin/ seulement — pages calendrier publiques, GET throttlés 0,5 s, identification honnête",227   "couverture": "Activités municipales, Laval (remplace le jeu Données Québec mort à la source depuis 2025-12)",228   "cadence": "horaire (watcher PM2, incrémental)",229   "statut": "actif"230  },231  {232   "id": "outaouais",233   "name": "Tourisme Outaouais — calendrier des événements (ATR)",234   "url": "https://tourismeoutaouais.com/calendrier-des-evenements",235   "type": "tourisme-regional",236   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = site Astro, la page calendrier embarque TOUT le calendrier dans les props sérialisées de l'îlot CalendrierDesEvenements (162 événements dont 25 futurs mesurés) — 1 GET/sync ; l'API GraphQL admin.tourismeoutaouais.com exige un jeton (403) ; robots.txt lu : Allow / ; effort ●.",237   "extraction": "props JSON de l'îlot Astro (1 GET, tout le calendrier) + fiches internes /attraits/<slug> des événements À VENIR, incrémentales (OUT_FICHE_MAX/sync, re-visite 7 j) : description, adresse+ville (div.address), site web officiel ; ni heure ni tarif → jamais inventés",238   "acces_legal": "robots.txt : User-agent: * / Allow: / — GET direct throttlé 0,8 s, identification honnête, lien vers la fiche/site officiel",239   "couverture": "Festivals et événements, Outaouais (337 fiches seulement au baseline régional)",240   "cadence": "horaire (watcher PM2)",241   "statut": "actif"242  },243  {244   "id": "lanaudiere",245   "name": "Tourisme Lanaudière — événements (ATR)",246   "url": "https://lanaudiere.ca/fr/evenements-lanaudiere",247   "type": "tourisme-regional",248   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = CMS Umbraco, liste SSR limitée à ~10 cartes (44 résultats annoncés, reste en JS) → passage par le SITEMAP officiel (83 URLs de fiches fr mesurées) ; fiches structurées (member-title-1-1 : titre, plage de dates FR, municipalité) + og:image Tourinsoft + og:description ; robots.txt lu : Disallow /*? (aucune URL à paramètres requêtée) + Crawl-delay 2 s (respecté : GET séquentiels 2,1 s) ; effort ●●.",249   "extraction": "sitemap.xml (1 GET, ~85 fiches FR) → fiches incrémentales (LAN_FICHE_MAX/sync, re-visite 7 j, cache v2, Crawl-delay 2 s honoré) : en-tête member-title (titre, plage FR, municipalité), description expandable-intro, adresse+CP member-coords, organisateur, site web member-website, audience « Clientèle admise », og:image",250   "acces_legal": "robots.txt : Disallow /*? + Crawl-delay: 2 — respectés à la lettre (aucun paramètre d'URL, 2,1 s entre GET), identification honnête",251   "couverture": "Festivals et événements, Lanaudière",252   "cadence": "horaire (watcher PM2, incrémental)",253   "statut": "actif"254  },255  {256   "id": "saguenaysorties",257   "name": "Sorties Saguenay — portail événementiel de la Ville",258   "url": "https://sorties.saguenay.ca/",259   "type": "municipal",260   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = portail SSR de la Ville de Saguenay motorisé par les données La Vitrine (médias lvc-medias.lavitrine.com) ; pagination POST /ajax/plus (36 séances/lot, ~300-400 séances mesurées entre offset 0 et 500) ; détails POST /ajax/details (description + adresse) ; chaque carte = une séance horodatée (date + heure + ville + salle) ; robots.txt : non publié (page de maintenance) → volumes modestes et throttle 0,8 s ; effort ●●. Remplace le CSV Données Québec mort (2022-06).",261   "extraction": "POST /ajax/plus paginé (SAG_BATCH_MAX lots) : discipline, date FR, heure, titre, « Ville, Salle », image, detail-id → une fiche PAR séance ; détails incrémentaux POST /ajax/details (cache data/saguenaysorties_cache.json, SAG_DETAIL_MAX/sync, re-visite 7 j) : description, adresse civique",262   "acces_legal": "portail public municipal — POST throttlés 0,8 s, identification honnête, lien fiche officielle /festivals?id=<id> ; recoupement lavitrine/lepointdevente géré par dedup_key",263   "couverture": "Spectacles, expositions, festivals — Saguenay et environs (Saguenay–Lac-Saint-Jean)",264   "cadence": "horaire (watcher PM2, incrémental)",265   "statut": "actif"266  },267  {268   "id": "bassaintlaurent",269   "name": "Tourisme Bas-Saint-Laurent — événements (ATR)",270   "url": "https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/",271   "type": "tourisme-regional",272   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = WordPress (Bedrock) rendu serveur, 27 cartes complètes sur la liste (titre, plage de dates FR, municipalité, image) ; fiches avec GPS exact embarqué + og:description ; robots.txt lu : rien d'interdit sur /fr/ ; volume mesuré 27 ; couverture = BSL (168 fiches seulement au baseline) ; effort ●.",273   "extraction": "liste SSR (1 GET, cartes .card--type-event, garde-fou ajax-load-more__end-page) + fiches incrémentales (BSL_FICHE_MAX/sync, re-visite 7 j, cache v2) : window.locations JSON → adresse civique, ville, CP, GPS exact, site web ; description longue « À propos » (fallback og:description)",274   "acces_legal": "pages publiques de l'ATR — GET throttlés 0,8 s, identification honnête, lien fiche originale",275   "couverture": "Festivals et événements, Bas-Saint-Laurent",276   "cadence": "horaire (watcher PM2, incrémental)",277   "statut": "actif"278  },279  {280   "id": "quebecanimee",281   "name": "Québec animée — Ville de Québec",282   "url": "https://animee.ville.quebec.qc.ca/activites/",283   "type": "municipal",284   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = portail municipal SSR ; la liste /activites/ porte TOUT en attributs data- (date-debut/date-fin ISO, arrondissement, catégories, prix « Gratuit ») : 126 séances / 73 activités mesurées, 1 GET ; fiches pour description/lieu ; le calendrier général ville.quebec.qc.ca n'expose pas de flux structuré (vérifié) ; effort ●. Comble l'absence de source municipale/gratuite de la 2ᵉ ville (inventaire Capitale-Nationale ~100 % billetteries).",285   "extraction": "liste HTML rendue serveur + fiches détail incrémentales (QA_FICHE_MAX/sync, cache v2) : heure via boutons data-date/data-heure (62 %), salle réelle .lieu-nom (74 %, zéro bruit), adresse civique .lieu-adresse (72 %) pour le géocodage aval ; venue/heures des entrées v1 muselés (bruit « Lieux » du menu) en attendant le backfill",286   "acces_legal": "site municipal public rendu serveur — GET throttlés 0,8 s, identification honnête, lien fiche officielle",287   "couverture": "Activités gratuites/à faible coût, Ville de Québec (Capitale-Nationale)",288   "cadence": "horaire (watcher PM2, incrémental)",289   "statut": "actif"290  },291  {292   "id": "placedesarts",293   "name": "Place des Arts — calendrier multi-salles",294   "url": "https://www.placedesarts.com/programmation",295   "type": "salle-de-spectacle",296   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = Craft CMS rendu serveur ; /programmation liste 97 spectacles (6 salles) ; chaque fiche embarque #eventbannerdata + #eventGTM (JSON : titre, salle, producteur, discipline, plage de dates) + barre latérale des représentations avec heure ET PRIX RÉELS (« 33 $ à 97,50 $ ») — 23 séances mesurées sur la fiche sonde ; robots.txt lu : Disallow /cpresources/ /vendor/ /cache/ seulement ; effort ●●. Meilleure candidate unitaire de la famille « salles » (audit §C).",297   "extraction": "liste /programmation (1 GET) → fiches /evenement/<slug> incrémentales (cache data/placedesarts_cache.json, PDA_FICHE_MAX/sync, re-visite 7 j) : une fiche Sorti-Ka PAR représentation (date + heure + prix réels), salle précise, producteur → organisateur, discipline → catégories",298   "acces_legal": "robots.txt : Disallow /cpresources/ /vendor/ /cache/ seulement — GET throttlés 0,8 s, identification honnête, lien billetterie officielle ; recoupement lavitrine/evenko géré par dedup_key",299   "couverture": "Spectacles des 6 salles de la Place des Arts, Montréal (~97 spectacles, plusieurs centaines de séances)",300   "cadence": "horaire (watcher PM2, incrémental)",301   "statut": "actif"302  },303  {304   "id": "lhjmq",305   "name": "LHJMQ — matchs des équipes québécoises",306   "url": "https://theqmjhl.ca/",307   "type": "sport",308   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = API HockeyTech « modulekit » (lscluster.hockeytech.com, JSON, clé publique de la ligue embarquée dans ses propres sites) — saison 2026-27 : 580 matchs mesurés dont ~384 à domicile dans 12 villes QC (Chicoutimi, Baie-Comeau, Rimouski, Rouyn-Noranda, Val-d'Or, Gatineau, Shawinigan, Drummondville, Victoriaville, Boisbriand, Sherbrooke, Québec) ; date + heure + aréna structurés ; 2 GET/sync ; effort ●. Fort levier d'équilibre régional (Côte-Nord, Abitibi, BSL…).",309   "extraction": "API modulekit (view=seasons puis view=schedule) : matchs à domicile au Québec seulement → titre « LHJMQ : Visiteur c. Receveur », date + heure locales, aréna, ville, statut annulé si publié ; prix non publié → jamais inventé",310   "acces_legal": "flux JSON public qui motorise le site officiel de la ligue — usage index + lien fiche de match officielle (theqmjhl.ca/gamecentre/<id>), GET throttlés 1 s, identification honnête",311   "couverture": "~384 matchs/saison à domicile au Québec, 12 villes dans 10 régions",312   "cadence": "horaire (watcher PM2)",313   "statut": "actif"314  },315  {316   "id": "sallesjsonld",317   "name": "Salles de spectacle — moteur générique JSON-LD Event",318   "url": "https://grandtheatre.qc.ca/programmation",319   "type": "salle-de-spectacle",320   "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : moteur configurable (data/salles_jsonld.json, patron stores.json de fabri-ka) pour la longue traîne des salles qui publient schema.org/Event sur leurs fiches. Sondage 2026-08-19 : AVEC Event JSON-LD = Grand Théâtre de Québec (108 fiches listées), Théâtre du Trident, Théâtre Capitole (via gestev.com) ; SANS (écartées de la config, re-sonder plus tard) = Palais Montcalm, Le Diamant, Impérial Bell, MTelus/Corona/Club Soda (evenko, déjà couverts), Petit Champlain / Albert-Rousseau (plateforme JS « pages/collections ») ; robots.txt lu salle par salle avant ajout ; effort ●● (moteur) puis ● par salle.",321   "extraction": "par salle configurée : page(s) de programmation → liens de fiche (motif regex) → fiches incrémentales (cache data/sallesjsonld_cache.json, SALLES_FICHE_MAX/sync partagé, re-visite 7 j) → blocs JSON-LD @type Event (nom, dates horodatées, salle, adresse, offres → prix, statut, image) ; heure « T00:00:00 » traitée comme placeholder. Vague 2 2026-08-25 : 17 salles configurées (+13 validées live : Théâtre Denise-Pelletier, MBAM, MNBAQ, Musée de la civilisation, Pointe-à-Callière, Cinémathèque québécoise, TOHU, Spect'Art Rimouski, Hector-Charland, Amphithéâtre Cogeco, Premier Acte, Maison de la littérature, Chasse-galerie Lavaltrie) ; liste du Trident réparée (page d'accueil) ; ~40 salles sondées et écartées (sans JSON-LD, heures faussées ou SSR intermittent — consignées dans le _comment de la config)",322   "acces_legal": "robots.txt vérifié PAR SALLE avant ajout à la config (consigné dans data/salles_jsonld.json) — GET throttlés 0,8 s, identification honnête, lien fiche originale",323   "couverture": "Longue traîne des salles de spectacle QC (amorce : Grand Théâtre de Québec, Trident, Capitole — Capitale-Nationale)",324   "cadence": "horaire (watcher PM2, incrémental)",325   "statut": "actif"326  },327  {328   "id": "mauricie",329   "name": "Tourisme Mauricie — calendrier des événements (ATR)",330   "url": "https://tourismemauricie.com/evenements",331   "type": "tourisme-regional",332   "extraction": "API JSON interne du thème (GET /wp-json/acolyte/v1/get-events-data?lang=fr&page=N, ~174 événements : titre, url, ville, salle, catégories, date FR, GPS, images) + fiches détail incrémentales (JSON-LD Event : date ISO, adresse, description ; cache, MAU_FICHE_MAX=12, re-visite 7 j) ; région par la VILLE (l'ATR couvre des villes du Centre-du-Québec). RÉHABILITÉE 2026-08-25 (écartée Phase 3 pour rendu JS — l'endpoint XHR interne est percé)",333   "acces_legal": "API REST WordPress publique (aucune auth), robots.txt sans interdiction — GET throttlés, UA honnête",334   "couverture": "Mauricie (+ villes limitrophes du Centre-du-Québec)",335   "cadence": "quotidienne",336   "statut": "actif"337  },338  {339   "id": "laurentides",340   "name": "Tourisme Laurentides — calendrier des événements (ATR)",341   "url": "https://www.laurentides.com/evenements/",342   "type": "tourisme-regional",343   "extraction": "API REST /wp-json/wp/v2/mec-events (~228 fiches : titre, description, image) via auto-escalade anti-bot (WAF 403 → Scrapfly ASP) ; dates+heures réelles, tarif, salle et adresse via fiches détail MEC incrémentales pilotées par « modified » (cache, LAU_FICHE_MAX=10/sync). RÉHABILITÉE 2026-08-25 (écartée Phase 3 pour WAF)",344   "acces_legal": "API REST publique ; WAF contourné par proxy/Scrapfly avec requêtes throttlées et plafonnées — UA honnête, lien vers la fiche originale",345   "couverture": "Laurentides",346   "cadence": "quotidienne (backfill des fiches ~3 semaines, puis incrémental)",347   "statut": "actif"348  },349  {350   "id": "gaspesie",351   "name": "Tourisme Gaspésie — événements (ATR)",352   "url": "https://www.tourisme-gaspesie.com/fr/festival-et-evenements/",353   "type": "tourisme-regional",354   "extraction": "Scrapfly (asp, country=ca, sans render_js) : liste (1 crédit) + fiches incrémentales (GASP_FICHE_MAX/sync, re-visite 14 j, cache v2) — titre h1, plage FR, og:description/og:image + JSON-LD Organization → GPS exact, adresse/ville/CP structurés, site web officiel",355   "acces_legal": "Contenu public de l'ATR ; WAF contourné avec modération (budget ≤ 9 crédits Scrapfly/sync, consigné Phase 4), attribution + lien vers la fiche officielle",356   "couverture": "Gaspésie–Îles-de-la-Madeleine",357   "cadence": "horaire (watcher PM2) — cache 14 j, ~2 fiches re-visitées/j",358   "statut": "actif",359   "note": "RÉACTIVÉE 2026-08-21 (Phase 4) : la vague Scrapfly consignée annoncée en Phase 3. Ancienne URL /evenements-gaspesie.html morte (404) → /fr/festival-et-evenements/ (28 fiches, ~6 datées à l'amorce)."360  },361  {362   "id": "tuxedobillet",363   "name": "Tuxedo Billet — billetterie québécoise multi-tenants",364   "url": "https://www.tuxedobillet.com/",365   "type": "billetterie",366   "extraction": "Acteur Apify maison gorgeous_thistle/ka-tuxedo (Playwright, proxy résidentiel CA, code versionné dans apify/ka-tuxedo/) : les tenants <org>.tuxedobillet.com sont des SPA Angular sur Firebase (RTDB verrouillée, 401 même avec jeton anonyme) → rendu navigateur obligatoire. 1 run/TUX_TTL_HOURS (20 h), 29 tenants QC configurés dans data/tuxedo_tenants.json (ville vérifiée). Liste sans heure ni prix → jamais inventés. MAJ 2026-08-25 : fiches /main/<slug> rendues Scrapfly render_js (TUX_FICHE_MAX=20/sync, re-visite 7 j, version v2 = mois janv./févr. compris, +71 événements) : 1 Event par séance datée avec HEURE, statut COMPLET→soldout, catégorie, description. Prix et adresse non publiés (choix des sièges seulement) → jamais inventés. 35 tenants QC (+6 : chateauscenes, azimutdiffusion, culture-umontreal, mcgillathletics, osjm, lesaintjean) ; 10 tenants à liens /Web/ incompatibles consignés dans le _comment du fichier tenants",367   "acces_legal": "Billetteries publiques ; rendu navigateur modéré (1 page/tenant/run, ~1 run par jour), lien d'achat vers la fiche officielle du tenant",368   "couverture": "29 salles/diffuseurs QC : Théâtre Outremont, Le Gesù, Centre Pierre-Péladeau, FTA, FIMAV, Espace Théâtre (Mont-Laurier), L'Anglicane (Lévis), Chandler, Lac-Mégantic, Îles-de-la-Madeleine…",369   "cadence": "quotidienne (TTL 20 h dans le watcher horaire)",370   "statut": "actif",371   "note": "RÉACTIVÉE 2026-08-21 (Phase 4) : l'apex reste vide mais les tenants vivent. Première source consommée via un acteur Apify (billetterie dure à crawler). Énumération des tenants non exhaustive — compléter via Serper/config."372  },373  {374   "id": "clubs-pros",375   "name": "Clubs professionnels (CF Montréal, Alouettes, Rocket, Victoire…)",376   "url": "https://www.cfmontreal.com/",377   "type": "sport",378   "extraction": "n/d",379   "acces_legal": "n/d",380   "couverture": "Montréal/Laval (MLS, LCF, AHL, LPHF)",381   "cadence": "n/d",382   "statut": "abandonnee",383   "note": "ÉCARTÉE 2026-08-19 (Phase 3) : les matchs à domicile passent déjà par les billetteries connectées (evenko/ticketmaster : Canadiens 74 fiches, Remparts 31…) — des connecteurs de ligue dédiés (MLS/LCF/AHL) apporteraient surtout des doublons pour ~150 fiches nettes/an. La LHJMQ, elle, est connectée (vrai levier régional). À revisiter si un besoin statut/heure officiel apparaît."384  },385  {386   "id": "monteregie",387   "name": "Tourisme Montérégie — événements (ATR)",388   "url": "https://www.tourisme-monteregie.qc.ca/membre/categorie/quoi-faire/festivals-et-evenements/",389   "type": "tourisme-regional",390   "extraction": "API REST WP /wp-json/wp/v2/cpt_event (per_page=100) + taxonomie /event-categorie (1 GET → catégories brutes) — titre, description (content, fallback excerpt), plage FR, GPS ACF, site web, image ; fiches incrémentales (MTG_FICHE_MAX/sync, re-visite 7 j) : JSON-LD Event → adresse, ville, CP",391   "acces_legal": "API REST WordPress publique (aucune auth), robots.txt sans interdiction sur /wp-json/ — GET throttlés 0,8 s, UA honnête",392   "couverture": "Montérégie (~78 fiches à venir, vérifié 2026-08-21)",393   "cadence": "horaire (watcher PM2)",394   "statut": "actif"395  },396  {397   "id": "centreduquebec",398   "name": "Tourisme Centre-du-Québec — événements (ATR)",399   "url": "https://tourismecentreduquebec.com/evenements/",400   "type": "tourisme-regional",401   "extraction": "liste rendue serveur (1 GET, ~9 fiches) ; fiches incrémentales (CDQ_FICHE_MAX=10/sync, re-visite 7 j, cache v2) : champs <small> Adresse/Ville/Entreprise (→ organisateur), description event_details_row, « Programme » → catégories brutes, og:image. Href « site web » vide à la source ; ni heure, ni GPS, ni tarif → jamais inventés",402   "acces_legal": "Site public de l'ATR, robots.txt sans interdiction — GET throttlés 0,8 s, UA honnête",403   "couverture": "Centre-du-Québec (première source de la région — 0 fiche avant connexion ; ~10 fiches)",404   "cadence": "horaire (watcher PM2)",405   "statut": "actif"406  },407  {408   "id": "chaudiereappalaches",409   "name": "Tourisme Chaudière-Appalaches — festivals et événements (ATR)",410   "url": "https://chaudiereappalaches.com/planifier-votre-sejour/ete-automne/festivals-et-evenements/",411   "type": "tourisme-regional",412   "extraction": "liste SSR paginée (?listpage=1..3) → fiches incrémentales (CHA_FICHE_MAX=12/sync, re-visite 7 j, cache v2) : JSON-LD Event complet (dates ISO, description, adresse, ville, CP, GPS, images) + payload « const HwSheet » → site web officiel et tarif textuel (price_label brut) ; heure non publiée (openingPeriods.hasHours=false)",413   "acces_legal": "Site public de l'ATR, robots.txt sans interdiction sur /planifier-votre-sejour/ — GET throttlés 0,8 s, UA honnête",414   "couverture": "Chaudière-Appalaches (~36 fiches à venir, vérifié 2026-08-21)",415   "cadence": "horaire (watcher PM2)",416   "statut": "actif"417  },418  {419   "id": "ticketacces",420   "name": "TicketAcces.net — billetterie régionale québécoise",421   "url": "https://www.ticketacces.net/fr/portail/index.cfm",422   "type": "billetterie",423   "extraction": "HTML ColdFusion (cp1252) : annuaire complet des organisations du portail (filtre Québec — 12 orgs NB + 1 ON exclues) + calendrier AGRÉGÉ en 4 GET : 1 Event par représentation datée (titre, date+heure FR, salle, ville, image). Fiches incrémentales (TA_DETAIL_MAX=47/sync = 1 par hôte, re-visite 7 j, version de parse « v ») : og:description, ADRESSE CIVIQUE de la salle (ville suffixée retirée → géocodage aval), prix plancher (les « 0,00 $ » écartés). Crawl-delay 120 s/hôte honoré",424   "acces_legal": "Billetterie publique, robots.txt sans interdiction sur le portail (vérifié 2026-08-21) ; GET throttlés 1 s, UA honnête, cookie de détection ColdFusion géré par session, lien d'achat vers la fiche officielle",425   "couverture": "47 organisations QC — dont 14 en Abitibi-Témiscamingue (Agora des Arts, Théâtre du cuivre, culture Val-d'Or/Amos/La Sarre/Malartic, Théâtre du Rift…), Bas-Saint-Laurent (Océanic, 3L), Côte-Nord (Drakkar), Charlevoix (Domaine Forget), Nord-du-Québec (Lebel-sur-Quévillon)… ~1 300 séances (vérifié 2026-08-21)",426   "cadence": "horaire (watcher PM2)",427   "statut": "actif"428  },429  {430   "id": "ovation",431   "name": "Réseau Ovation — billetterie québécoise multi-salles",432   "url": "https://reseau.ovation.ca/",433   "type": "billetterie",434   "extraction": "Sous-site mobile m.ovation.ca (HTML rendu serveur, AUCUN anti-bot) : par organisation (codes base36 validés par balayage, config data/ovation_orgs.json), /fr/Search/AllEvents paginé (?pageNumber=N) → 1 eventId = 1 représentation ; fiches fragment EventDescription (≈5 Ko, OVA_FICHE_MAX=40/sync) : date pleine FR + heure, catégories, ARTISTES (liens EventsByPerformer), description, salle + adresse + ville + code postal. Prix non exposé → jamais inventé. MAJ 2026-08-25 : prix NON PUBLIÉS (pages Event mobile+desktop sans aucun montant ni JSON-LD offers ; tarifs uniquement sous /event/tickets, Disallow robots.txt avec /api/) → jamais requêté, jamais inventé ; re-balayage des organisations sans nouveauté",435   "acces_legal": "Billetterie publique sans auth ; GET throttlés 0,7 s, UA honnête, lien d'achat vers la fiche officielle",436   "couverture": "26 organisations 100 % QC : Salle Albert-Rousseau, Petit Champlain, Diffusion Saguenay, Gatineau (Odyssée, Jean-Despréz), Vieux Terrebonne, Palace de Granby, Vieux Clocher Magog/Waterloo, La Tuque, Festival Western de St-Tite, clubs LHJMQ/LNAH…",437   "cadence": "horaire (watcher PM2)",438   "statut": "actif"439  },440  {441   "id": "ticketpro",442   "name": "Ticketpro — billetterie canadienne (tenants Québec)",443   "url": "https://www.ticketpro.ca/",444   "type": "billetterie",445   "extraction": "API JSON publique de la nouvelle plateforme SPA par tenant (<org>.ticketpro.ca/api/v1/pages, aucun anti-bot ni rendu JS) : 1 fiche par spectacle avec titre, artiste, description, image, lieu complet (adresse, ville, code postal, lat/lng), toutes les dates horodatées, tags et drapeaux cancelled/soldout → 1 Event par (page, date à venir). 6 tenants QC dans data/ticketpro_tenants.json (tproqc agrège la province mais pas tprotsd), dédup inter-tenants par id de page. Lieux de restauration (soupers-spectacles St-Denis) et musée à créneaux exclus par config. startingPrice toujours 0 → aucun prix émis. MAJ 2026-08-25 : startingPrice vide dans la liste MAIS tarifs réels publics en 2 GET/spectacle (détail /api/v1/pages/<id> → offre ?options=prices) : priceLevels.price_min en cents (taxes+frais inclus) → prix plancher (92,8 % des séances) + statut PAR séance (saleState, séances datées sans heure → repli au jour) ; cache data/ticketpro_cache.json, TP_PRICE_MAX=40/sync, re-visite 3 j ; 8 tenants QC (+arsenalcontemporarysale, +lefifa)",446   "acces_legal": "Billetterie publique ; robots.txt n'interdit que /admin/ /gui/ /report/ (vérifié 2026-08-22) ; API du site officiel consommée telle quelle, GET throttlés 1 s, UA honnête, lien d'achat vers la fiche officielle /fr/pages/<id> du tenant",447   "couverture": "Théâtre St-Denis + Studio St-Denis (Montréal), Fun Nation (Salle Pierre-Mercure, Monument-National, Club Soda), ExpoCité (Québec), Salle André-Gagnon (La Pocatière), Palais des congrès de Montréal, La Belle Église de Chertsey, Théâtre Rialto, Huntingdon… ~200 spectacles / ~1 100 séances datées (vérifié 2026-08-22)",448   "cadence": "horaire (watcher PM2)",449   "statut": "actif"450  },451  {452   "id": "zeffy",453   "name": "Zeffy — billetterie OSBL",454   "url": "https://www.zeffy.com/",455   "type": "billetterie",456   "extraction": "sitemap des organisations (api.zeffy.com/sitemap/organizations/sitemap-0.xml, ~4 400 pages fr-CA/en-CA) → pages org rendues serveur (__NEXT_DATA__ organizationPage.upcomingEvents : dates UTC, adresse, image, URL) filtrées « , QC » et formCategory=Event, puis fiches billetterie JSON-LD offers[].price pour les tarifs réels ; incrémental cache 7 j, plafonds ZEFFY_ORG_MAX=400 / ZEFFY_DETAIL_MAX=80. RÉACTIVÉE 2026-08-25 (le sitemap billets était infaisable ; les pages d'organisations sont la bonne surface)",457   "acces_legal": "robots.txt Disallow: /*=$ uniquement (aucune URL visée) + sitemaps publiés ; GET throttlés, identification honnête, pas d'anti-bot constaté",458   "couverture": "~100-200 événements OSBL QC actifs (galas, spectacles-bénéfice, ateliers communautaires), toutes régions",459   "cadence": "quotidienne",460   "statut": "actif"461  },462  {463   "id": "showpass",464   "name": "Showpass — billetterie canadienne",465   "url": "https://www.showpass.com/",466   "type": "billetterie",467   "extraction": "API JSON publique /api/public/events/ paginée, couverture du Québec par 10 points géo (location__point_location=lat,lng,rayon + starts_on__gte), filtre province=QC côté connecteur ; heure locale via local_starts_on ; tarifs ticket_types[].price. RÉACTIVÉE 2026-08-25 (l'écartement « aucun filtre géo » est invalidé — le paramètre fonctionne)",468   "acces_legal": "robots.txt Allow: /api/ (API publique explicitement autorisée), GET throttlés 0,8 s, identification honnête",469   "couverture": "~30-40 événements QC actifs (soirées, croisières, festivals, Candlelight) — toutes régions balayées",470   "cadence": "quotidienne",471   "statut": "actif"472  },473  {474   "id": "weezevent",475   "name": "Weezevent — billetterie libre-service",476   "url": "https://www.weezevent.com/",477   "type": "billetterie",478   "extraction": "—",479   "acces_legal": "robots.txt permissif mais aucune surface de découverte publique",480   "couverture": "minisites my.weezevent.com avec JSON-LD Event complet, mais non énumérables (sitemap = 28 URLs tournantes France, pas de recherche publique, API par organisateur)",481   "cadence": "—",482   "statut": "abandonnee",483   "note": "ÉCART CONFIRMÉ 2026-08-25 : aucune surface d'énumération publique — tout connecteur dépendrait de l'index Google. Les gros clients QC sont déjà captés par les ATR/agrégateurs."484  },485  {486   "id": "accesculture",487   "name": "Accès culture — réseau culturel de Montréal",488   "url": "https://www.accesculture.com/",489   "type": "agregateur",490   "extraction": "—",491   "acces_legal": "—",492   "couverture": "AUCUNE : domaine recyclé (ferme SEO hôtels) hébergeant une copie fossilisée du site 2015 ; toute date « déduite » serait fabriquée",493   "cadence": "—",494   "statut": "abandonnee",495   "note": "RE-SONDÉE 2026-08-25 : domaine squatté, contenu figé 2015 (dates réelles : mars-mai 2015) — connecteur retiré pour éviter la fabrication de dates. L'offre des maisons de la culture reste couverte par montreal + lavitrine."496  },497  {498   "id": "cotenord",499   "name": "Tourisme Côte-Nord — événements (ATR)",500   "url": "https://www.tourismecote-nord.com/fr/activites/culture-et-decouverte/evenements-et-spectacles/",501   "type": "tourisme-regional",502   "extraction": "JSON embarqué « var fiches » de la page liste (1 GET/sync : titre, description, dates ISO, ville, adresse, GPS, tarif, site web) + fiches détail incrémentales pour l'image (cache, CN_FICHE_MAX=10, re-visite 7 j)",503   "acces_legal": "Pages publiques de l'ATR, robots.txt « Allow: / » — GET throttlés, UA honnête, lien vers la fiche originale",504   "couverture": "Côte-Nord (Manicouagan + Duplessis)",505   "cadence": "hebdomadaire",506   "statut": "actif"507  },508  {509   "id": "abitibi",510   "name": "Tourisme Abitibi-Témiscamingue — festivals et événements (ATR)",511   "url": "https://abitibi-temiscamingue.org/festivals-et-evenements/",512   "type": "tourisme-regional",513   "extraction": "Pages liste SSR (3-4 pages × 12 cartes : titre, plage de dates FR, ville, image Tourinsoft) via auto-escalade anti-bot (Cloudflare challenge → Scrapfly ASP), budget ABT_PAGE_MAX=4 requêtes/sync, aucune fiche détail",514   "acces_legal": "Pages publiques de l'ATR — requêtes throttlées et plafonnées (coût Scrapfly), UA honnête, lien vers la fiche originale",515   "couverture": "Abitibi-Témiscamingue",516   "cadence": "hebdomadaire",517   "statut": "actif"518  },519  {520   "id": "ilesdelamadeleine",521   "name": "Tourisme Îles-de-la-Madeleine — festivals et événements (ATR)",522   "url": "https://www.tourismeilesdelamadeleine.com/fr/decouvrir-les-iles/experiences/culture/festivals-et-evenements/",523   "type": "tourisme-regional",524   "extraction": "Cartes SSR de la liste (titre, dates FR, catégorie, image) + fiches détail incrémentales (microdonnées schema.org : adresse/ville/CP, description, dates ; cache, IDM_FICHE_MAX=10, re-visite 7 j)",525   "acces_legal": "Pages publiques de l'ATR, robots.txt permissif — GET throttlés, UA honnête, lien vers la fiche originale",526   "couverture": "Îles-de-la-Madeleine",527   "cadence": "hebdomadaire",528   "statut": "actif"529  },530  {531   "id": "charlevoix",532   "name": "Tourisme Charlevoix — calendrier des événements (ATR)",533   "url": "https://www.tourisme-charlevoix.com/fr/evenements",534   "type": "tourisme-regional",535   "extraction": "Index Algolia public du site (prod_event_fr, clé search-only embarquée dans le JS) : 1 requête/sync (end>=hier) → titre, description, adresse, GPS, catégories, dates+heures réelles ; enrichissement /api/get-event incrémental (image, site web, prix, gratuité ; cache, CHX_FICHE_MAX=20, re-visite 7 j)",536   "acces_legal": "Clé Algolia « search-only » et API publiées par le site lui-même — requêtes throttlées, UA honnête, lien vers la fiche originale",537   "couverture": "Charlevoix (→ Capitale-Nationale)",538   "cadence": "quotidienne",539   "statut": "actif"540  },541  {542   "id": "eeyouistchee",543   "name": "Eeyou Istchee Baie-James — événements (ATR)",544   "url": "https://www.eeyouistcheebaiejames.com/fr/quoi-faire/evenements/",545   "type": "tourisme-regional",546   "extraction": "Cartes SSR de la liste (titre, ville, plage de dates FR, image) + fiches détail incrémentales (description, code postal, site web ; cache, EIB_FICHE_MAX=10, re-visite 7 j)",547   "acces_legal": "Pages publiques de l'ATR (domaine decrochezcommejamais.com → redirection) — GET throttlés, UA honnête, lien vers la fiche originale",548   "couverture": "Eeyou Istchee Baie-James (→ Nord-du-Québec)",549   "cadence": "hebdomadaire",550   "statut": "actif"551  },552  {553   "id": "tourismelaval",554   "name": "Tourisme Laval — événements (ATR)",555   "url": "https://www.tourismelaval.com/explorer-possibilites/evenements/",556   "type": "tourisme-regional",557   "extraction": "Cartes SSR FacetWP (CPT event, 2 pages : titre, plage de dates FR, catégorie, extrait, image) — REST wp/v2/event verrouillé (401 Kadence) et calendrier tribe mort à la source (déc. 2025)",558   "acces_legal": "Pages publiques de l'ATR — GET throttlés, UA honnête, lien vers la fiche originale",559   "couverture": "Laval",560   "cadence": "hebdomadaire",561   "statut": "actif"562  },563  {564   "id": "quebeccite",565   "name": "Québec cité — calendrier des événements (ATR)",566   "url": "https://www.quebec-cite.com/fr/quoi-faire-quebec/evenements",567   "type": "tourisme-regional",568   "extraction": "Index Algolia public du site (default_fr_event_date_start_asc, clé search-only du thème Drupal) : 1 requête/sync (event_date_end>=hier) → titre, résumé, salle, GPS, prix, gratuité, catégories, image, lien officiel ; dates à 12:00 UTC sur tout l'index = jour entier → aucune heure émise",569   "acces_legal": "Clé Algolia « search-only » publiée par le site lui-même — requêtes throttlées, UA honnête, lien vers la fiche originale",570   "couverture": "Région de Québec (→ Capitale-Nationale)",571   "cadence": "quotidienne",572   "statut": "actif"573  },574  {575   "id": "mtlorg",576   "name": "Tourisme Montréal (mtl.org) — festivals et événements (ATR)",577   "url": "https://www.mtl.org/fr/quoi-faire/festivals-et-evenements",578   "type": "tourisme-regional",579   "extraction": "Index Algolia public du site (prod_fr, facettes _sections:Festivals et événements + content_type:product) : 1 requête/sync → titre, description, plages de dates structurées _open_dates, adresse, GPS, sous-catégories, image CDN ; les fiches sans date (salles/attraits) sont écartées",580   "acces_legal": "Clé Algolia « search-only » publiée par le site lui-même — requêtes throttlées, UA honnête, lien vers la fiche originale",581   "couverture": "Montréal",582   "cadence": "quotidienne",583   "statut": "actif"584  },585  {586   "id": "saguenaylacsaintjean",587   "name": "Tourisme Saguenay–Lac-Saint-Jean (ATR)",588   "url": "https://saguenaylacsaintjean.ca/quoi-faire",589   "type": "tourisme-regional",590   "extraction": "n/d",591   "acces_legal": "n/d",592   "couverture": "Saguenay–Lac-Saint-Jean",593   "cadence": "n/d",594   "statut": "abandonnee",595   "note": "ÉCARTÉE 2026-08-25 (vague ATR) : site TYPO3 = annuaire d'attraits SANS calendrier — aucune date d'événement publiée (fiches festivals = horaires d'ouverture seulement, vérifié live + sitemap). La ville de Saguenay reste couverte par saguenaysorties. À re-sonder si l'ATR publie un agenda."596  },597  {598   "id": "troisrivieres",599   "name": "Ville de Trois-Rivières — Calendrier des activités",600   "url": "https://www.v3r.net/activites-et-loisirs/calendrier-des-activites",601   "type": "municipal",602   "extraction": "endpoint JSON public /ajax/wp-queries/archive-activites.php (POST, 1 requête — celui du composant AngularJS ; wp-json 401 contourné proprement). Remplace la source « trois-rivieres » abandonnée (API WP verrouillée)",603   "acces_legal": "site municipal public, robots.txt permissif, identification honnête",604   "couverture": "Trois-Rivières (Mauricie)",605   "cadence": "quotidien",606   "statut": "actif"607  },608  {609   "id": "rimouski",610   "name": "Ville de Rimouski — Événements",611   "url": "https://rimouski.ca/loisirs-culture/activites/evenements",612   "type": "municipal",613   "extraction": "flux RSS étendu du site (1 requête, balises maison startDate/eventTime/location — salle et adresse séparées)",614   "acces_legal": "flux RSS public du site municipal",615   "couverture": "Rimouski (Bas-Saint-Laurent)",616   "cadence": "quotidien",617   "statut": "actif"618  },619  {620   "id": "victoriaville",621   "name": "Ville de Victoriaville — Quoi faire à Victo",622   "url": "https://victoriaville.ca/calendriers-cours-et-ateliers/quoi-faire-a-victo",623   "type": "municipal",624   "extraction": "HTML serveur Craft, navigation ?dateDebut par semaine (VIC_WEEKS=4) ; « 00h00 » = placeholder toute-la-journée → heure None",625   "acces_legal": "page municipale publique, robots.txt permissif",626   "couverture": "Victoriaville (Centre-du-Québec)",627   "cadence": "quotidien",628   "statut": "actif"629  },630  {631   "id": "drummondville",632   "name": "Ville de Drummondville — Calendrier des événements",633   "url": "https://www.drummondville.ca/culture-loisirs-et-sports/calendrier-des-evenements/",634   "type": "municipal",635   "extraction": "HTML serveur Toolset (?wpv_view_count extrait du formulaire + wpv_paged) + fiches (lieu, coût) en cache incrémental (DRU_FICHES=40)",636   "acces_legal": "site municipal public, robots.txt permissif (wp-admin seulement)",637   "couverture": "Drummondville (Centre-du-Québec)",638   "cadence": "quotidien",639   "statut": "actif"640  },641  {642   "id": "granby",643   "name": "Ville de Granby — Calendrier des événements (liste éditoriale)",644   "url": "https://www.granby.ca/fr/calendrier-evenements",645   "type": "municipal",646   "extraction": "HTML serveur (blocs éditoriaux h5 + dates FR + lien externe), parsing tolérant, 1 requête — aucun calendrier structuré à la source (jsonapi désactivé, listing Drupal vide côté serveur)",647   "acces_legal": "site municipal public, robots.txt permissif",648   "couverture": "Granby (Estrie)",649   "cadence": "hebdomadaire",650   "statut": "actif"651  },652  {653   "id": "saintjerome",654   "name": "Ville de Saint-Jérôme — Calendrier",655   "url": "https://www.vsj.ca/calendrier/",656   "type": "municipal",657   "extraction": "HTML serveur FacetWP (?fwp_calendar_dates=<aujourd'hui>&fwp_paged=N, 10 cartes/page) — date, heure, lieu+adresse, description, image",658   "acces_legal": "site municipal public, robots.txt permissif",659   "couverture": "Saint-Jérôme (Laurentides)",660   "cadence": "quotidien",661   "statut": "actif"662  },663  {664   "id": "sainthyacinthe",665   "name": "Ville de Saint-Hyacinthe — Calendrier des événements",666   "url": "https://www.st-hyacinthe.ca/loisirs-et-culture/evenement/calendrier-des-evenements",667   "type": "municipal",668   "extraction": "HTML serveur (?ms=2 « tous les mois », 1 requête) + fiches modales /php/load-modal-info.php en cache incrémental (STH_FICHES=60) : lieu, clientèle, organisateur, gratuité",669   "acces_legal": "site municipal public, GET throttlés, identification honnête",670   "couverture": "Saint-Hyacinthe (Montérégie)",671   "cadence": "quotidien",672   "statut": "actif"673  },674  {675   "id": "rouynnoranda",676   "name": "Ville de Rouyn-Noranda — Événements",677   "url": "https://www.rouyn-noranda.ca/evenements",678   "type": "municipal",679   "extraction": "HTML serveur OctoberCMS + fiches (heures/lieu) en cache ; dates publiées SANS année → résolution « prochaine occurrence » documentée",680   "acces_legal": "site municipal public, robots.txt permissif",681   "couverture": "Rouyn-Noranda (Abitibi-Témiscamingue)",682   "cadence": "quotidien",683   "statut": "actif"684  },685  {686   "id": "shawinigan",687   "name": "Ville de Shawinigan — Calendrier des événements",688   "url": "https://www.shawinigan.ca/loisirs-et-culture/evenements/calendrier/",689   "type": "municipal",690   "extraction": "HTML serveur (plugin tri-evenements, cartes -single et -list, date fiable dans l'URL) + fiches (date de fin, lieu) en cache",691   "acces_legal": "site municipal public, robots.txt permissif",692   "couverture": "Shawinigan (Mauricie)",693   "cadence": "quotidien",694   "statut": "actif"695  },696  {697   "id": "joliette",698   "name": "Ville de Joliette — Événements",699   "url": "https://www.joliette.ca/evenements",700   "type": "municipal",701   "extraction": "HTML serveur OctoberCMS/Blanko /evenements/N + fiches (heures, « Gratuit ») en cache",702   "acces_legal": "site municipal public, robots.txt permissif",703   "couverture": "Joliette (Lanaudière)",704   "cadence": "quotidien",705   "statut": "actif"706  },707  {708   "id": "magog",709   "name": "Ville de Magog — Événements et activités (agenda Google public)",710   "url": "https://www.ville.magog.qc.ca/calendrier/evenements-et-activites/",711   "type": "municipal",712   "extraction": "flux iCal Google public embarqué par la page municipale (1 232 VEVENT, 1 requête) : conversion UTC/TZID/VALUE=DATE + expansion RRULE DAILY/WEEKLY (COUNT/UNTIL/BYDAY) plafonnée à 365 j",713   "acces_legal": "calendrier Google publié publiquement par la Ville sur sa page",714   "couverture": "Magog (Estrie)",715   "cadence": "quotidien",716   "statut": "actif"717  },718  {719   "id": "soreltracy",720   "name": "Ville de Sorel-Tracy — Événements",721   "url": "https://ville.sorel-tracy.qc.ca/evenements",722   "type": "municipal",723   "extraction": "HTML serveur OctoberCMS /evenements/N + fiches (heures, lieu, coût) en cache (SOR_FICHES=40)",724   "acces_legal": "site municipal public, robots.txt permissif",725   "couverture": "Sorel-Tracy (Montérégie)",726   "cadence": "quotidien",727   "statut": "actif"728  },729  {730   "id": "signelaval",731   "name": "Signé Laval — calendrier culturel officiel de Laval",732   "url": "https://signelaval.com/",733   "type": "agregateur",734   "extraction": "sitemap public /sitemap/events/N.xml puis fiches rendues serveur : JSON-LD Event Footlight/artsdata (dates ISO -04:00, lieu, adresse, image IIIF, organisateur ; champs multilingues en liste → variante fr) ; incrémental cache 7 j, plafond SIGNELAVAL_MAX_FETCH",735   "acces_legal": "robots.txt sans Disallow + sitemap public, GET directs throttlés 0,8 s, identification honnête",736   "couverture": "~290 fiches (bibliothèques, spectacles, expositions, plein air — Laval)",737   "cadence": "hebdomadaire",738   "statut": "actif"739  },740  {741   "id": "quoifaire",742   "name": "Quoi faire — agrégateur de sorties québécois",743   "url": "https://quoifaire.com/",744   "type": "agregateur",745   "extraction": "listes HTML rendues serveur /<ville>/evenements (+?page=N, 5 sections villes) puis fiches serveur : dates FR, heure (À confirmer→None), prix publié brut, région touristique, lieu/adresse, lat/lng Google Maps, auditoire, og:image ; incrémental cache 7 j, plafond QUOIFAIRE_DETAIL_MAX=150",746   "acces_legal": "robots.txt Allow: / (seuls /search et admin exclus, non visités), GET throttlés 0,8 s, identification honnête",747   "couverture": "centaines de fiches à venir (Québec, Montréal, Saguenay, Outaouais, Mauricie) — site lent, sections parfois 502 (tolérées)",748   "cadence": "hebdomadaire",749   "statut": "actif"750  },751  {752   "id": "evenementsattractions",753   "name": "Événements Attractions Québec (quebecvacances.com)",754   "url": "https://www.quebecvacances.com/",755   "type": "agregateur",756   "extraction": "sitemap paginé /sitemap.xml?page=1..4 → fiches /fr/evenements/<slug> JSON-LD Event (dates de la prochaine édition, lieu, ville, image Cloudinary) ; anti-bot 403 → chaîne de secours Oxylabs/Scrapfly/Bright Data avec réparation d'encodage UTF-8 ; incrémental cache 14 j, plafond EAQ_DETAIL_MAX=80",757   "acces_legal": "robots.txt User-agent: * / Allow: / ; rate-limiting poli, identification honnête ; coût escalade contenu par cache",758   "couverture": "696 fiches sitemap (festivals/événements membres EAQ, toute la province) — ~1/3 avec dates publiées",759   "cadence": "hebdomadaire",760   "statut": "actif"761  },762  {763   "id": "banq",764   "name": "BAnQ — calendrier des activités",765   "url": "https://www.banq.qc.ca/calendrier/a-venir",766   "type": "agregateur",767   "extraction": "Scrapfly obligatoire (anti-bot Radware) : liste rendue JS → fiches HTML serveur via Scrapfly sans JS, JSON-LD Event complet (dates ISO -04:00, lieu, adresse, image, organisateur, offers.price 0.00 = gratuité publiée) ; incrémental cache 14 j, plafond BANQ_DETAIL_MAX=50",768   "acces_legal": "robots.txt Drupal standard (calendrier non exclu) ; 1 rendu JS + ≤50 fiches par sync, cadence contenue",769   "couverture": "~140 activités à venir (Grande Bibliothèque + centres régionaux — ateliers, conférences, heure du conte)",770   "cadence": "hebdomadaire",771   "statut": "actif"772  }773 ]774}