SPB Git

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.

Vague connecteurs 2026-08-25 : +26 sources actives (10 ATR, 15 municipales, 6 billetteries/agrégateurs), 20 connecteurs enrichis (prix/heures/adresses/images), +13 salles JSON-LD, +8 tenants — 61 sources actives, 22 310 événements actifs

- ATR : cotenord, abitibi, ilesdelamadeleine, charlevoix, eeyouistchee, tourismelaval, quebeccite, mtlorg + réhabilitation mauricie (XHR acolyte) et laurentides (Scrapfly)
- Municipal : gatineau, levis, terrebonne, troisrivieres, rimouski, victoriaville, drummondville, granby, saintjerome, sainthyacinthe, rouynnoranda, shawinigan, joliette, magog, soreltracy
- Billetteries/agrégateurs : showpass (API publique), zeffy (pages orgs __NEXT_DATA__), signelaval, quoifaire, evenementsattractions, banq ; weezevent/accesculture écartés documentés (accesculture retiré : domaine squatté, contenu 2015)
- Enrichis : ticketpro prix 0→93 %, ticketacces adresses+prix, tuxedobillet fiches Scrapfly (+71 evts janv-fév), lavitrine v3 (GPS/prix JSON-LD des représentations), lepointdevente adresses, quebecanimee heures/adresses, sitq og:image/description, montreal images 100 %, bandsintown images, atuvu heures/prix, cantonsdelest 25→596 (pagination AJAX CSRF), 7 autres ATR fiches détail
- sallesjsonld : 17 salles (+13 : Denise-Pelletier, MBAM, MNBAQ, MCQ, Pointe-à-Callière, Cinémathèque, TOHU, Spect'Art, Hector-Charland, Cogeco, Premier Acte, Maison littérature, Chasse-galerie), Trident réparé
- Registre sources.json : 68 entrées, docs/connecteurs régénérés, 131 tests verts

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Aug 25, 2026) parent 84363e1 Browse files

128 changed files +16,147 −1,300

128 changed files
modified data/ovation_orgs.json +1 −1
@@ -1,5 +1,5 @@
1 { 1 {
2− "_comment": "Sorti-Ka — Organisations du Réseau Ovation (m.ovation.ca) à moissonner. Auteur : Simon-Pierre Boucher — contact@spboucher.ai. Codes base36 validés par balayage 000000-00002Z le 2026-08-21 (un code valide répond 200 sur /fr/Search/AllEvents, un invalide 302). Réseau 100 % québécois — ajouter une organisation = un bloc ici, 0 code. Les clubs sportifs à 0 événement hors saison restent listés (la saison les réactive).", 2+ "_comment": "Sorti-Ka — Organisations du Réseau Ovation (m.ovation.ca) à moissonner. Auteur : Simon-Pierre Boucher — contact@spboucher.ai. Codes base36 validés par balayage 000000-00002Z le 2026-08-21 (un code valide répond 200 sur /fr/Search/AllEvents, un invalide 302). Re-balayage 000020-000041 le 2026-08-25 (crawl-delay 30 s respecté) : AUCUN nouveau code valide — le réseau n'a pas ajouté d'organisation depuis. Réseau 100 % québécois — ajouter une organisation = un bloc ici, 0 code. Les clubs sportifs à 0 événement hors saison restent listés (la saison les réactive).",
3 "organisations": [ 3 "organisations": [
4 {"code": "00000O", "nom": "Centre culturel de l'Université de Sherbrooke", "ville": "Sherbrooke"}, 4 {"code": "00000O", "nom": "Centre culturel de l'Université de Sherbrooke", "ville": "Sherbrooke"},
5 {"code": "00000P", "nom": "Maison des Arts Desjardins Drummondville", "ville": "Drummondville"}, 5 {"code": "00000P", "nom": "Maison des Arts Desjardins Drummondville", "ville": "Drummondville"},
modified data/salles_jsonld.json +124 −3
@@ -1,5 +1,5 @@
1 { 1 {
2− "_comment": "Sorti-Ka — Salles à JSON-LD Event (connecteur générique sallesjsonld). Ajouter une salle = 1 bloc : listes (pages programmation), motif (regex des liens de fiche), ville/salle par défaut. robots.txt vérifié salle par salle AVANT ajout (2026-08-19) — voir docs/connecteurs/sallesjsonld.md. Salles sondées SANS JSON-LD Event (ne pas ajouter sans re-sonder) : palaismontcalm.ca, lediamant.ca, imperialbell.com, mtelus.com, clubsoda.ca, theatrecorona.ca (evenko, déjà couvert). Auteur : Simon-Pierre Boucher — contact@spboucher.ai", 2+ "_comment": "Sorti-Ka — Salles à JSON-LD Event (connecteur générique sallesjsonld). Ajouter une salle = 1 bloc : listes (pages programmation), motif (regex des liens de fiche), ville/salle par défaut. robots.txt vérifié salle par salle AVANT ajout (2026-08-19 pour l'amorce, 2026-08-25 pour la vague 2) — voir docs/connecteurs/sallesjsonld.md. Salles sondées SANS JSON-LD Event exploitable (ne pas ajouter sans re-sonder) : palaismontcalm.ca (re-sondé 2026-08-25), lediamant.ca (re-sondé 2026-08-25), imperialbell.com, mtelus.com, clubsoda.ca, theatrecorona.ca (evenko, déjà couvert), duceppe.com (Event sans startDate), rideauvert.qc.ca (startDate epoch 1970), theatrelalicorne.com, theatreprospero.com, quatsous.com, espacego.com, usine-c.com, maisontheatre.com, centaurtheatre.com, segalcentre.org, phi.ca, bordee.qc.ca, theatreperiscope.qc.ca, lesgrosbecs.qc.ca (liste JS), lerift.ca, tangentedanse.ca, agoradanse.com (Event sans startDate), auxecuries.com, casadelpopolo.com, cabaretliondor.com, theatreparadoxe.com, theatrerialto.ca, musee-mccord-stewart.ca, pauline-julien.com, valspec.com, theatregillesvigneault.com (tribe sans LD ; billetterie Tuxedo /Web/), theatredumarais.com, theatredesjardins.com, co-motion.ca, spec.qc.ca, almaspectacles.com, vieuxbureaudeposte.com, theatrebelcourt.com, kameleart.com, maximum90.ca, sallejmd.com, comitedesspectacles.com, cdspectacles.com, festivalenchanson.com, cotecour.ca. Écartées pour HEURES FAUSSÉES (offset menteur : décalage explicite ≠ heure locale affichée) : petittheatre.org (-05:00 l'été), museepop.ca (+00:00 = heure locale). Écartées pour LISTE NON FIABLE : lachapelle.org (SSR intermittent, liens absents du HTML serveur), tnm.qc.ca (Nuxt/Cloudflare : la page d'accueil sert 0 à 31 liens selon le cache ; fiches <saison>.tnm.qc.ca/<saison>/<id> avec Event valide si le rendu revient), theatredaujourdhui.qc.ca (fiches /spectacles/<slug> avec Event valide mais accueil/saisons rendus client ; l'index /spectacles est une ARCHIVE avec dates 1979-2001), cinemabeaubien.com / cinemaduparc.com / cinemadumusee.com (HTTP 523 récurrents). Auteur : Simon-Pierre Boucher — contact@spboucher.ai",
3 "salles": [ 3 "salles": [
4 { 4 {
5 "id": "grandtheatre", 5 "id": "grandtheatre",
@@ -13,11 +13,11 @@
13 { 13 {
14 "id": "trident", 14 "id": "trident",
15 "nom": "Théâtre du Trident", 15 "nom": "Théâtre du Trident",
16− "listes": ["https://www.letrident.com/spectacles/"], 16+ "listes": ["https://www.letrident.com/"],
17 "motif": "letrident\\.com/piece/[a-z0-9-]{3,}", 17 "motif": "letrident\\.com/piece/[a-z0-9-]{3,}",
18 "salle": "Théâtre du Trident", 18 "salle": "Théâtre du Trident",
19 "ville": "Québec", 19 "ville": "Québec",
20− "robots": "Disallow: (vide — tout permis, vérifié 2026-08-19)" 20+ "robots": "Disallow: (vide — tout permis, vérifié 2026-08-19) — /spectacles/ renvoie 404 depuis ≤2026-08-25, liste = page d'accueil (réparé 2026-08-25)"
21 }, 21 },
22 { 22 {
23 "id": "capitole", 23 "id": "capitole",
@@ -37,6 +37,127 @@
37 "salle": "Théâtre Lionel-Groulx", 37 "salle": "Théâtre Lionel-Groulx",
38 "ville": "Sainte-Thérèse", 38 "ville": "Sainte-Thérèse",
39 "robots": "Disallow: (vide — tout permis, Yoast, vérifié 2026-08-22)" 39 "robots": "Disallow: (vide — tout permis, Yoast, vérifié 2026-08-22)"
40+ },
41+ {
42+ "id": "denisepelletier",
43+ "nom": "Théâtre Denise-Pelletier (Montréal)",
44+ "listes": ["https://www.denise-pelletier.qc.ca/pieces/",
45+ "https://www.denise-pelletier.qc.ca/pieces/page/2/"],
46+ "motif": "denise-pelletier\\.qc\\.ca/pieces/(?!page/|feed)[a-z0-9-]{3,}",
47+ "salle": "Théâtre Denise-Pelletier",
48+ "ville": "Montréal",
49+ "robots": "Disallow: /wp-admin/ et *.pdf seulement (vérifié 2026-08-25) — Event/date par représentation (-04:00 exact)"
50+ },
51+ {
52+ "id": "tohu",
53+ "nom": "TOHU — Cité des arts du cirque (Montréal)",
54+ "listes": ["https://tohu.ca/fr/programmation/spectacles?type=evenements",
55+ "https://tohu.ca/fr/programmation/activites-gratuites?type=evenements"],
56+ "motif": "tohu\\.ca/fr/programmation/(?!spectacles|billetterie|festival|scolaire)[a-z0-9-]{3,}",
57+ "salle": "TOHU",
58+ "ville": "Montréal",
59+ "robots": "Disallow: /cpresources/ /vendor/ *type=date* seulement (vérifié 2026-08-25) — Event à plage de dates, minuit = placeholder"
60+ },
61+ {
62+ "id": "mbam",
63+ "nom": "Musée des beaux-arts de Montréal",
64+ "listes": ["https://www.mbam.qc.ca/fr/expositions/"],
65+ "motif": "mbam\\.qc\\.ca/fr/expositions/[a-z0-9-]{3,}",
66+ "salle": "Musée des beaux-arts de Montréal",
67+ "ville": "Montréal",
68+ "robots": "Disallow: /fr/recherche/ /en/search/ /wp-content/* seulement (vérifié 2026-08-25) — expositions = Event à plage de dates"
69+ },
70+ {
71+ "id": "pacmusee",
72+ "nom": "Pointe-à-Callière — cité d'archéologie et d'histoire (Montréal)",
73+ "listes": ["https://pacmusee.qc.ca/fr/expositions/",
74+ "https://pacmusee.qc.ca/fr/calendrier/"],
75+ "motif": "pacmusee\\.qc\\.ca/fr/(expositions/detail|calendrier/evenement)/[a-z0-9-]{3,}",
76+ "salle": "Pointe-à-Callière",
77+ "ville": "Montréal",
78+ "robots": "Aucun Disallow (vérifié 2026-08-25) — expositions et événements du calendrier"
79+ },
80+ {
81+ "id": "cinematheque",
82+ "nom": "Cinémathèque québécoise (Montréal)",
83+ "listes": ["https://www.cinematheque.qc.ca/fr/"],
84+ "motif": "cinematheque\\.qc\\.ca/fr/cinema/[a-z0-9-]{3,}",
85+ "salle": "Cinémathèque québécoise",
86+ "ville": "Montréal",
87+ "robots": "Aucun Disallow (vérifié 2026-08-25) — 1 Event daté par projection affichée (date sans heure)"
88+ },
89+ {
90+ "id": "mnbaq",
91+ "nom": "Musée national des beaux-arts du Québec",
92+ "listes": ["https://www.mnbaq.org/programmation/expositions",
93+ "https://www.mnbaq.org/programmation/visites-guidees"],
94+ "motif": "mnbaq\\.org/programmation/(expositions|visites-guidees|ateliers-et-cours|activites-et-evenements|spectacles-et-concerts)/[a-z0-9-]{3,}",
95+ "salle": "Musée national des beaux-arts du Québec",
96+ "ville": "Québec",
97+ "robots": "Disallow: /cpresources/ /vendor/ etc. seulement (vérifié 2026-08-25) — expositions, visites, ateliers avec Event horodaté (-04:00 exact)"
98+ },
99+ {
100+ "id": "mcq",
101+ "nom": "Musée de la civilisation (Québec)",
102+ "listes": ["https://mcq.org/decouvrir/expositions/"],
103+ "motif": "mcq\\.org/decouvrir/expositions/[a-z0-9-]{3,}",
104+ "salle": "Musée de la civilisation",
105+ "ville": "Québec",
106+ "robots": "Pas de robots.txt (404, vérifié 2026-08-25) — expositions = Event à plage de dates ; hôte SANS www (www.mcq.org/decouvrir 404)"
107+ },
108+ {
109+ "id": "maisonlitterature",
110+ "nom": "Maison de la littérature (Québec)",
111+ "listes": ["https://www.maisondelalitterature.qc.ca/evenements/"],
112+ "motif": "maisondelalitterature\\.qc\\.ca/evenements/(?!jsf/)[a-z0-9-]{3,}",
113+ "salle": "Maison de la littérature",
114+ "ville": "Québec",
115+ "robots": "Aucun Disallow (vérifié 2026-08-25) — Event horodaté sans offset (heure locale littérale, vérifiée = affichage)"
116+ },
117+ {
118+ "id": "premieracte",
119+ "nom": "Théâtre Premier Acte (Québec)",
120+ "listes": ["https://premieracte.ca/"],
121+ "motif": "premieracte\\.ca/spectacles/[a-z0-9-]{3,}",
122+ "salle": "Premier Acte",
123+ "ville": "Québec",
124+ "robots": "Disallow: /wp/wp-admin/ seulement (vérifié 2026-08-25) — Event à plage de dates, suffixe fuseau littéral « America/Toronto » (heure prise littérale, correcte)"
125+ },
126+ {
127+ "id": "spectart",
128+ "nom": "Spect'Art Rimouski (Salle Desjardins-Telus)",
129+ "listes": ["https://spectart.com/programmation/"],
130+ "motif": "spectart\\.com/programmation/(?!genre/)[a-z0-9-]{3,}",
131+ "salle": "Salle Desjardins-Telus",
132+ "ville": "Rimouski",
133+ "robots": "Aucun Disallow (vérifié 2026-08-25) — Event horodaté sans offset (heure locale littérale)"
134+ },
135+ {
136+ "id": "amphitheatrecogeco",
137+ "nom": "Amphithéâtre Cogeco (Trois-Rivières)",
138+ "listes": ["https://www.amphitheatrecogeco.com/"],
139+ "motif": "amphitheatrecogeco\\.com/(spectacles|evenements)/[a-z0-9-]{3,}",
140+ "salle": "Amphithéâtre Cogeco",
141+ "ville": "Trois-Rivières",
142+ "robots": "Pas de robots.txt (404, vérifié 2026-08-25) — Event daté (date sans heure)"
143+ },
144+ {
145+ "id": "hectorcharland",
146+ "nom": "Théâtre Hector-Charland (L'Assomption)",
147+ "listes": ["https://hector-charland.com/programmation-spectacles"],
148+ "motif": "hector-charland\\.com/programmation-spectacles/[a-z0-9-]{3,}",
149+ "salle": "Théâtre Hector-Charland",
150+ "ville": "L'Assomption",
151+ "robots": "Disallow: /cpresources/ /vendor/ /.env /cache/ seulement (Craft, vérifié 2026-08-25) — Event horodaté sans offset, location.name par fiche"
152+ },
153+ {
154+ "id": "chassegalerie",
155+ "nom": "Café culturel de la Chasse-galerie (Lavaltrie)",
156+ "listes": ["https://www.chasse-galerie.ca/fr"],
157+ "motif": "chasse-galerie\\.ca/fr/calendrier/[a-z0-9-]{3,}",
158+ "salle": "Café culturel de la Chasse-galerie",
159+ "ville": "Lavaltrie",
160+ "robots": "Disallow: /rubberduck/ /rss/ seulement (vérifié 2026-08-25) — Event horodaté -04:00 exact"
40 } 161 }
41 ] 162 ]
42 } 163 }
modified data/sources.json +343 −86
@@ -6,7 +6,7 @@
6 "name": "SIT Québec — Ministère du Tourisme", 6 "name": "SIT Québec — Ministère du Tourisme",
7 "url": "https://www.donneesquebec.ca/recherche/dataset/sit-quebec-evenements", 7 "url": "https://www.donneesquebec.ca/recherche/dataset/sit-quebec-evenements",
8 "type": "donnees-ouvertes", 8 "type": "donnees-ouvertes",
9− "extraction": "API JSON (Tourinsoft, syndication publique) — dates, géoloc, thèmes, contacts (TelephonePrincipals/Courriels → description « Renseignements : … ») ; le flux ne publie ni Descriptions* ni tarifs (vérifié 2026-08)", 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", 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", 11 "couverture": "Événements touristiques, toutes les régions du Québec",
12 "cadence": "horaire (watcher PM2)", 12 "cadence": "horaire (watcher PM2)",
@@ -17,7 +17,7 @@
17 "name": "Ville de Montréal — Événements publics", 17 "name": "Ville de Montréal — Événements publics",
18 "url": "https://donnees.montreal.ca/dataset/evenements-publics", 18 "url": "https://donnees.montreal.ca/dataset/evenements-publics",
19 "type": "donnees-ouvertes", 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)", 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", 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", 22 "couverture": "Événements municipaux, île de Montréal",
23 "cadence": "horaire (watcher PM2)", 23 "cadence": "horaire (watcher PM2)",
@@ -28,7 +28,7 @@
28 "name": "Le point de vente — billetterie québécoise", 28 "name": "Le point de vente — billetterie québécoise",
29 "url": "https://lepointdevente.com/billets", 29 "url": "https://lepointdevente.com/billets",
30 "type": "billetterie", 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 »)", 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", 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)", 33 "couverture": "Concerts, humour, théâtre, festivals — partout au Québec (~2 500 événements à venir)",
34 "cadence": "horaire (watcher PM2)", 34 "cadence": "horaire (watcher PM2)",
@@ -86,7 +86,7 @@
86 "name": "Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)", 86 "name": "Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)",
87 "url": "https://www.cantonsdelest.com/evenements", 87 "url": "https://www.cantonsdelest.com/evenements",
88 "type": "tourisme-regional", 88 "type": "tourisme-regional",
89− "extraction": "page liste rendue serveur (~25 fiches à venir) puis fiches détail incrémentales (cache data/cantonsdelest_cache.json, 40 fiches/sync, re-visite 7 j) : JSON-LD Event complet (nom, dates, description riche, adresse civique, images Tourinsoft mto.media.tourinsoft.eu) + GPS exact (data-lat/data-lng de la carte) ; même plateforme Tourinsoft que le SIT Québec → recoupement géré par dedup_key", 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", 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)", 91 "couverture": "Festivals, spectacles, événements — Cantons-de-l'Est (Estrie)",
92 "cadence": "horaire (watcher PM2, incrémental)", 92 "cadence": "horaire (watcher PM2, incrémental)",
@@ -121,7 +121,7 @@
121 "name": "evenko — grands concerts et festivals", 121 "name": "evenko — grands concerts et festivals",
122 "url": "https://evenko.ca/fr/evenements", 122 "url": "https://evenko.ca/fr/evenements",
123 "type": "promoteur", 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", 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", 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…)", 126 "couverture": "Grands concerts (Centre Bell, Place Bell, MTELUS…), festivals (Osheaga, ÎleSoniq…)",
127 "cadence": "horaire (watcher PM2)", 127 "cadence": "horaire (watcher PM2)",
@@ -132,7 +132,7 @@
132 "name": "Atuvu.ca — calendrier culturel", 132 "name": "Atuvu.ca — calendrier culturel",
133 "url": "https://atuvu.ca/", 133 "url": "https://atuvu.ca/",
134 "type": "agregateur", 134 "type": "agregateur",
135− "extraction": "Scrapfly (Cloudflare) — sitemaps lastmod + fiches .event-play (date FR + heure « 20h00 » → start_time), cache incrémental data/atuvu_cache.json, plafond 120 fiches/sync", 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", 136 "acces_legal": "robots.txt : Allow / + sitemap public",
137 "couverture": "Sorties culturelles, Grand Montréal", 137 "couverture": "Sorties culturelles, Grand Montréal",
138 "cadence": "horaire (watcher PM2, incrémental)", 138 "cadence": "horaire (watcher PM2, incrémental)",
@@ -143,7 +143,7 @@
143 "name": "La Vitrine culturelle", 143 "name": "La Vitrine culturelle",
144 "url": "https://www.lavitrine.com/", 144 "url": "https://www.lavitrine.com/",
145 "type": "billetterie", 145 "type": "billetterie",
146− "extraction": "GET directs — sitemap.xml (2 000 fiches evenement + 185 exposition) + fiches HTML (bloc event_calendar), cache incrémental, 150 fiches/sync, re-visite 7 j", 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", 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", 148 "couverture": "Spectacles et sorties culturelles, Grand Montréal",
149 "cadence": "horaire (watcher PM2, incrémental)", 149 "cadence": "horaire (watcher PM2, incrémental)",
@@ -177,7 +177,7 @@
177 "name": "Bandsintown — dates de concerts par artiste", 177 "name": "Bandsintown — dates de concerts par artiste",
178 "url": "https://rest.bandsintown.com/", 178 "url": "https://rest.bandsintown.com/",
179 "type": "agregateur", 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", 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", 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", 182 "couverture": "Concerts au Québec des artistes en tournée connus de la base",
183 "cadence": "horaire (watcher PM2, rotation d'artistes)", 183 "cadence": "horaire (watcher PM2, rotation d'artistes)",
@@ -185,51 +185,36 @@
185 }, 185 },
186 { 186 {
187 "id": "gatineau", 187 "id": "gatineau",
188− "name": "Ville de Gatineau — Événements", 188+ "name": "Ville de Gatineau — Calendrier officiel",
189− "url": "https://www.gatineau.ca/", 189+ "url": "https://calendrier.gatineau.cloud",
190 "type": "municipal", 190 "type": "municipal",
191− "extraction": "n/d", 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": "n/d", 192+ "acces_legal": "application municipale publique, robots: all",
193 "couverture": "Gatineau (Outaouais)", 193 "couverture": "Gatineau (Outaouais)",
194− "cadence": "n/d", 194+ "cadence": "quotidien",
195− "statut": "abandonnee", 195+ "statut": "actif"
196− "note": "Aucun jeu de données « événements » sur Données Québec (portail Gatineau : géomatique seulement) et site 100 % JavaScript sans API découverte (vérifié 2026-08-18)"
197− },
198− {
199− "id": "trois-rivieres",
200− "name": "Ville de Trois-Rivières — Événements",
201− "url": "https://www.v3r.net/",
202− "type": "municipal",
203− "extraction": "n/d",
204− "acces_legal": "n/d",
205− "couverture": "Trois-Rivières (Mauricie)",
206− "cadence": "n/d",
207− "statut": "abandonnee",
208− "note": "API REST WordPress verrouillée (401 rest_not_logged_in) et aucun jeu « événements » sur Données Québec (vérifié 2026-08-18)"
209 }, 196 },
210 { 197 {
211 "id": "levis", 198 "id": "levis",
212− "name": "Ville de Lévis — Calendrier", 199+ "name": "Ville de Lévis — Calendrier des événements",
213− "url": "https://www.ville.levis.qc.ca/", 200+ "url": "https://levis.ca/fr/calendrier-des-evenements",
214 "type": "municipal", 201 "type": "municipal",
215− "extraction": "n/d", 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)",
216− "acces_legal": "n/d", 203+ "acces_legal": "API du site municipal public, jeton public, robots.txt permissif",
217 "couverture": "Lévis (Chaudière-Appalaches)", 204 "couverture": "Lévis (Chaudière-Appalaches)",
218− "cadence": "n/d", 205+ "cadence": "quotidien",
219− "statut": "abandonnee", 206+ "statut": "actif"
220− "note": "Site derrière un WAF (403 sur GET identifiés) et aucun jeu « événements » sur Données Québec (vérifié 2026-08-18)"
221 }, 207 },
222 { 208 {
223 "id": "terrebonne", 209 "id": "terrebonne",
224 "name": "Ville de Terrebonne — Calendrier", 210 "name": "Ville de Terrebonne — Calendrier",
225− "url": "https://terrebonne.ca/calendrier/", 211+ "url": "https://terrebonne.ca/calendrier-des-evenements/",
226 "type": "municipal", 212 "type": "municipal",
227− "extraction": "n/d", 213+ "extraction": "API REST wp-json/wp/v2/event via Scrapfly (Cloudflare), 3-5 appels/sync. RÉACTIVÉE 2026-08-25",
228− "acces_legal": "n/d", 214+ "acces_legal": "API publique du site municipal ; anti-bot contourné avec volumes minimes",
229 "couverture": "Terrebonne (Lanaudière)", 215 "couverture": "Terrebonne (Lanaudière)",
230− "cadence": "n/d", 216+ "cadence": "quotidien",
231− "statut": "abandonnee", 217+ "statut": "actif"
232− "note": "Cloudflare bloque tout GET non navigateur (403) et aucun jeu « événements » sur Données Québec (vérifié 2026-08-18)"
233 }, 218 },
234 { 219 {
235 "id": "lavalweb", 220 "id": "lavalweb",
@@ -249,7 +234,7 @@
249 "url": "https://tourismeoutaouais.com/calendrier-des-evenements", 234 "url": "https://tourismeoutaouais.com/calendrier-des-evenements",
250 "type": "tourisme-regional", 235 "type": "tourisme-regional",
251 "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 ●.", 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 ●.",
252− "extraction": "props JSON de l'îlot Astro (déballage [type, valeur]) : id, titre, url (interne ou site officiel), municipalité, territoire, photo CDN, startDate/endDate ISO ; ni heure ni tarif publiés → jamais inventés", 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",
253 "acces_legal": "robots.txt : User-agent: * / Allow: / — GET direct throttlé 0,8 s, identification honnête, lien vers la fiche/site officiel", 238 "acces_legal": "robots.txt : User-agent: * / Allow: / — GET direct throttlé 0,8 s, identification honnête, lien vers la fiche/site officiel",
254 "couverture": "Festivals et événements, Outaouais (337 fiches seulement au baseline régional)", 239 "couverture": "Festivals et événements, Outaouais (337 fiches seulement au baseline régional)",
255 "cadence": "horaire (watcher PM2)", 240 "cadence": "horaire (watcher PM2)",
@@ -261,7 +246,7 @@
261 "url": "https://lanaudiere.ca/fr/evenements-lanaudiere", 246 "url": "https://lanaudiere.ca/fr/evenements-lanaudiere",
262 "type": "tourisme-regional", 247 "type": "tourisme-regional",
263 "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 ●●.", 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 ●●.",
264− "extraction": "sitemap.xml (1 GET) → fiches /fr/evenements-lanaudiere/<slug>/ incrémentales (cache data/lanaudiere_cache.json, LAN_FICHE_MAX/sync, re-visite 7 j) : titre, plage de dates FR, municipalité, og:image/og:description ; médias Tourinsoft → recoupement SITQ géré par dedup_key", 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",
265 "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", 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",
266 "couverture": "Festivals et événements, Lanaudière", 251 "couverture": "Festivals et événements, Lanaudière",
267 "cadence": "horaire (watcher PM2, incrémental)", 252 "cadence": "horaire (watcher PM2, incrémental)",
@@ -285,7 +270,7 @@
285 "url": "https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/", 270 "url": "https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/",
286 "type": "tourisme-regional", 271 "type": "tourisme-regional",
287 "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 ●.", 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 ●.",
288− "extraction": "liste SSR (1 GET, cartes .card--type-event) + fiches incrémentales (cache data/bassaintlaurent_cache.json, BSL_FICHE_MAX/sync, re-visite 7 j) : og:description + GPS exact de la carte embarquée", 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)",
289 "acces_legal": "pages publiques de l'ATR — GET throttlés 0,8 s, identification honnête, lien fiche originale", 274 "acces_legal": "pages publiques de l'ATR — GET throttlés 0,8 s, identification honnête, lien fiche originale",
290 "couverture": "Festivals et événements, Bas-Saint-Laurent", 275 "couverture": "Festivals et événements, Bas-Saint-Laurent",
291 "cadence": "horaire (watcher PM2, incrémental)", 276 "cadence": "horaire (watcher PM2, incrémental)",
@@ -297,7 +282,7 @@
297 "url": "https://animee.ville.quebec.qc.ca/activites/", 282 "url": "https://animee.ville.quebec.qc.ca/activites/",
298 "type": "municipal", 283 "type": "municipal",
299 "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).", 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).",
300− "extraction": "liste /activites/ (1 GET, attributs data-* : dates ISO, arrondissement, catégorie, prix) + fiches incrémentales (cache data/quebecanimee_cache.json, QA_FICHE_MAX/sync, re-visite 7 j) : og:description, lieu ; une carte par occurrence datée → une fiche par séance", 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",
301 "acces_legal": "site municipal public rendu serveur — GET throttlés 0,8 s, identification honnête, lien fiche officielle", 286 "acces_legal": "site municipal public rendu serveur — GET throttlés 0,8 s, identification honnête, lien fiche officielle",
302 "couverture": "Activités gratuites/à faible coût, Ville de Québec (Capitale-Nationale)", 287 "couverture": "Activités gratuites/à faible coût, Ville de Québec (Capitale-Nationale)",
303 "cadence": "horaire (watcher PM2, incrémental)", 288 "cadence": "horaire (watcher PM2, incrémental)",
@@ -333,7 +318,7 @@
333 "url": "https://grandtheatre.qc.ca/programmation", 318 "url": "https://grandtheatre.qc.ca/programmation",
334 "type": "salle-de-spectacle", 319 "type": "salle-de-spectacle",
335 "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.", 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.",
336− "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", 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)",
337 "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", 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",
338 "couverture": "Longue traîne des salles de spectacle QC (amorce : Grand Théâtre de Québec, Trident, Capitole — Capitale-Nationale)", 323 "couverture": "Longue traîne des salles de spectacle QC (amorce : Grand Théâtre de Québec, Trident, Capitole — Capitale-Nationale)",
339 "cadence": "horaire (watcher PM2, incrémental)", 324 "cadence": "horaire (watcher PM2, incrémental)",
@@ -341,34 +326,32 @@
341 }, 326 },
342 { 327 {
343 "id": "mauricie", 328 "id": "mauricie",
344− "name": "Tourisme Mauricie — événements (ATR)", 329+ "name": "Tourisme Mauricie — calendrier des événements (ATR)",
345 "url": "https://tourismemauricie.com/evenements", 330 "url": "https://tourismemauricie.com/evenements",
346 "type": "tourisme-regional", 331 "type": "tourisme-regional",
347− "extraction": "n/d", 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é)",
348− "acces_legal": "n/d", 333+ "acces_legal": "API REST WordPress publique (aucune auth), robots.txt sans interdiction — GET throttlés, UA honnête",
349− "couverture": "Mauricie", 334+ "couverture": "Mauricie (+ villes limitrophes du Centre-du-Québec)",
350− "cadence": "n/d", 335+ "cadence": "quotidienne",
351− "statut": "abandonnee", 336+ "statut": "actif"
352− "note": "ÉCARTÉE 2026-08-19 (Phase 3) : liste /evenements rendue JS — 1 seule carte SSR par page (vérifié pages 1 et 2), cartes chargées par admin-ajax non documenté, API REST /wp-json verrouillée (401 rest_not_logged_in). À re-sonder (percer la facette admin-ajax) dans une vague ultérieure."
353 }, 337 },
354 { 338 {
355 "id": "laurentides", 339 "id": "laurentides",
356− "name": "Tourisme Laurentides — événements (ATR)", 340+ "name": "Tourisme Laurentides — calendrier des événements (ATR)",
357− "url": "https://www.laurentides.com/fr/quoifaire/evenements", 341+ "url": "https://www.laurentides.com/evenements/",
358 "type": "tourisme-regional", 342 "type": "tourisme-regional",
359− "extraction": "n/d", 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)",
360− "acces_legal": "n/d", 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",
361 "couverture": "Laurentides", 345 "couverture": "Laurentides",
362− "cadence": "n/d", 346+ "cadence": "quotidienne (backfill des fiches ~3 semaines, puis incrémental)",
363− "statut": "abandonnee", 347+ "statut": "actif"
364− "note": "ÉCARTÉE 2026-08-19 (Phase 3) : WAF — 403 sur GET identifié (UA honnête). Scrapfly possible mais non justifié (la région est déjà la 4ᵉ mieux couverte : 620 fiches au baseline). À re-sonder."
365 }, 348 },
366 { 349 {
367 "id": "gaspesie", 350 "id": "gaspesie",
368 "name": "Tourisme Gaspésie — événements (ATR)", 351 "name": "Tourisme Gaspésie — événements (ATR)",
369 "url": "https://www.tourisme-gaspesie.com/fr/festival-et-evenements/", 352 "url": "https://www.tourisme-gaspesie.com/fr/festival-et-evenements/",
370 "type": "tourisme-regional", 353 "type": "tourisme-regional",
371− "extraction": "Scrapfly (asp, country=ca, sans render_js — HTML rendu serveur) : liste (1 crédit) + fiches incrémentales (cache, GASP_FICHE_MAX=8/sync, re-visite 14 j) — titre h1, plage de dates FR, adresse/ville/CP (bloc coordonnées), og:description/og:image. Fiches sans date écartées (festivals annuels non datés).", 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",
372 "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", 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",
373 "couverture": "Gaspésie–Îles-de-la-Madeleine", 356 "couverture": "Gaspésie–Îles-de-la-Madeleine",
374 "cadence": "horaire (watcher PM2) — cache 14 j, ~2 fiches re-visitées/j", 357 "cadence": "horaire (watcher PM2) — cache 14 j, ~2 fiches re-visitées/j",
@@ -380,7 +363,7 @@
380 "name": "Tuxedo Billet — billetterie québécoise multi-tenants", 363 "name": "Tuxedo Billet — billetterie québécoise multi-tenants",
381 "url": "https://www.tuxedobillet.com/", 364 "url": "https://www.tuxedobillet.com/",
382 "type": "billetterie", 365 "type": "billetterie",
383− "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.", 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",
384 "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", 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",
385 "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…", 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…",
386 "cadence": "quotidienne (TTL 20 h dans le watcher horaire)", 369 "cadence": "quotidienne (TTL 20 h dans le watcher horaire)",
@@ -404,7 +387,7 @@
404 "name": "Tourisme Montérégie — événements (ATR)", 387 "name": "Tourisme Montérégie — événements (ATR)",
405 "url": "https://www.tourisme-monteregie.qc.ca/membre/categorie/quoi-faire/festivals-et-evenements/", 388 "url": "https://www.tourisme-monteregie.qc.ca/membre/categorie/quoi-faire/festivals-et-evenements/",
406 "type": "tourisme-regional", 389 "type": "tourisme-regional",
407− "extraction": "API REST WordPress publique /wp-json/wp/v2/cpt_event (paginée per_page=100) — titre, description, plage de dates FR, lat/long, site web, image (gisement Tourinsoft, acf.syndic_object_id EVENMTOV… ; recoupement SITQ géré par dedup_key). Fiches détail incrémentales (MTG_FICHE_MAX=15/sync, re-visite 7 j) : JSON-LD Event → adresse civique, ville, code postal.", 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",
408 "acces_legal": "API REST WordPress publique (aucune auth), robots.txt sans interdiction sur /wp-json/ — GET throttlés 0,8 s, UA honnête", 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",
409 "couverture": "Montérégie (~78 fiches à venir, vérifié 2026-08-21)", 392 "couverture": "Montérégie (~78 fiches à venir, vérifié 2026-08-21)",
410 "cadence": "horaire (watcher PM2)", 393 "cadence": "horaire (watcher PM2)",
@@ -415,7 +398,7 @@
415 "name": "Tourisme Centre-du-Québec — événements (ATR)", 398 "name": "Tourisme Centre-du-Québec — événements (ATR)",
416 "url": "https://tourismecentreduquebec.com/evenements/", 399 "url": "https://tourismecentreduquebec.com/evenements/",
417 "type": "tourisme-regional", 400 "type": "tourisme-regional",
418− "extraction": "Liste rendue serveur (1 GET) : blocs events_listing (plage de dates FR + titre + lien) ; fiches incrémentales (CDQ_FICHE_MAX=10/sync, re-visite 7 j) : bloc « Adresse », og:description, og:image. Ni ville structurée, ni heure, ni tarif → jamais inventés (région dérivée de l'ATR).", 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",
419 "acces_legal": "Site public de l'ATR, robots.txt sans interdiction — GET throttlés 0,8 s, UA honnête", 402 "acces_legal": "Site public de l'ATR, robots.txt sans interdiction — GET throttlés 0,8 s, UA honnête",
420 "couverture": "Centre-du-Québec (première source de la région — 0 fiche avant connexion ; ~10 fiches)", 403 "couverture": "Centre-du-Québec (première source de la région — 0 fiche avant connexion ; ~10 fiches)",
421 "cadence": "horaire (watcher PM2)", 404 "cadence": "horaire (watcher PM2)",
@@ -426,7 +409,7 @@
426 "name": "Tourisme Chaudière-Appalaches — festivals et événements (ATR)", 409 "name": "Tourisme Chaudière-Appalaches — festivals et événements (ATR)",
427 "url": "https://chaudiereappalaches.com/planifier-votre-sejour/ete-automne/festivals-et-evenements/", 410 "url": "https://chaudiereappalaches.com/planifier-votre-sejour/ete-automne/festivals-et-evenements/",
428 "type": "tourisme-regional", 411 "type": "tourisme-regional",
429− "extraction": "Liste rendue serveur paginée (?listpage=1..3, ~12 fiches/page) → fiches incrémentales (CHA_FICHE_MAX=12/sync, re-visite 7 j) : JSON-LD Event COMPLET (dates ISO, description, adresse, ville, CP, GPS, images) via le parseur générique ld_events (sallesjsonld).", 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)",
430 "acces_legal": "Site public de l'ATR, robots.txt sans interdiction sur /planifier-votre-sejour/ — GET throttlés 0,8 s, UA honnête", 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",
431 "couverture": "Chaudière-Appalaches (~36 fiches à venir, vérifié 2026-08-21)", 414 "couverture": "Chaudière-Appalaches (~36 fiches à venir, vérifié 2026-08-21)",
432 "cadence": "horaire (watcher PM2)", 415 "cadence": "horaire (watcher PM2)",
@@ -437,7 +420,7 @@
437 "name": "TicketAcces.net — billetterie régionale québécoise", 420 "name": "TicketAcces.net — billetterie régionale québécoise",
438 "url": "https://www.ticketacces.net/fr/portail/index.cfm", 421 "url": "https://www.ticketacces.net/fr/portail/index.cfm",
439 "type": "billetterie", 422 "type": "billetterie",
440− "extraction": "HTML ColdFusion (cp1252) : annuaire complet des organisations dans le portail (cartes data-nom/ville/région, filtre Québec — 12 orgs NB + 1 ON exclues) + calendrier AGRÉGÉ multi-organisations en 4 GET (catégories Spectacles/Cinéma/Sport/Autre) : 1 Event par représentation datée (titre, date+heure FR, salle, ville, image). Fiches incrémentales (TA_DETAIL_MAX=25/sync) : og:description, adresse, prix plancher.", 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é",
441 "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", 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",
442 "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)", 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)",
443 "cadence": "horaire (watcher PM2)", 426 "cadence": "horaire (watcher PM2)",
@@ -448,7 +431,7 @@
448 "name": "Réseau Ovation — billetterie québécoise multi-salles", 431 "name": "Réseau Ovation — billetterie québécoise multi-salles",
449 "url": "https://reseau.ovation.ca/", 432 "url": "https://reseau.ovation.ca/",
450 "type": "billetterie", 433 "type": "billetterie",
451− "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é.", 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é",
452 "acces_legal": "Billetterie publique sans auth ; GET throttlés 0,7 s, UA honnête, lien d'achat vers la fiche officielle", 435 "acces_legal": "Billetterie publique sans auth ; GET throttlés 0,7 s, UA honnête, lien d'achat vers la fiche officielle",
453 "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…", 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…",
454 "cadence": "horaire (watcher PM2)", 437 "cadence": "horaire (watcher PM2)",
@@ -459,7 +442,7 @@
459 "name": "Ticketpro — billetterie canadienne (tenants Québec)", 442 "name": "Ticketpro — billetterie canadienne (tenants Québec)",
460 "url": "https://www.ticketpro.ca/", 443 "url": "https://www.ticketpro.ca/",
461 "type": "billetterie", 444 "type": "billetterie",
462− "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.", 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)",
463 "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", 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",
464 "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)", 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)",
465 "cadence": "horaire (watcher PM2)", 448 "cadence": "horaire (watcher PM2)",
@@ -467,27 +450,25 @@
467 }, 450 },
468 { 451 {
469 "id": "zeffy", 452 "id": "zeffy",
470− "name": "Zeffy — billetterie OSBL (Montréal)", 453+ "name": "Zeffy — billetterie OSBL",
471 "url": "https://www.zeffy.com/", 454 "url": "https://www.zeffy.com/",
472 "type": "billetterie", 455 "type": "billetterie",
473− "extraction": "—", 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)",
474− "acces_legal": "robots.txt permissif, sitemaps publics", 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é",
475− "couverture": "Événements communautaires/OSBL partout au Canada et aux É.-U.", 458+ "couverture": "~100-200 événements OSBL QC actifs (galas, spectacles-bénéfice, ateliers communautaires), toutes régions",
476− "cadence": "—", 459+ "cadence": "quotidienne",
477− "statut": "abandonnee", 460+ "statut": "actif"
478− "raison": "ÉCARTÉE 2026-08-22 (Phase 5) : découverte impraticable — sitemap api.zeffy.com = 547 834 URLs /ticketing/ (dont 54 905 fr) SANS lastmod, date ni géolocalisation ; il faudrait rendre chaque fiche Next.js pour savoir si elle est QC et à venir. À revisiter seulement si une API de recherche publique apparaît."
479 }, 461 },
480 { 462 {
481 "id": "showpass", 463 "id": "showpass",
482 "name": "Showpass — billetterie canadienne", 464 "name": "Showpass — billetterie canadienne",
483 "url": "https://www.showpass.com/", 465 "url": "https://www.showpass.com/",
484 "type": "billetterie", 466 "type": "billetterie",
485− "extraction": "—", 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)",
486− "acces_legal": "API publique explicitement autorisée par robots.txt (Allow: /api/)", 468+ "acces_legal": "robots.txt Allow: /api/ (API publique explicitement autorisée), GET throttlés 0,8 s, identification honnête",
487− "couverture": "13 663 événements canadiens, très majoritairement Alberta/C.-B.", 469+ "couverture": "~30-40 événements QC actifs (soirées, croisières, festivals, Candlelight) — toutes régions balayées",
488− "cadence": "—", 470+ "cadence": "quotidienne",
489− "statut": "abandonnee", 471+ "statut": "actif"
490− "raison": "ÉCARTÉE 2026-08-22 (Phase 5) : /api/public/events/ n'offre AUCUN filtre géo fonctionnel (venue__city, location, coordinates ignorés — vérifié) ET l'inventaire est presque entièrement hors Québec : échantillon de 1 000 événements sur 10 pages réparties → 0,3 % QC (3/1000, vérifié 2026-08-22). ~137 pages à paginer par sync pour ~40 événements QC : ROI nul. À revisiter seulement si un filtre serveur apparaît."
491 }, 472 },
492 { 473 {
493 "id": "weezevent", 474 "id": "weezevent",
@@ -495,11 +476,11 @@
495 "url": "https://www.weezevent.com/", 476 "url": "https://www.weezevent.com/",
496 "type": "billetterie", 477 "type": "billetterie",
497 "extraction": "—", 478 "extraction": "—",
498− "acces_legal": "robots.txt permissif", 479+ "acces_legal": "robots.txt permissif mais aucune surface de découverte publique",
499− "couverture": "Festivals/événements FR + QC", 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)",
500 "cadence": "—", 481 "cadence": "—",
501 "statut": "abandonnee", 482 "statut": "abandonnee",
502− "raison": "ÉCARTÉE 2026-08-22 (Phase 5) : sitemap = slugs relatifs sans domaine/date/lieu, très majoritairement France ; aucun index public des événements QC. Les gros festivals QC clients de Weezevent sont déjà captés par les ATR/agrégateurs." 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."
503 }, 484 },
504 { 485 {
505 "id": "accesculture", 486 "id": "accesculture",
@@ -507,11 +488,287 @@
507 "url": "https://www.accesculture.com/", 488 "url": "https://www.accesculture.com/",
508 "type": "agregateur", 489 "type": "agregateur",
509 "extraction": "—", 490 "extraction": "—",
510− "acces_legal": "robots.txt permissif, sitemap public", 491+ "acces_legal": "—",
511− "couverture": "Diffuseurs des arrondissements de Montréal", 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",
512 "cadence": "—", 493 "cadence": "—",
513 "statut": "abandonnee", 494 "statut": "abandonnee",
514− "raison": "ÉCARTÉE 2026-08-22 (Phase 5) : SPA prerender (apiUrl json.backend.accesculture.com non documentée) et billetterie déléguée à La Vitrine (cartUrl secure.lavitrine.com) → catalogue déjà largement couvert par le connecteur lavitrine (5 000+ actifs). Risque de doublons > gain." 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"
515 } 772 }
516 ] 773 ]
517 } 774 }
\ No newline at end of file
modified data/ticketpro_tenants.json +4 −2
@@ -1,12 +1,14 @@
1 { 1 {
2− "_comment": "Sorti-Ka — tenants québécois de la billetterie Ticketpro (nouvelle plateforme SPA, API /api/v1). Auteur : Simon-Pierre Boucher <contact@spboucher.ai>. Chaque tenant = <domaine>.ticketpro.ca ; l'API /api/v1/pages y est publique (vérifié 2026-08-22). tproqc agrège la majorité des salles QC mais PAS tprotsd (vérifié) → les deux sont requis, dédup par id de page. Tenants hors Québec (tproatlantic, tprobarriecolts, goredsgo…) exclus par périmètre. tpromuseerodrigue exclu : créneaux d'admission de musée (176 plages quasi identiques), pas des événements. exclure_lieux : réservations de restaurants (soupers-spectacles du groupe St-Denis) filtrées par nom de lieu normalisé (sous-chaîne, sans accents ni casse).", 2+ "_comment": "Sorti-Ka — tenants québécois de la billetterie Ticketpro (nouvelle plateforme SPA, API /api/v1). Auteur : Simon-Pierre Boucher <contact@spboucher.ai>. Chaque tenant = <domaine>.ticketpro.ca ; l'API /api/v1/pages y est publique (vérifié 2026-08-22). tproqc agrège la majorité des salles QC mais PAS tprotsd (vérifié) → les deux sont requis, dédup par id de page. Tenants hors Québec (tproatlantic, tprobarriecolts, goredsgo, tpromaclab/tprocob/tproastor/ticketsnw/tprowest/tproshelltheatre — vérifiés AB/ON/NS/BC 2026-08-25…) exclus par périmètre. Tenants QC REDONDANTS avec tproqc (0 page nouvelle, vérifié live 2026-08-25) — ne pas ajouter : pierremercure, espacestdenis, tproestival. tpromuseerodrigue exclu : créneaux d'admission de musée (176 plages quasi identiques), pas des événements. exclure_lieux : réservations de restaurants (soupers-spectacles du groupe St-Denis) filtrées par nom de lieu normalisé (sous-chaîne, sans accents ni casse).",
3 "tenants": [ 3 "tenants": [
4 { "domaine": "tproqc", "nom": "Ticketpro Québec (agrégateur provincial)" }, 4 { "domaine": "tproqc", "nom": "Ticketpro Québec (agrégateur provincial)" },
5 { "domaine": "tprotsd", "nom": "Théâtre St-Denis / Studio St-Denis (Montréal)" }, 5 { "domaine": "tprotsd", "nom": "Théâtre St-Denis / Studio St-Denis (Montréal)" },
6 { "domaine": "tprofunnation", "nom": "Fun Nation (Montréal)" }, 6 { "domaine": "tprofunnation", "nom": "Fun Nation (Montréal)" },
7 { "domaine": "expocitetpro", "nom": "ExpoCité — Centre de foires & Pavillon Guy-Lafleur (Québec)" }, 7 { "domaine": "expocitetpro", "nom": "ExpoCité — Centre de foires & Pavillon Guy-Lafleur (Québec)" },
8 { "domaine": "sag", "nom": "Salle André-Gagnon (La Pocatière)" }, 8 { "domaine": "sag", "nom": "Salle André-Gagnon (La Pocatière)" },
9− { "domaine": "tpropdc", "nom": "Palais des congrès de Montréal" } 9+ { "domaine": "tpropdc", "nom": "Palais des congrès de Montréal" },
10+ { "domaine": "arsenalcontemporarysale", "nom": "Arsenal art contemporain (Montréal)" },
11+ { "domaine": "lefifa", "nom": "Le FIFA — Festival international du film sur l'art (Montréal)" }
10 ], 12 ],
11 "exclure_lieux": [ 13 "exclure_lieux": [
12 "restaurant le moliere", 14 "restaurant le moliere",
modified data/tuxedo_tenants.json +8 −2
@@ -1,5 +1,5 @@
1 { 1 {
2− "_comment": "Sorti-Ka — Tenants Tuxedo Billet (*.tuxedobillet.com) moissonnés par l'acteur Apify gorgeous_thistle/ka-tuxedo. Auteur : Simon-Pierre Boucher — contact@spboucher.ai. QUÉBEC SEULEMENT (sagouine = Nouveau-Brunswick, exclu). Découverts via Serper le 2026-08-21 (énumération non exhaustive — ajouter un tenant = un bloc ici, 0 code). Ville vérifiée avant ajout (espacetheatre = Mont-Laurier, PAS Saint-Hyacinthe). Les tenants à ville incertaine (lacaserne, legrandespace, salledesilets, arcf, billetterieacces) sont EXCLUS en attendant vérification.", 2+ "_comment": "Sorti-Ka — Tenants Tuxedo Billet (*.tuxedobillet.com) moissonnés par l'acteur Apify gorgeous_thistle/ka-tuxedo. Auteur : Simon-Pierre Boucher — contact@spboucher.ai. QUÉBEC SEULEMENT (sagouine, arcf = Saint-Jean NB et billetterieacces/evencia = Acadie NB, exclus). Découverts via Serper 2026-08-21, 2e vague 2026-08-25 (validation par rendu Scrapfly : tuiles .tuxCmsEdit__webShowTile + liens /main/<slug>, le format que l'acteur extrait). Ville vérifiée avant ajout (espacetheatre = Mont-Laurier ; lesaintjean = 774 rue Saint-Jean à Québec ; chateauscenes = Ville de Châteauguay). ⚠️ TENANTS INCOMPATIBLES avec l'acteur actuel (tuiles rendues mais liens NON /main/ : format /Web/<slug> ou /<nom-tenant>/<slug>) — à ajouter quand ka-tuxedo saura les lire (volume constaté 2026-08-25) : theatregillesvigneault (Saint-Jérôme, ~172 tuiles), rdlenspectacles (Rivière-du-Loup, ~50), salledesilets (Montréal, ~41), centredesartsbc (Baie-Comeau, ~35), legrandespace (Sherbrooke, ~27), lacaserne (Québec, ~21), larotonde (Québec, ~13), felixleclerc (Saint-Pierre-de-l'Île-d'Orléans, ~7), fesp (Fermont, ~1), culture3r (Trois-Rivières, doublon Ovation 00000W). Sondés VIDES 2026-08-25 (re-sonder plus tard) : misqa, valmorin, maisonpourladanse, smamontreal, theatredubic. theatredaujourdhui-abonnement non ajouté (abonnements seulement).",
3 "tenants": [ 3 "tenants": [
4 {"domaine": "espacetheatre", "nom": "Espace Théâtre", "ville": "Mont-Laurier"}, 4 {"domaine": "espacetheatre", "nom": "Espace Théâtre", "ville": "Mont-Laurier"},
5 {"domaine": "theatreoutremont", "nom": "Théâtre Outremont", "ville": "Montréal"}, 5 {"domaine": "theatreoutremont", "nom": "Théâtre Outremont", "ville": "Montréal"},
@@ -28,6 +28,12 @@
28 {"domaine": "centrepierrepeladeau", "nom": "Centre Pierre-Péladeau", "ville": "Montréal"}, 28 {"domaine": "centrepierrepeladeau", "nom": "Centre Pierre-Péladeau", "ville": "Montréal"},
29 {"domaine": "latribu-lenational", "nom": "Le National (La Tribu)", "ville": "Montréal"}, 29 {"domaine": "latribu-lenational", "nom": "Le National (La Tribu)", "ville": "Montréal"},
30 {"domaine": "cdn-ndg", "nom": "Maisons de la culture CDN–NDG", "ville": "Montréal"}, 30 {"domaine": "cdn-ndg", "nom": "Maisons de la culture CDN–NDG", "ville": "Montréal"},
31− {"domaine": "mcgillmusic", "nom": "École de musique Schulich — McGill", "ville": "Montréal"} 31+ {"domaine": "mcgillmusic", "nom": "École de musique Schulich — McGill", "ville": "Montréal"},
32+ {"domaine": "chateauscenes", "nom": "Château Scènes (Ville de Châteauguay)", "ville": "Châteauguay"},
33+ {"domaine": "azimutdiffusion", "nom": "Azimut Diffusion", "ville": "Sorel-Tracy"},
34+ {"domaine": "culture-umontreal", "nom": "Activités culturelles de l'Université de Montréal", "ville": "Montréal"},
35+ {"domaine": "lesaintjean", "nom": "Le Saint-Jean Comédie-Club", "ville": "Québec"},
36+ {"domaine": "osjm", "nom": "Orchestre symphonique des jeunes de Montréal", "ville": "Montréal"},
37+ {"domaine": "mcgillathletics", "nom": "McGill Athletics & Recreation", "ville": "Montréal"}
32 ] 38 ]
33 } 39 }
modified docs/connecteurs/INDEX.md +67 −43
@@ -1,8 +1,8 @@
1 # Sorti-Ka — Connecteurs de sources d'événements 1 # Sorti-Ka — Connecteurs de sources d'événements
2 2
3−> Index généré le 2026-08-22 23:05 EDT par `scripts/gen_connector_docs.py` (rejouable : `python3 scripts/gen_connector_docs.py`). Croise `data/sources.json`, l'introspection de `sortika/connectors/*.py` et la base live `data/sortika.db`. 3+> Index généré le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` (rejouable : `python3 scripts/gen_connector_docs.py`). Croise `data/sources.json`, l'introspection de `sortika/connectors/*.py` et la base live `data/sortika.db`.
4 4
5−**44 sources au registre** — 31 actives/prêtes, 13 abandonnées · **25969 événements en base** (dont 18244 actifs). 5+**68 sources au registre** — 62 actives/prêtes, 6 abandonnées · **31938 événements en base** (dont 22310 actifs).
6 6
7 ⚠️ **Attributions requises** : Ville de Montréal (CC BY 4.0) ; SIT Québec / Ministère du Tourisme et Ville de Laval (CC 4.0 — Données Québec). Détails dans chaque fiche, section « Licence / attribution ». 7 ⚠️ **Attributions requises** : Ville de Montréal (CC BY 4.0) ; SIT Québec / Ministère du Tourisme et Ville de Laval (CC 4.0 — Données Québec). Détails dans chaque fiche, section « Licence / attribution ».
8 8
@@ -10,37 +10,68 @@
10 10
11 | Source | Type | Statut | Actifs | GPS | Prix | Heure | Artistes | Image | Salle | Dernier sync | 11 | Source | Type | Statut | Actifs | GPS | Prix | Heure | Artistes | Image | Salle | Dernier sync |
12 |---|---|---|---|---|---|---|---|---|---|---| 12 |---|---|---|---|---|---|---|---|---|---|---|
13−| [SIT Québec — Ministère du Tourisme](sitq.md) | donnees-ouvertes | actif | 1014 | 97 % | 0 % | 0 % | 0 % | 0 % | 0 % | 63 % | 74 % | 2026-08-22 22:28 | 13+| [SIT Québec — Ministère du Tourisme](sitq.md) | donnees-ouvertes | actif | 963 | 97 % | 0 % | 0 % | 0 % | 0 % | 0 % | 63 % | 75 % | 2026-08-25 18:06 |
14−| [Ville de Montréal — Événements publics](montreal.md) | donnees-ouvertes | actif | 3522 | 99 % | 100 % | 99 % | 99 % | 0 % | 0 % | 100 % | 4 % | 2026-08-22 22:27 | 14+| [Ville de Montréal — Événements publics](montreal.md) | donnees-ouvertes | actif | 3691 | 99 % | 100 % | 99 % | 99 % | 0 % | 0 % | 100 % | 4 % | 2026-08-25 18:05 |
15−| [Le point de vente — billetterie québécoise](lepointdevente.md) | billetterie | actif | 1790 | 30 % | 92 % | 93 % | 0 % | 0 % | 1 % | 100 % | 99 % | 2026-08-22 22:27 | 15+| [Le point de vente — billetterie québécoise](lepointdevente.md) | billetterie | actif | 1734 | 34 % | 93 % | 94 % | 0 % | 0 % | 1 % | 100 % | 99 % | 2026-08-25 18:05 |
16−| [Ville de Laval — Calendrier des activités](laval.md) | donnees-ouvertes | morte-a-la-source | 17 | 0 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 94 % | 2026-08-22 23:03 | 16+| [Ville de Laval — Calendrier des activités](laval.md) | donnees-ouvertes | morte-a-la-source | 1 | 0 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:01 |
17−| [Ville de Sherbrooke — Calendrier des événements](sherbrooke.md) | municipal | actif | 109 | 0 % | 100 % | 85 % | 92 % | 0 % | 0 % | 99 % | 0 % | 2026-08-22 22:28 | 17+| [Ville de Sherbrooke — Calendrier des événements](sherbrooke.md) | municipal | actif | 141 | 0 % | 100 % | 87 % | 94 % | 0 % | 0 % | 99 % | 0 % | 2026-08-25 18:06 |
18−| [Ville de Longueuil — Événements (nouveau portail)](longueuil.md) | municipal | actif | 4 | 75 % | 0 % | 100 % | 50 % | 0 % | 0 % | 100 % | 0 % | 2026-08-22 22:27 | 18+| [Ville de Longueuil — Événements (nouveau portail)](longueuil.md) | municipal | actif | 4 | 75 % | 0 % | 100 % | 50 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:05 |
19−| [Eventbrite — billetterie libre-service (Québec)](eventbrite.md) | billetterie | actif | 435 | 100 % | 88 % | 100 % | 100 % | 0 % | 0 % | 98 % | 100 % | 2026-08-22 23:03 | 19+| [Eventbrite — billetterie libre-service (Québec)](eventbrite.md) | billetterie | actif | 435 | 100 % | 88 % | 100 % | 100 % | 0 % | 0 % | 98 % | 100 % | 2026-08-25 18:01 |
20−| [Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)](cantonsdelest.md) | tourisme-regional | actif | 11 | 82 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-22 23:02 | 20+| [Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)](cantonsdelest.md) | tourisme-regional | actif | 12 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 92 % | 0 % | 2026-08-25 18:00 |
21−| [evenko — grands concerts et festivals](evenko.md) | promoteur | actif | 413 | 97 % | 0 % | 99 % | 0 % | 1 % | 99 % | 100 % | 100 % | 2026-08-22 23:02 | 21+| [evenko — grands concerts et festivals](evenko.md) | promoteur | actif | 621 | 84 % | 0 % | 100 % | 0 % | 1 % | 100 % | 100 % | 100 % | 2026-08-25 18:00 |
22−| [Atuvu.ca — calendrier culturel](atuvu.md) | agregateur | actif | 217 | 82 % | 24 % | 46 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-22 23:01 | 22+| [Atuvu.ca — calendrier culturel](atuvu.md) | agregateur | actif | 227 | 82 % | 22 % | 56 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 17:59 |
23−| [La Vitrine culturelle](lavitrine.md) | billetterie | actif | 5039 | 69 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-22 22:26 | 23+| [La Vitrine culturelle](lavitrine.md) | billetterie | actif | 5008 | 72 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:04 |
24−| [Ville de Brossard — Calendrier des événements](brossard.md) | municipal | actif | 146 | 95 % | 0 % | 96 % | 0 % | 0 % | 0 % | 100 % | 95 % | 2026-08-22 23:02 | 24+| [Ville de Brossard — Calendrier des événements](brossard.md) | municipal | actif | 147 | 94 % | 0 % | 95 % | 95 % | 0 % | 0 % | 100 % | 94 % | 2026-08-25 18:00 |
25−| [Ticketmaster — Discovery API (Québec)](ticketmaster.md) | billetterie | actif | 359 | 100 % | 0 % | 96 % | 0 % | 4 % | 0 % | 89 % | 100 % | 2026-08-22 22:29 | 25+| [Ticketmaster — Discovery API (Québec)](ticketmaster.md) | billetterie | actif | 360 | 100 % | 0 % | 97 % | 0 % | 4 % | 0 % | 88 % | 100 % | 2026-08-25 18:07 |
26−| [Bandsintown — dates de concerts par artiste](bandsintown.md) | agregateur | actif | 519 | 100 % | 1 % | 100 % | 0 % | 0 % | 100 % | 8 % | 100 % | 2026-08-22 23:01 | 26+| [Bandsintown — dates de concerts par artiste](bandsintown.md) | agregateur | actif | 515 | 100 % | 1 % | 100 % | 0 % | 0 % | 100 % | 8 % | 100 % | 2026-08-25 17:59 |
27−| [Ville de Laval — calendrier vivant laval.ca](lavalweb.md) | municipal | actif | 443 | 75 % | 0 % | 98 % | 0 % | 0 % | 0 % | 0 % | 100 % | 2026-08-22 22:26 | 27+| [Ville de Gatineau — Calendrier officiel](gatineau.md) | municipal | actif | 254 | 87 % | 0 % | 99 % | 99 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:28 |
28−| [Tourisme Outaouais — calendrier des événements (ATR)](outaouais.md) | tourisme-regional | actif | 24 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-22 22:27 | 28+| [Ville de Lévis — Calendrier des événements](levis.md) | municipal | actif | 153 | 9 % | 0 % | 74 % | 73 % | 0 % | 0 % | 97 % | 12 % | 2026-08-25 18:28 |
29−| [Tourisme Lanaudière — événements (ATR)](lanaudiere.md) | tourisme-regional | actif | 44 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 93 % | 0 % | 2026-08-22 23:03 | 29+| [Ville de Terrebonne — Calendrier](terrebonne.md) | municipal | actif | 31 | 39 % | 0 % | 100 % | 100 % | 0 % | 0 % | 87 % | 100 % | 2026-08-25 18:34 |
30−| [Sorties Saguenay — portail événementiel de la Ville](saguenaysorties.md) | municipal | actif | 438 | 80 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 86 % | 2026-08-22 22:28 | 30+| [Ville de Laval — calendrier vivant laval.ca](lavalweb.md) | municipal | actif | 427 | 89 % | 0 % | 98 % | 0 % | 0 % | 0 % | 0 % | 100 % | 2026-08-25 18:04 |
31−| [Tourisme Bas-Saint-Laurent — événements (ATR)](bassaintlaurent.md) | tourisme-regional | actif | 20 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-22 23:01 | 31+| [Tourisme Outaouais — calendrier des événements (ATR)](outaouais.md) | tourisme-regional | actif | 23 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:05 |
32−| [Québec animée — Ville de Québec](quebecanimee.md) | municipal | actif | 102 | 100 % | 100 % | 0 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-22 22:27 | 32+| [Tourisme Lanaudière — événements (ATR)](lanaudiere.md) | tourisme-regional | actif | 35 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 91 % | 0 % | 2026-08-25 18:01 |
33−| [Place des Arts — calendrier multi-salles](placedesarts.md) | salle-de-spectacle | actif | 346 | 94 % | 73 % | 100 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-22 22:27 | 33+| [Sorties Saguenay — portail événementiel de la Ville](saguenaysorties.md) | municipal | actif | 438 | 80 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 86 % | 2026-08-25 18:06 |
34−| [LHJMQ — matchs des équipes québécoises](lhjmq.md) | sport | actif | 417 | 99 % | 0 % | 100 % | 0 % | 0 % | 0 % | 0 % | 100 % | 2026-08-22 22:27 | 34+| [Tourisme Bas-Saint-Laurent — événements (ATR)](bassaintlaurent.md) | tourisme-regional | actif | 17 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 17:59 |
35−| [Salles de spectacle — moteur générique JSON-LD Event](sallesjsonld.md) | salle-de-spectacle | actif | 308 | 100 % | 97 % | 100 % | 53 % | 1 % | 0 % | 13 % | 100 % | 2026-08-22 22:59 | 35+| [Québec animée — Ville de Québec](quebecanimee.md) | municipal | actif | 95 | 40 % | 100 % | 0 % | 0 % | 0 % | 0 % | 100 % | 74 % | 2026-08-25 18:05 |
36−| [Tourisme Gaspésie — événements (ATR)](gaspesie.md) | tourisme-regional | actif | 10 | 90 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-22 23:03 | 36+| [Place des Arts — calendrier multi-salles](placedesarts.md) | salle-de-spectacle | actif | 344 | 94 % | 74 % | 100 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:05 |
37−| [Tuxedo Billet — billetterie québécoise multi-tenants](tuxedobillet.md) | billetterie | actif | 442 | 44 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-22 22:29 | 37+| [LHJMQ — matchs des équipes québécoises](lhjmq.md) | sport | actif | 410 | 99 % | 0 % | 100 % | 0 % | 0 % | 0 % | 0 % | 100 % | 2026-08-25 18:05 |
38−| [Tourisme Montérégie — événements (ATR)](monteregie.md) | tourisme-regional | actif | 28 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 96 % | 0 % | 2026-08-22 22:27 | 38+| [Salles de spectacle — moteur générique JSON-LD Event](sallesjsonld.md) | salle-de-spectacle | actif | 685 | 98 % | 87 % | 90 % | 57 % | 0 % | 0 % | 53 % | 100 % | 2026-08-25 18:53 |
39−| [Tourisme Centre-du-Québec — événements (ATR)](centreduquebec.md) | tourisme-regional | actif | 9 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-22 23:02 | 39+| [Tourisme Mauricie — calendrier des événements (ATR)](mauricie.md) | tourisme-regional | actif | 157 | 94 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 98 % | 2026-08-25 18:24 |
40−| [Tourisme Chaudière-Appalaches — festivals et événements (ATR)](chaudiereappalaches.md) | tourisme-regional | actif | 28 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-22 23:02 | 40+| [Tourisme Laurentides — calendrier des événements (ATR)](laurentides.md) | tourisme-regional | actif | 228 | 2 % | 4 % | 5 % | 5 % | 0 % | 0 % | 92 % | 5 % | 2026-08-25 18:46 |
41−| [TicketAcces.net — billetterie régionale québécoise](ticketacces.md) | billetterie | actif | 1318 | 74 % | 21 % | 100 % | 0 % | 0 % | 0 % | 99 % | 100 % | 2026-08-22 22:28 | 41+| [Tourisme Gaspésie — événements (ATR)](gaspesie.md) | tourisme-regional | actif | 7 | 86 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:01 |
42−| [Réseau Ovation — billetterie québécoise multi-salles](ovation.md) | billetterie | actif | 311 | 100 % | 0 % | 100 % | 0 % | 0 % | 90 % | 100 % | 100 % | 2026-08-22 22:27 | 42+| [Tuxedo Billet — billetterie québécoise multi-tenants](tuxedobillet.md) | billetterie | actif | 382 | 80 % | 0 % | 9 % | 0 % | 2 % | 0 % | 100 % | 100 % | 2026-08-25 19:00 |
43−| [Ticketpro — billetterie canadienne (tenants Québec)](ticketpro.md) | billetterie | actif | 361 | 99 % | 0 % | 100 % | 0 % | 0 % | 78 % | 100 % | 100 % | 2026-08-22 22:57 | 43+| [Tourisme Montérégie — événements (ATR)](monteregie.md) | tourisme-regional | actif | 26 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 96 % | 0 % | 2026-08-25 18:05 |
44+| [Tourisme Centre-du-Québec — événements (ATR)](centreduquebec.md) | tourisme-regional | actif | 9 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:00 |
45+| [Tourisme Chaudière-Appalaches — festivals et événements (ATR)](chaudiereappalaches.md) | tourisme-regional | actif | 28 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:00 |
46+| [TicketAcces.net — billetterie régionale québécoise](ticketacces.md) | billetterie | actif | 1371 | 94 % | 56 % | 100 % | 0 % | 0 % | 0 % | 99 % | 100 % | 2026-08-25 18:06 |
47+| [Réseau Ovation — billetterie québécoise multi-salles](ovation.md) | billetterie | actif | 459 | 100 % | 0 % | 100 % | 0 % | 0 % | 90 % | 99 % | 100 % | 2026-08-25 18:05 |
48+| [Ticketpro — billetterie canadienne (tenants Québec)](ticketpro.md) | billetterie | actif | 395 | 99 % | 85 % | 100 % | 0 % | 2 % | 70 % | 100 % | 100 % | 2026-08-25 18:54 |
49+| [Zeffy — billetterie OSBL](zeffy.md) | billetterie | actif | 15 | 80 % | 100 % | 100 % | 100 % | 0 % | 0 % | 87 % | 0 % | 2026-08-25 18:49 |
50+| [Showpass — billetterie canadienne](showpass.md) | billetterie | actif | 45 | 100 % | 98 % | 100 % | 89 % | 2 % | 0 % | 89 % | 100 % | 2026-08-25 18:35 |
51+| [Tourisme Côte-Nord — événements (ATR)](cotenord.md) | tourisme-regional | actif | 10 | 100 % | 20 % | 0 % | 0 % | 0 % | 0 % | 40 % | 0 % | 2026-08-25 18:18 |
52+| [Tourisme Abitibi-Témiscamingue — festivals et événements (ATR)](abitibi.md) | tourisme-regional | actif | 32 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:44 |
53+| [Tourisme Îles-de-la-Madeleine — festivals et événements (ATR)](ilesdelamadeleine.md) | tourisme-regional | actif | 0 | — | — | — | — | — | — | 2026-08-25 18:18 |
54+| [Tourisme Charlevoix — calendrier des événements (ATR)](charlevoix.md) | tourisme-regional | actif | 154 | 100 % | 49 % | 97 % | 97 % | 0 % | 0 % | 66 % | 0 % | 2026-08-25 18:25 |
55+| [Eeyou Istchee Baie-James — événements (ATR)](eeyouistchee.md) | tourisme-regional | actif | 22 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:19 |
56+| [Tourisme Laval — événements (ATR)](tourismelaval.md) | tourisme-regional | actif | 21 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-25 18:19 |
57+| [Québec cité — calendrier des événements (ATR)](quebeccite.md) | tourisme-regional | actif | 469 | 97 % | 90 % | 0 % | 0 % | 0 % | 0 % | 100 % | 97 % | 2026-08-25 18:24 |
58+| [Tourisme Montréal (mtl.org) — festivals et événements (ATR)](mtlorg.md) | tourisme-regional | actif | 546 | 95 % | 0 % | 0 % | 0 % | 0 % | 0 % | 79 % | 92 % | 2026-08-25 18:25 |
59+| [Ville de Trois-Rivières — Calendrier des activités](troisrivieres.md) | municipal | actif | 17 | 59 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:29 |
60+| [Ville de Rimouski — Événements](rimouski.md) | municipal | actif | 56 | 96 % | 0 % | 89 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:28 |
61+| [Ville de Victoriaville — Quoi faire à Victo](victoriaville.md) | municipal | actif | 290 | 58 % | 0 % | 78 % | 0 % | 0 % | 0 % | 100 % | 99 % | 2026-08-25 18:29 |
62+| [Ville de Drummondville — Calendrier des événements](drummondville.md) | municipal | actif | 117 | 3 % | 50 % | 91 % | 0 % | 0 % | 0 % | 100 % | 50 % | 2026-08-25 18:34 |
63+| [Ville de Granby — Calendrier des événements (liste éditoriale)](granby.md) | municipal | actif | 8 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 2026-08-25 18:19 |
64+| [Ville de Saint-Jérôme — Calendrier](saintjerome.md) | municipal | actif | 28 | 71 % | 0 % | 86 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:29 |
65+| [Ville de Saint-Hyacinthe — Calendrier des événements](sainthyacinthe.md) | municipal | actif | 17 | 41 % | 100 % | 0 % | 0 % | 0 % | 0 % | 100 % | 94 % | 2026-08-25 18:29 |
66+| [Ville de Rouyn-Noranda — Événements](rouynnoranda.md) | municipal | actif | 4 | 25 % | 0 % | 100 % | 75 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:19 |
67+| [Ville de Shawinigan — Calendrier des événements](shawinigan.md) | municipal | actif | 7 | 14 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:19 |
68+| [Ville de Joliette — Événements](joliette.md) | municipal | actif | 10 | 70 % | 60 % | 100 % | 60 % | 0 % | 0 % | 100 % | 100 % | 2026-08-25 18:19 |
69+| [Ville de Magog — Événements et activités (agenda Google public)](magog.md) | municipal | actif | 190 | 99 % | 0 % | 100 % | 100 % | 0 % | 0 % | 0 % | 100 % | 2026-08-25 18:25 |
70+| [Ville de Sorel-Tracy — Événements](soreltracy.md) | municipal | actif | 64 | 66 % | 69 % | 67 % | 56 % | 0 % | 0 % | 100 % | 72 % | 2026-08-25 18:27 |
71+| [Signé Laval — calendrier culturel officiel de Laval](signelaval.md) | agregateur | actif | 172 | 99 % | 0 % | 90 % | 54 % | 1 % | 0 % | 100 % | 100 % | 2026-08-25 18:37 |
72+| [Quoi faire — agrégateur de sorties québécois](quoifaire.md) | agregateur | actif | 113 | 100 % | 100 % | 56 % | 0 % | 0 % | 0 % | 100 % | 42 % | 2026-08-25 18:52 |
73+| [Événements Attractions Québec (quebecvacances.com)](evenementsattractions.md) | agregateur | actif | 20 | 40 % | 0 % | 0 % | 0 % | 0 % | 0 % | 55 % | 0 % | 2026-08-25 18:48 |
74+| [BAnQ — calendrier des activités](banq.md) | agregateur | actif | 50 | 96 % | 100 % | 100 % | 100 % | 4 % | 0 % | 100 % | 96 % | 2026-08-25 18:42 |
44 75
45 ## Sources abandonnées 76 ## Sources abandonnées
46 77
@@ -48,17 +79,10 @@
48 |---|---|---| 79 |---|---|---|
49 | [Ville de Saguenay — Événements culturels](saguenay.md) | donnees-ouvertes | Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17). REMPLACÉE 2026… | 80 | [Ville de Saguenay — Événements culturels](saguenay.md) | donnees-ouvertes | Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17). REMPLACÉE 2026… |
50 | [Ville de Repentigny — Événements](repentigny.md) | donnees-ouvertes | Jeu de données périmé — dernière date d'événement : 2021-09 (vérifié 2026-08-17) | 81 | [Ville de Repentigny — Événements](repentigny.md) | donnees-ouvertes | Jeu de données périmé — dernière date d'événement : 2021-09 (vérifié 2026-08-17) |
51−| [Ville de Gatineau — Événements](gatineau.md) | municipal | Aucun jeu de données « événements » sur Données Québec (portail Gatineau : géomatique seulement)… |
52−| [Ville de Trois-Rivières — Événements](trois-rivieres.md) | municipal | API REST WordPress verrouillée (401 rest_not_logged_in) et aucun jeu « événements » sur Données … |
53−| [Ville de Lévis — Calendrier](levis.md) | municipal | Site derrière un WAF (403 sur GET identifiés) et aucun jeu « événements » sur Données Québec (vé… |
54−| [Ville de Terrebonne — Calendrier](terrebonne.md) | municipal | Cloudflare bloque tout GET non navigateur (403) et aucun jeu « événements » sur Données Québec (… |
55−| [Tourisme Mauricie — événements (ATR)](mauricie.md) | tourisme-regional | ÉCARTÉE 2026-08-19 (Phase 3) : liste /evenements rendue JS — 1 seule carte SSR par page (vérifié… |
56−| [Tourisme Laurentides — événements (ATR)](laurentides.md) | tourisme-regional | ÉCARTÉE 2026-08-19 (Phase 3) : WAF — 403 sur GET identifié (UA honnête). Scrapfly possible mais … |
57 | [Clubs professionnels (CF Montréal, Alouettes, Rocket, Victoire…)](clubs-pros.md) | sport | ÉCARTÉE 2026-08-19 (Phase 3) : les matchs à domicile passent déjà par les billetteries connectée… | 82 | [Clubs professionnels (CF Montréal, Alouettes, Rocket, Victoire…)](clubs-pros.md) | sport | ÉCARTÉE 2026-08-19 (Phase 3) : les matchs à domicile passent déjà par les billetteries connectée… |
58−| [Zeffy — billetterie OSBL (Montréal)](zeffy.md) | billetterie | n/d | 83+| [Weezevent — billetterie libre-service](weezevent.md) | billetterie | ÉCART CONFIRMÉ 2026-08-25 : aucune surface d'énumération publique — tout connecteur dépendrait d… |
59−| [Showpass — billetterie canadienne](showpass.md) | billetterie | n/d | 84+| [Accès culture — réseau culturel de Montréal](accesculture.md) | agregateur | RE-SONDÉE 2026-08-25 : domaine squatté, contenu figé 2015 (dates réelles : mars-mai 2015) — conn… |
60−| [Weezevent — billetterie libre-service](weezevent.md) | billetterie | n/d | 85+| [Tourisme Saguenay–Lac-Saint-Jean (ATR)](saguenaylacsaintjean.md) | tourisme-regional | ÉCARTÉE 2026-08-25 (vague ATR) : site TYPO3 = annuaire d'attraits SANS calendrier — aucune date … |
61−| [Accès culture — réseau culturel de Montréal](accesculture.md) | agregateur | n/d |
62 86
63 ## Régénérer cette documentation 87 ## Régénérer cette documentation
64 88
added docs/connecteurs/abitibi.md +115 −0
@@ -0,0 +1,115 @@
1+# Tourisme Abitibi-Témiscamingue — festivals et événements (ATR) (`abitibi`)
2+
3+> Fiche générée le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4+
5+**Statut : actif** · Type : `tourisme-regional` · Connecteur : `sortika/connectors/abitibi.py`
6+
7+## Description
8+
9+- **Source** : [Tourisme Abitibi-Témiscamingue — festivals et événements (ATR)](https://abitibi-temiscamingue.org/festivals-et-evenements/)
10+- **Couverture** : Abitibi-Témiscamingue
11+- **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
12+
13+## Accès
14+
15+- **Type** : tourisme-regional
16+- **Endpoint** (`BASE`) : `https://abitibi-temiscamingue.org`
17+- **Auth** : Aucune côté source ; `SCRAPFLY_API_KEY` requis pour le backend Scrapfly
18+- **Pagination** : par numéro de page
19+- **Backend** : Scrapfly (anti-bot / rendu JS) via `base.get_scrapfly()`
20+- **Throttle** : 1.0 s entre requêtes
21+- **Accès légal** : Pages publiques de l'ATR — requêtes throttlées et plafonnées (coût Scrapfly), UA honnête, lien vers la fiche originale
22+
23+<details><summary>En-tête documentaire du connecteur</summary>
24+
25+> connectors/abitibi.py : Tourisme Abitibi-Témiscamingue (ATR, vague ATR 2026-08)
26+> Source : abitibi-temiscamingue.org/festivals-et-evenements/ (domaine
27+> tourisme-abitibi-temiscamingue.org → redirection) — répertoire
28+> officiel des festivals et événements de l'ATR (WordPress,
29+> gisement Tourinsoft : images mto.media.tourinsoft.eu).
30+> Extraction: pages liste RENDUES SERVEUR /festivals-et-evenements/[page/N/]
31+> (~3 pages × 12 cartes vérifié 2026-08-25) : lien
32+> /evenements/<slug>/, image, ville, titre, plage de dates FR
33+> (« Du 26 au 30 août 2026 »). Le site est derrière un challenge
34+> Cloudflare (403 + « Just a moment ») → chaque GET passe par
35+> l'AUTO-ESCALADE anti-bot de BaseConnector.get() (Oxylabs →
36+> Scrapfly ASP → Bright Data) ; budget borné : ABT_PAGE_MAX
37+> pages/sync, AUCUNE fiche détail (la carte porte tout ce que la
38+> source publie de structuré ; wp-json est aussi derrière le
39+> challenge et n'expose pas de CPT événement).
40+> Accès : pages publiques de l'ATR — requêtes throttlées et plafonnées
41+> (coût par requête), identification honnête, lien vers la fiche
42+> originale. Ni prix, ni heure, ni description structurés sur la
43+> carte → jamais inventés.
44+
45+</details>
46+
47+## Champs récupérés → schéma
48+
49+Complétude mesurée sur les **32 événements actifs** de la source ; exemples tirés d'un événement réel (`abitibi:16522`).
50+
51+| Champ (`events.*`) | Description | Complétude | Exemple réel |
52+|---|---|---|---|
53+| `title` — Titre | titre de l'événement | 100 % | Beltane – La Feste Païenne par le Cirque Collini |
54+| `description` — Description | texte descriptif (source ou fiche détail) | 0 % | ∅ |
55+| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://abitibi-temiscamingue.org/evenements/beltane-la-feste-paienne-par-le-cirque-collini-2/ |
56+| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["festival", "arts-scene"] |
57+| `venue` — Salle (venue) | nom du lieu | 0 % | ∅ |
58+| `address` — Adresse | adresse civique | 0 % | ∅ |
59+| `city` — Ville | municipalité | 100 % | Rouyn-Noranda |
60+| `region` — Région | région administrative | 100 % | Abitibi-Témiscamingue |
61+| `lat` — GPS (lat/lng) | coordonnées géographiques | 0 % | ∅ |
62+| `start_date` — Date début | date locale AAAA-MM-JJ | 25 % | 2026-08-26 |
63+| `end_date` — Date fin | date locale AAAA-MM-JJ | 25 % | 2026-08-30 |
64+| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
65+| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
66+| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
67+| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
68+| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
69+| `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
70+| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
71+| `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
72+| `image` — Image | visuel (og:image ou média source) | 100 % | https://mto.media.tourinsoft.eu/upload/Beltane-La-Feste-Paienne.png?width=500 |
73+| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
74+
75+## Fréquence & budgets
76+
77+- **Cadence** : hebdomadaire
78+- **Budgets / plafonds (variables d'environnement)** :
79+
80+| Variable | Défaut | Rôle |
81+|---|---|---|
82+| `ABT_PAGE_MAX` | `4` | — |
83+- **Budget global** : géocodage Nominatim plafonné à `SORTIKA_GEOCODE_MAX` (défaut 120) requêtes réseau/cycle, toutes sources confondues (`sortika/geocode.py`, cache disque).
84+
85+## Volumétrie & complétude live
86+
87+*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
88+
89+- **Événements en base** : 32 (dont **32 actifs**)
90+- **GPS** : 0/32 actifs (0 %)
91+- **Prix** : 0/32 actifs (0 %)
92+- **Heure (start_time)** : 0/32 actifs (0 %)
93+- **Heure de fin** : 0/32 actifs (0 %)
94+- **Statut (annulé/reporté/complet)** : 0/32 actifs (0 %)
95+- **Artistes** : 0/32 actifs (0 %)
96+- **Image** : 32/32 actifs (100 %)
97+- **Salle (venue)** : 0/32 actifs (0 %)
98+- **Dernier sync** : 2026-08-25 18:44 — fetched 32, +32 ajoutés, ~0 mis à jour, -0 retirés
99+- **Syncs enregistrés** (sync_log) : 1
100+
101+## Erreurs & dépannage
102+
103+Aucune erreur dans `sync_log` pour cette source. ✅
104+
105+- Rejouer un sync isolé : `python3 run.py sync --source abitibi` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='abitibi' ORDER BY ts DESC LIMIT 5;"`
106+
107+## Licence / attribution
108+
109+- Pages publiques de l'ATR — requêtes throttlées et plafonnées (coût Scrapfly), UA honnête, lien vers la fiche originale
110+
111+## Historique
112+
113+- **2026-08-18 — Vague 1 d'enrichissement** (commit `7d9d1b0`) : géocodage Nominatim des salles (`sortika/geocode.py`, cache disque, plafond `SORTIKA_GEOCODE_MAX`), fiches détail lepointdevente (description, heure, tarifs réels `/plugins/rates/<id>`), contacts Tourinsoft (SITQ), heure locale Montréal via JSON-LD.
114+- **2026-08-18 — Vague 2 d'enrichissement** (commit `65d2d33`) : colonnes additives `events.start_time` (HH:MM locale QC) et `events.artists` (JSON) + migration auto ; heure captée partout où la source la publie (lepointdevente, evenko, Laval, Sherbrooke, Montréal, atuvu) ; artistes (headliners evenko, lineup Bandsintown, attractions Ticketmaster, patrons sûrs sur les titres) ; 3 nouveaux connecteurs (brossard, ticketmaster, bandsintown).
115+- **2026-08-19 — Phase 2 (travail de moine)** : colonnes additives `end_time`, `status` (annulé/reporté/complet) et `quarantine` (règles anti-aberrations, non publié mais réintégrable) ; règle d'ARCHIVAGE des événements terminés à chaque cycle (jamais supprimés) ; dedup_key inclut désormais l'heure (les séances multiples d'un même jour ne sont plus écrasées à l'affichage) ; alerte « 0 événement futur / chute > 80 % » par source (data/future_counts.json + /api/sources) ; heure et description La Vitrine ; end_time/organisateur/statut Eventbrite ; og:description Atuvu ; premières parties + portes + tournée evenko ; offres billets Bandsintown ; taxonomie type-event + description intégrale Brossard ; image Longueuil ; géocodage par ADRESSE CIVIQUE prioritaire ; villes normalisées au Répertoire MAMH (data/villes_canon.json) ; laval consignée « morte-a-la-source ».
modified docs/connecteurs/accesculture.md +6 −5
@@ -1,21 +1,22 @@
1 # Accès culture — réseau culturel de Montréal (`accesculture`) 1 # Accès culture — réseau culturel de Montréal (`accesculture`)
2 2
3−> Fiche générée le 2026-08-22 23:05 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script. 3+> Fiche générée le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 **Statut : abandonnee** · Type : `agregateur` · Connecteur : *aucun (source sans connecteur runtime)* 5 **Statut : abandonnee** · Type : `agregateur` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
7 ## Description 7 ## Description
8 8
9 - **Source** : [Accès culture — réseau culturel de Montréal](https://www.accesculture.com/) 9 - **Source** : [Accès culture — réseau culturel de Montréal](https://www.accesculture.com/)
10−- **Couverture** : Diffuseurs des arrondissements de Montréal 10+- **Couverture** : AUCUNE : domaine recyclé (ferme SEO hôtels) hébergeant une copie fossilisée du site 2015 ; toute date « déduite » serait fabriquée
11 - **Extraction** : — 11 - **Extraction** : —
12+- **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.
12 13
13 ## Accès 14 ## Accès
14 15
15 - **Type** : agregateur 16 - **Type** : agregateur
16 - **Endpoint** : voir URL source (https://www.accesculture.com/) 17 - **Endpoint** : voir URL source (https://www.accesculture.com/)
17 - **Auth** : Aucune (accès public, identification honnête par User-Agent) 18 - **Auth** : Aucune (accès public, identification honnête par User-Agent)
18−- **Accès légal** : robots.txt permissif, sitemap public 19+- **Accès légal** : —
19 20
20 ## Champs récupérés → schéma 21 ## Champs récupérés → schéma
21 22
@@ -35,11 +36,11 @@
35 36
36 ## Licence / attribution 37 ## Licence / attribution
37 38
38−- robots.txt permissif, sitemap public 39+- —
39 40
40 ## Historique 41 ## Historique
41 42
42−- **Source abandonnée** — sans note 43+- **Source abandonnée** — 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.
43 - **2026-08-18 — Vague 1 d'enrichissement** (commit `7d9d1b0`) : géocodage Nominatim des salles (`sortika/geocode.py`, cache disque, plafond `SORTIKA_GEOCODE_MAX`), fiches détail lepointdevente (description, heure, tarifs réels `/plugins/rates/<id>`), contacts Tourinsoft (SITQ), heure locale Montréal via JSON-LD. 44 - **2026-08-18 — Vague 1 d'enrichissement** (commit `7d9d1b0`) : géocodage Nominatim des salles (`sortika/geocode.py`, cache disque, plafond `SORTIKA_GEOCODE_MAX`), fiches détail lepointdevente (description, heure, tarifs réels `/plugins/rates/<id>`), contacts Tourinsoft (SITQ), heure locale Montréal via JSON-LD.
44 - **2026-08-18 — Vague 2 d'enrichissement** (commit `65d2d33`) : colonnes additives `events.start_time` (HH:MM locale QC) et `events.artists` (JSON) + migration auto ; heure captée partout où la source la publie (lepointdevente, evenko, Laval, Sherbrooke, Montréal, atuvu) ; artistes (headliners evenko, lineup Bandsintown, attractions Ticketmaster, patrons sûrs sur les titres) ; 3 nouveaux connecteurs (brossard, ticketmaster, bandsintown). 45 - **2026-08-18 — Vague 2 d'enrichissement** (commit `65d2d33`) : colonnes additives `events.start_time` (HH:MM locale QC) et `events.artists` (JSON) + migration auto ; heure captée partout où la source la publie (lepointdevente, evenko, Laval, Sherbrooke, Montréal, atuvu) ; artistes (headliners evenko, lineup Bandsintown, attractions Ticketmaster, patrons sûrs sur les titres) ; 3 nouveaux connecteurs (brossard, ticketmaster, bandsintown).
45 - **2026-08-19 — Phase 2 (travail de moine)** : colonnes additives `end_time`, `status` (annulé/reporté/complet) et `quarantine` (règles anti-aberrations, non publié mais réintégrable) ; règle d'ARCHIVAGE des événements terminés à chaque cycle (jamais supprimés) ; dedup_key inclut désormais l'heure (les séances multiples d'un même jour ne sont plus écrasées à l'affichage) ; alerte « 0 événement futur / chute > 80 % » par source (data/future_counts.json + /api/sources) ; heure et description La Vitrine ; end_time/organisateur/statut Eventbrite ; og:description Atuvu ; premières parties + portes + tournée evenko ; offres billets Bandsintown ; taxonomie type-event + description intégrale Brossard ; image Longueuil ; géocodage par ADRESSE CIVIQUE prioritaire ; villes normalisées au Répertoire MAMH (data/villes_canon.json) ; laval consignée « morte-a-la-source ». 46 - **2026-08-19 — Phase 2 (travail de moine)** : colonnes additives `end_time`, `status` (annulé/reporté/complet) et `quarantine` (règles anti-aberrations, non publié mais réintégrable) ; règle d'ARCHIVAGE des événements terminés à chaque cycle (jamais supprimés) ; dedup_key inclut désormais l'heure (les séances multiples d'un même jour ne sont plus écrasées à l'affichage) ; alerte « 0 événement futur / chute > 80 % » par source (data/future_counts.json + /api/sources) ; heure et description La Vitrine ; end_time/organisateur/statut Eventbrite ; og:description Atuvu ; premières parties + portes + tournée evenko ; offres billets Bandsintown ; taxonomie type-event + description intégrale Brossard ; image Longueuil ; géocodage par ADRESSE CIVIQUE prioritaire ; villes normalisées au Répertoire MAMH (data/villes_canon.json) ; laval consignée « morte-a-la-source ».
modified docs/connecteurs/atuvu.md +43 −35
@@ -1,6 +1,6 @@
1 # Atuvu.ca — calendrier culturel (`atuvu`) 1 # Atuvu.ca — calendrier culturel (`atuvu`)
2 2
3−> Fiche générée le 2026-08-22 23:05 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script. 3+> Fiche générée le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/atuvu.py` 5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/atuvu.py`
6 6
@@ -8,7 +8,7 @@
8 8
9 - **Source** : [Atuvu.ca — calendrier culturel](https://atuvu.ca/) 9 - **Source** : [Atuvu.ca — calendrier culturel](https://atuvu.ca/)
10 - **Couverture** : Sorties culturelles, Grand Montréal 10 - **Couverture** : Sorties culturelles, Grand Montréal
11−- **Extraction** : Scrapfly (Cloudflare) — sitemaps lastmod + fiches .event-play (date FR + heure « 20h00 » → start_time), cache incrémental data/atuvu_cache.json, plafond 120 fiches/sync 11+- **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
12 12
13 ## Accès 13 ## Accès
14 14
@@ -24,44 +24,52 @@
24 24
25 > connectors/atuvu.py : connecteur Atuvu.ca — calendrier culturel (Grand Montréal +) 25 > connectors/atuvu.py : connecteur Atuvu.ca — calendrier culturel (Grand Montréal +)
26 > Source : atuvu.ca (théâtre, musique, humour, danse, expositions…) 26 > Source : atuvu.ca (théâtre, musique, humour, danse, expositions…)
27−> Extraction: SCRAPFLY obligatoire (Cloudflare) — sitemaps XML publics 27+> Extraction: GET direct d'abord (vérifié 200 depuis le nœud de prod,
28+> 2026-08-25 ; escalade anti-bot auto du BaseConnector), repli
29+> SCRAPFLY si défi Cloudflare — sitemaps XML publics
28 > (evenements_N_2000.xml, lastmod par fiche) puis pages fiche 30 > (evenements_N_2000.xml, lastmod par fiche) puis pages fiche
29−> (h1, blocs .event-play : date FR, salle, ville, prix). 31+> (h1, blocs .event-play : date FR + HEURE, salle, ville, prix).
30−> INCRÉMENTAL avec cache disque (data/atuvu_cache.json) : seules 32+> INCRÉMENTAL avec cache disque (data/atuvu_cache.json), version
31−> les fiches nouvelles ou modifiées sont re-scrapées, plafonné à 33+> de parse « v » (patron lavitrine) : fiches nouvelles/modifiées
32−> ATUVU_MAX_FETCH pages/sync pour contenir le coût en crédits. 34+> d'abord, backfill v<2 (rows figés sans heure/prix par un
35+> parseur antérieur — constaté 2026-08-25), puis re-visite
36+> roulante 14 j des fiches à venir (les tarifs apparaissent
37+> souvent APRÈS la mise en vente, sans bump de lastmod),
38+> plafonné à ATUVU_MAX_FETCH pages/sync.
33 > Accès : robots.txt « User-Agent: * / Allow: / » + sitemap public. 39 > Accès : robots.txt « User-Agent: * / Allow: / » + sitemap public.
34 > Prix : bloc .price-reg de la fiche (prix régulier) → price_min ; 40 > Prix : bloc .price-reg de la fiche (prix régulier) → price_min ;
35 > « Invitation gratuite » = offre membre, PAS gratuité → ignorée. 41 > « Invitation gratuite » = offre membre, PAS gratuité → ignorée.
42+> Séances : 2 représentations le même jour = 2 événements (suffixe -HHMM
43+> dès la 2ᵉ séance du jour ; la 1ʳᵉ garde l'id historique).
36 44
37 </details> 45 </details>
38 46
39 ## Champs récupérés → schéma 47 ## Champs récupérés → schéma
40 48
41−Complétude mesurée sur les **217 événements actifs** de la source ; exemples tirés d'un événement réel (`atuvu:on-daaaaance-2026-08-22`). 49+Complétude mesurée sur les **227 événements actifs** de la source ; exemples tirés d'un événement réel (`atuvu:requiem-de-mozart-2026-11-07`).
42 50
43 | Champ (`events.*`) | Description | Complétude | Exemple réel | 51 | Champ (`events.*`) | Description | Complétude | Exemple réel |
44 |---|---|---|---| 52 |---|---|---|---|
45−| `title` — Titre | titre de l'événement | 100 % | On Daaaaance | 53+| `title` — Titre | titre de l'événement | 100 % | Requiem de Mozart |
46 | `description` — Description | texte descriptif (source ou fiche détail) | 0 % | ∅ | 54 | `description` — Description | texte descriptif (source ou fiche détail) | 0 % | ∅ |
47−| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://atuvu.ca/billets-spectacle/on-daaaaance | 55+| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://atuvu.ca/billets-spectacle/requiem-de-mozart |
48−| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique", "arts-scene"] | 56+| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique", "cinema"] |
49−| `venue` — Salle (venue) | nom du lieu | 100 % | Maison Mère Baie-Saint-Paul | 57+| `venue` — Salle (venue) | nom du lieu | 100 % | Basilique Notre-Dame de Montréal |
50 | `address` — Adresse | adresse civique | 0 % | ∅ | 58 | `address` — Adresse | adresse civique | 0 % | ∅ |
51−| `city` — Ville | municipalité | 98 % | Baie-Saint-Paul | 59+| `city` — Ville | municipalité | 98 % | Montréal |
52−| `region` — Région | région administrative | 96 % | Capitale-Nationale | 60+| `region` — Région | région administrative | 96 % | Montréal |
53−| `lat` — GPS (lat/lng) | coordonnées géographiques | 82 % | 47.4384969, -70.5066321 | 61+| `lat` — GPS (lat/lng) | coordonnées géographiques | 82 % | 45.5044365, -73.5559901 |
54−| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-22 | 62+| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-11-07 |
55−| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-22 | 63+| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-11-07 |
56−| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 46 % | 11:30 | 64+| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 56 % | 14:00 |
57 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ | 65 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
58 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ | 66 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
59−| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 18 % | ∅ | 67+| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 19 % | 0 |
60−| `price_min` — Prix min | tarif minimal réel ($) | 24 % | 0.0 | 68+| `price_min` — Prix min | tarif minimal réel ($) | 22 % | 54.58 |
61−| `price_label` — Libellé prix | étiquette tarifaire affichable | 18 % | ∅ | 69+| `price_label` — Libellé prix | étiquette tarifaire affichable | 19 % | 54.58 $ (prix régulier atuvu.ca) |
62 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] | 70 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
63 | `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ | 71 | `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
64−| `image` — Image | visuel (og:image ou média source) | 100 % | https://atuvu.ca/uploads/images/2026/07/on-daaaaance.jpg | 72+| `image` — Image | visuel (og:image ou média source) | 100 % | https://atuvu.ca/uploads/images/2026/08/requiem-mozart.jpg |
65 | `website` — Site web | site officiel de l'événement | 0 % | ∅ | 73 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
66 74
67 ## Fréquence & budgets 75 ## Fréquence & budgets
@@ -76,19 +84,19 @@ Complétude mesurée sur les **217 événements actifs** de la source ; exemples
76 84
77 ## Volumétrie & complétude live 85 ## Volumétrie & complétude live
78 86
79−*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)* 87+*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
80− 88+
81−- **Événements en base** : 249 (dont **217 actifs**) 89+- **Événements en base** : 273 (dont **227 actifs**)
82−- **GPS** : 177/217 actifs (82 %) 90+- **GPS** : 187/227 actifs (82 %)
83−- **Prix** : 51/217 actifs (24 %) 91+- **Prix** : 49/227 actifs (22 %)
84−- **Heure (start_time)** : 100/217 actifs (46 %) 92+- **Heure (start_time)** : 127/227 actifs (56 %)
85−- **Heure de fin** : 0/217 actifs (0 %) 93+- **Heure de fin** : 0/227 actifs (0 %)
86−- **Statut (annulé/reporté/complet)** : 0/217 actifs (0 %) 94+- **Statut (annulé/reporté/complet)** : 0/227 actifs (0 %)
87−- **Artistes** : 0/217 actifs (0 %) 95+- **Artistes** : 0/227 actifs (0 %)
88−- **Image** : 217/217 actifs (100 %) 96+- **Image** : 227/227 actifs (100 %)
89−- **Salle (venue)** : 217/217 actifs (100 %) 97+- **Salle (venue)** : 227/227 actifs (100 %)
90−- **Dernier sync** : 2026-08-22 23:01 — fetched 253, +0 ajoutés, ~2 mis à jour, -0 retirés 98+- **Dernier sync** : 2026-08-25 17:59 — fetched 274, +3 ajoutés, ~12 mis à jour, -0 retirés
91−- **Syncs enregistrés** (sync_log) : 120 99+- **Syncs enregistrés** (sync_log) : 175
92 100
93 ## Erreurs & dépannage 101 ## Erreurs & dépannage
94 102
modified docs/connecteurs/bandsintown.md +22 −17
@@ -1,6 +1,6 @@
1 # Bandsintown — dates de concerts par artiste (`bandsintown`) 1 # Bandsintown — dates de concerts par artiste (`bandsintown`)
2 2
3−> Fiche générée le 2026-08-22 23:05 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script. 3+> Fiche générée le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/bandsintown.py` 5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/bandsintown.py`
6 6
@@ -8,7 +8,7 @@
8 8
9 - **Source** : [Bandsintown — dates de concerts par artiste](https://rest.bandsintown.com/) 9 - **Source** : [Bandsintown — dates de concerts par artiste](https://rest.bandsintown.com/)
10 - **Couverture** : Concerts au Québec des artistes en tournée connus de la base 10 - **Couverture** : Concerts au Québec des artistes en tournée connus de la base
11−- **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 11+- **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
12 12
13 ## Accès 13 ## Accès
14 14
@@ -37,13 +37,18 @@
37 > cache entre deux visites (re-visite après 3 jours). 37 > cache entre deux visites (re-visite après 3 jours).
38 > Champs : datetime local (date + heure), salle géolocalisée (lat/lng), 38 > Champs : datetime local (date + heure), salle géolocalisée (lat/lng),
39 > lineup → artistes, `free` → is_free, offres/billets → url, 39 > lineup → artistes, `free` → is_free, offres/billets → url,
40−> image de l'artiste. 40+> image de l'artiste. L'objet `artist` n'est renseigné que sur
41+> CERTAINS événements de la réponse (dict vide sur d'autres —
42+> constaté 2026-08-25, cause de l'image à 8 %) : l'image est
43+> reprise de n'importe quel événement de la réponse, sinon du
44+> profil /artists/{artiste} (1 GET de plus, seulement si
45+> l'artiste a des dates QC sans image).
41 46
42 </details> 47 </details>
43 48
44 ## Champs récupérés → schéma 49 ## Champs récupérés → schéma
45 50
46−Complétude mesurée sur les **519 événements actifs** de la source ; exemples tirés d'un événement réel (`bandsintown:108801594`). 51+Complétude mesurée sur les **515 événements actifs** de la source ; exemples tirés d'un événement réel (`bandsintown:108801594`).
47 52
48 | Champ (`events.*`) | Description | Complétude | Exemple réel | 53 | Champ (`events.*`) | Description | Complétude | Exemple réel |
49 |---|---|---|---| 54 |---|---|---|---|
@@ -82,19 +87,19 @@ Complétude mesurée sur les **519 événements actifs** de la source ; exemples
82 87
83 ## Volumétrie & complétude live 88 ## Volumétrie & complétude live
84 89
85−*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)* 90+*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
86− 91+
87−- **Événements en base** : 532 (dont **519 actifs**) 92+- **Événements en base** : 546 (dont **515 actifs**)
88−- **GPS** : 519/519 actifs (100 %) 93+- **GPS** : 515/515 actifs (100 %)
89−- **Prix** : 5/519 actifs (1 %) 94+- **Prix** : 3/515 actifs (1 %)
90−- **Heure (start_time)** : 518/519 actifs (100 %) 95+- **Heure (start_time)** : 514/515 actifs (100 %)
91−- **Heure de fin** : 0/519 actifs (0 %) 96+- **Heure de fin** : 0/515 actifs (0 %)
92−- **Statut (annulé/reporté/complet)** : 0/519 actifs (0 %) 97+- **Statut (annulé/reporté/complet)** : 0/515 actifs (0 %)
93−- **Artistes** : 519/519 actifs (100 %) 98+- **Artistes** : 515/515 actifs (100 %)
94−- **Image** : 44/519 actifs (8 %) 99+- **Image** : 40/515 actifs (8 %)
95−- **Salle (venue)** : 519/519 actifs (100 %) 100+- **Salle (venue)** : 515/515 actifs (100 %)
96−- **Dernier sync** : 2026-08-22 23:01 — fetched 522, +0 ajoutés, ~0 mis à jour, -0 retirés 101+- **Dernier sync** : 2026-08-25 17:59 — fetched 518, +0 ajoutés, ~0 mis à jour, -0 retirés
97−- **Syncs enregistrés** (sync_log) : 105 102+- **Syncs enregistrés** (sync_log) : 160
98 103
99 ## Erreurs & dépannage 104 ## Erreurs & dépannage
100 105
added docs/connecteurs/banq.md +114 −0
@@ -0,0 +1,114 @@
1+# BAnQ — calendrier des activités (`banq`)
2+
3+> Fiche générée le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4+
5+**Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/banq.py`
6+
7+## Description
8+
9+- **Source** : [BAnQ — calendrier des activités](https://www.banq.qc.ca/calendrier/a-venir)
10+- **Couverture** : ~140 activités à venir (Grande Bibliothèque + centres régionaux — ateliers, conférences, heure du conte)
11+- **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
12+
13+## Accès
14+
15+- **Type** : agregateur
16+- **Endpoint** (`BASE`) : `https://www.banq.qc.ca`
17+- **Auth** : Aucune côté source ; `SCRAPFLY_API_KEY` requis pour le backend Scrapfly
18+- **Pagination** : aucune (flux unique)
19+- **Backend** : Scrapfly (anti-bot / rendu JS) via `base.get_scrapfly()`
20+- **Throttle** : 1.0 s entre requêtes
21+- **Accès légal** : robots.txt Drupal standard (calendrier non exclu) ; 1 rendu JS + ≤50 fiches par sync, cadence contenue
22+
23+<details><summary>En-tête documentaire du connecteur</summary>
24+
25+> connectors/banq.py : connecteur BAnQ (banq.qc.ca) — activités & conférences
26+> Source : calendrier des activités de Bibliothèque et Archives nationales
27+> du Québec (Grande Bibliothèque + centres régionaux) — ateliers,
28+> conférences, heure du conte, expositions (~140 fiches à venir).
29+> Extraction: SCRAPFLY obligatoire (anti-bot Radware : GET direct → 302
30+> challenge, /jsonapi bloqué — sondé 2026-08-25).
31+> Liste /calendrier/a-venir rendue AVEC JavaScript (les cartes
32+> sont injectées côté client) → liens /calendrier/a-venir/<id>.
33+> Fiches : Scrapfly SANS rendu JS (HTML serveur), JSON-LD Event
34+> complet (nom, dates ISO avec fuseau -04:00, lieu, adresse,
35+> ville, image, organisateur, offre 0,00 $ → gratuité PUBLIÉE).
36+> INCRÉMENTAL avec cache disque (data/banq_cache.json) :
37+> nouvelles fiches d'abord, re-visite après 14 jours, plafond
38+> BANQ_DETAIL_MAX fiches/sync pour contenir le coût en crédits.
39+> Accès : robots.txt Drupal standard (le calendrier n'est pas exclu) ;
40+> 1 rendu JS + quelques fiches par sync, cadence hebdomadaire.
41+> Prix : offers.price du JSON-LD (« 0.00 » = gratuit affiché par la
42+> source) → is_free/price_label. Jamais inventé.
43+
44+</details>
45+
46+## Champs récupérés → schéma
47+
48+Complétude mesurée sur les **50 événements actifs** de la source ; exemples tirés d'un événement réel (`banq:135922`).
49+
50+| Champ (`events.*`) | Description | Complétude | Exemple réel |
51+|---|---|---|---|
52+| `title` — Titre | titre de l'événement | 100 % | Camelot d'un jour |
53+| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Venez appuyer la mission de L’Itinéraire ! La Grande Bibliothèque accueille pour une cinquième a… |
54+| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.banq.qc.ca/calendrier/a-venir/135922 |
55+| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
56+| `venue` — Salle (venue) | nom du lieu | 96 % | Grande Bibliothèque |
57+| `address` — Adresse | adresse civique | 96 % | 475, boulevard De Maisonneuve Est |
58+| `city` — Ville | municipalité | 96 % | Montréal |
59+| `region` — Région | région administrative | 96 % | Montréal |
60+| `lat` — GPS (lat/lng) | coordonnées géographiques | 96 % | 45.5153771, -73.5622117 |
61+| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-15 |
62+| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-15 |
63+| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 100 % | 10:00 |
64+| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 100 % | 15:00 |
65+| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 4 % | ∅ |
66+| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 100 % | 1 |
67+| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
68+| `price_label` — Libellé prix | étiquette tarifaire affichable | 100 % | Gratuit (0,00 $ affiché) |
69+| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
70+| `organizer` — Organisateur | promoteur / organisme | 100 % | Bibliothèque et Archives nationales du Québec |
71+| `image` — Image | visuel (og:image ou média source) | 100 % | https://www2.banq.qc.ca/cal/attachments/24047/135922/Entete-visuel_Camelot.png |
72+| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
73+
74+## Fréquence & budgets
75+
76+- **Cadence** : hebdomadaire
77+- **Budgets / plafonds (variables d'environnement)** :
78+
79+| Variable | Défaut | Rôle |
80+|---|---|---|
81+| `BANQ_DETAIL_MAX` | `50` | — |
82+- **Budget global** : géocodage Nominatim plafonné à `SORTIKA_GEOCODE_MAX` (défaut 120) requêtes réseau/cycle, toutes sources confondues (`sortika/geocode.py`, cache disque).
83+
84+## Volumétrie & complétude live
85+
86+*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
87+
88+- **Événements en base** : 50 (dont **50 actifs**)
89+- **GPS** : 48/50 actifs (96 %)
90+- **Prix** : 50/50 actifs (100 %)
91+- **Heure (start_time)** : 50/50 actifs (100 %)
92+- **Heure de fin** : 50/50 actifs (100 %)
93+- **Statut (annulé/reporté/complet)** : 2/50 actifs (4 %)
94+- **Artistes** : 0/50 actifs (0 %)
95+- **Image** : 50/50 actifs (100 %)
96+- **Salle (venue)** : 48/50 actifs (96 %)
97+- **Dernier sync** : 2026-08-25 18:42 — fetched 50, +50 ajoutés, ~0 mis à jour, -0 retirés
98+- **Syncs enregistrés** (sync_log) : 1
99+
100+## Erreurs & dépannage
101+
102+Aucune erreur dans `sync_log` pour cette source. ✅
103+
104+- Rejouer un sync isolé : `python3 run.py sync --source banq` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='banq' ORDER BY ts DESC LIMIT 5;"`
105+
106+## Licence / attribution
107+
108+- robots.txt Drupal standard (calendrier non exclu) ; 1 rendu JS + ≤50 fiches par sync, cadence contenue
109+
110+## Historique
111+
112+- **2026-08-18 — Vague 1 d'enrichissement** (commit `7d9d1b0`) : géocodage Nominatim des salles (`sortika/geocode.py`, cache disque, plafond `SORTIKA_GEOCODE_MAX`), fiches détail lepointdevente (description, heure, tarifs réels `/plugins/rates/<id>`), contacts Tourinsoft (SITQ), heure locale Montréal via JSON-LD.
113+- **2026-08-18 — Vague 2 d'enrichissement** (commit `65d2d33`) : colonnes additives `events.start_time` (HH:MM locale QC) et `events.artists` (JSON) + migration auto ; heure captée partout où la source la publie (lepointdevente, evenko, Laval, Sherbrooke, Montréal, atuvu) ; artistes (headliners evenko, lineup Bandsintown, attractions Ticketmaster, patrons sûrs sur les titres) ; 3 nouveaux connecteurs (brossard, ticketmaster, bandsintown).
114+- **2026-08-19 — Phase 2 (travail de moine)** : colonnes additives `end_time`, `status` (annulé/reporté/complet) et `quarantine` (règles anti-aberrations, non publié mais réintégrable) ; règle d'ARCHIVAGE des événements terminés à chaque cycle (jamais supprimés) ; dedup_key inclut désormais l'heure (les séances multiples d'un même jour ne sont plus écrasées à l'affichage) ; alerte « 0 événement futur / chute > 80 % » par source (data/future_counts.json + /api/sources) ; heure et description La Vitrine ; end_time/organisateur/statut Eventbrite ; og:description Atuvu ; premières parties + portes + tournée evenko ; offres billets Bandsintown ; taxonomie type-event + description intégrale Brossard ; image Longueuil ; géocodage par ADRESSE CIVIQUE prioritaire ; villes normalisées au Répertoire MAMH (data/villes_canon.json) ; laval consignée « morte-a-la-source ».
modified docs/connecteurs/bassaintlaurent.md +25 −20
@@ -1,6 +1,6 @@
1 # Tourisme Bas-Saint-Laurent — événements (ATR) (`bassaintlaurent`) 1 # Tourisme Bas-Saint-Laurent — événements (ATR) (`bassaintlaurent`)
2 2
3−> Fiche générée le 2026-08-22 23:05 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script. 3+> Fiche générée le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 **Statut : actif** · Type : `tourisme-regional` · Connecteur : `sortika/connectors/bassaintlaurent.py` 5 **Statut : actif** · Type : `tourisme-regional` · Connecteur : `sortika/connectors/bassaintlaurent.py`
6 6
@@ -8,7 +8,7 @@
8 8
9 - **Source** : [Tourisme Bas-Saint-Laurent — événements (ATR)](https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/) 9 - **Source** : [Tourisme Bas-Saint-Laurent — événements (ATR)](https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/)
10 - **Couverture** : Festivals et événements, Bas-Saint-Laurent 10 - **Couverture** : Festivals et événements, Bas-Saint-Laurent
11−- **Extraction** : liste SSR (1 GET, cartes .card--type-event) + fiches incrémentales (cache data/bassaintlaurent_cache.json, BSL_FICHE_MAX/sync, re-visite 7 j) : og:description + GPS exact de la carte embarquée 11+- **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)
12 12
13 ## Accès 13 ## Accès
14 14
@@ -25,12 +25,17 @@
25 > connectors/bassaintlaurent.py : Tourisme Bas-Saint-Laurent — événements (ATR) 25 > connectors/bassaintlaurent.py : Tourisme Bas-Saint-Laurent — événements (ATR)
26 > Source : https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/ — 26 > Source : https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/ —
27 > WordPress (Bedrock), liste rendue serveur (~27 fiches à venir, 27 > WordPress (Bedrock), liste rendue serveur (~27 fiches à venir,
28−> vérifié 2026-08-19). 28+> revérifié 2026-08-25 ; le marqueur ajax-load-more__end-page
29+> confirme que TOUTE la liste tient sur la page 1 — aucun
30+> événement caché derrière l'AJAX get_grid).
29 > Extraction: cartes .card--type-event (lien, plage de dates FR, titre, 31 > Extraction: cartes .card--type-event (lien, plage de dates FR, titre,
30 > municipalité, image) + fiches détail incrémentales (cache 32 > municipalité, image) + fiches détail incrémentales (cache
31 > data/bassaintlaurent_cache.json, BSL_FICHE_MAX/sync, re-visite 33 > data/bassaintlaurent_cache.json, BSL_FICHE_MAX/sync, re-visite
32−> 7 j) : og:description + GPS exact (coordonnées de la carte 34+> 7 j, version v=2). ENRICHI (2026-08-25) : bloc window.locations
33−> embarquées dans la fiche). 35+> de la fiche (JSON structuré) → adresse civique (street), ville,
36+> code postal, GPS exact, site web officiel ; description longue
37+> = paragraphes « À propos » (fallback og:description). Pas
38+> d'heure ni de tarif publiés → jamais inventés.
34 > Accès : pages publiques de l'ATR, rendu serveur — GET throttlés 0,8 s, 39 > Accès : pages publiques de l'ATR, rendu serveur — GET throttlés 0,8 s,
35 > identification honnête, lien vers la fiche originale. 40 > identification honnête, lien vers la fiche originale.
36 > Décision : le Bas-Saint-Laurent n'avait que 168 fiches au baseline — 41 > Décision : le Bas-Saint-Laurent n'avait que 168 fiches au baseline —
@@ -40,12 +45,12 @@
40 45
41 ## Champs récupérés → schéma 46 ## Champs récupérés → schéma
42 47
43−Complétude mesurée sur les **20 événements actifs** de la source ; exemples tirés d'un événement réel (`bassaintlaurent:degelis-ta-riviere-tappelle`). 48+Complétude mesurée sur les **17 événements actifs** de la source ; exemples tirés d'un événement réel (`bassaintlaurent:degelis-ta-riviere-tappelle`).
44 49
45 | Champ (`events.*`) | Description | Complétude | Exemple réel | 50 | Champ (`events.*`) | Description | Complétude | Exemple réel |
46 |---|---|---|---| 51 |---|---|---|---|
47 | `title` — Titre | titre de l'événement | 100 % | Dégelis, ta rivière t’appelle | 52 | `title` — Titre | titre de l'événement | 100 % | Dégelis, ta rivière t’appelle |
48−| `description` — Description | texte descriptif (source ou fiche détail) | 90 % | La Clé des chants présente DÉGELIS, TA RIVIÈRE T'APPELLE, au Parc du Centenaire. Vivez une expér… | 53+| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | La Clé des chants présente DÉGELIS, TA RIVIÈRE T’APPELLE, au Parc du Centenaire. Vivez une expér… |
49 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/degelis-ta-riviere-tappelle/ | 54 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/degelis-ta-riviere-tappelle/ |
50 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] | 55 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
51 | `venue` — Salle (venue) | nom du lieu | 0 % | ∅ | 56 | `venue` — Salle (venue) | nom du lieu | 0 % | ∅ |
@@ -78,19 +83,19 @@ Complétude mesurée sur les **20 événements actifs** de la source ; exemples
78 83
79 ## Volumétrie & complétude live 84 ## Volumétrie & complétude live
80 85
81−*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)* 86+*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
82− 87+
83−- **Événements en base** : 27 (dont **20 actifs**) 88+- **Événements en base** : 28 (dont **17 actifs**)
84−- **GPS** : 20/20 actifs (100 %) 89+- **GPS** : 17/17 actifs (100 %)
85−- **Prix** : 0/20 actifs (0 %) 90+- **Prix** : 0/17 actifs (0 %)
86−- **Heure (start_time)** : 0/20 actifs (0 %) 91+- **Heure (start_time)** : 0/17 actifs (0 %)
87−- **Heure de fin** : 0/20 actifs (0 %) 92+- **Heure de fin** : 0/17 actifs (0 %)
88−- **Statut (annulé/reporté/complet)** : 0/20 actifs (0 %) 93+- **Statut (annulé/reporté/complet)** : 0/17 actifs (0 %)
89−- **Artistes** : 0/20 actifs (0 %) 94+- **Artistes** : 0/17 actifs (0 %)
90−- **Image** : 20/20 actifs (100 %) 95+- **Image** : 17/17 actifs (100 %)
91−- **Salle (venue)** : 0/20 actifs (0 %) 96+- **Salle (venue)** : 0/17 actifs (0 %)
92−- **Dernier sync** : 2026-08-22 23:01 — fetched 27, +0 ajoutés, ~0 mis à jour, -0 retirés 97+- **Dernier sync** : 2026-08-25 17:59 — fetched 27, +0 ajoutés, ~22 mis à jour, -0 retirés
93−- **Syncs enregistrés** (sync_log) : 82 98+- **Syncs enregistrés** (sync_log) : 137
94 99
95 ## Erreurs & dépannage 100 ## Erreurs & dépannage
96 101
modified docs/connecteurs/brossard.md +26 −26
@@ -1,6 +1,6 @@
1 # Ville de Brossard — Calendrier des événements (`brossard`) 1 # Ville de Brossard — Calendrier des événements (`brossard`)
2 2
3−> Fiche générée le 2026-08-22 23:05 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script. 3+> Fiche générée le 2026-08-25 19:01 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 **Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/brossard.py` 5 **Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/brossard.py`
6 6
@@ -43,30 +43,30 @@
43 43
44 ## Champs récupérés → schéma 44 ## Champs récupérés → schéma
45 45
46−Complétude mesurée sur les **146 événements actifs** de la source ; exemples tirés d'un événement réel (`brossard:37838`). 46+Complétude mesurée sur les **147 événements actifs** de la source ; exemples tirés d'un événement réel (`brossard:38247`).
47 47
48 | Champ (`events.*`) | Description | Complétude | Exemple réel | 48 | Champ (`events.*`) | Description | Complétude | Exemple réel |
49 |---|---|---|---| 49 |---|---|---|---|
50−| `title` — Titre | titre de l'événement | 100 % | Atelier jeux de société (16 septembre 2026) | 50+| `title` — Titre | titre de l'événement | 100 % | Heure du conte en mandarin (20 décembre 2026) |
51−| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Entrée libre. Les enfants âgés de moins de 8 ans doivent être accompagnés d’un adulte. Les enfan… | 51+| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Retrouvez tous les plaisirs de l’heure du conte en mandarin. Histoires, comptines et chansons pl… |
52−| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://brossard.ca/calendrier-evenements/atelier-jeux-de-societe-16-septembre-2026/ | 52+| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://brossard.ca/calendrier-evenements/heure-du-conte-en-mandarin-20-decembre-2026/ |
53 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["famille"] | 53 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["famille"] |
54−| `venue` — Salle (venue) | nom du lieu | 95 % | Salle d'animation | 54+| `venue` — Salle (venue) | nom du lieu | 94 % | Salle d'animation |
55−| `address` — Adresse | adresse civique | 95 % | 7855, av San Francisco | 55+| `address` — Adresse | adresse civique | 94 % | 7855, av San Francisco |
56 | `city` — Ville | municipalité | 100 % | Brossard | 56 | `city` — Ville | municipalité | 100 % | Brossard |
57 | `region` — Région | région administrative | 100 % | Montérégie | 57 | `region` — Région | région administrative | 100 % | Montérégie |
58−| `lat` — GPS (lat/lng) | coordonnées géographiques | 95 % | 45.4551469, -73.4682277 | 58+| `lat` — GPS (lat/lng) | coordonnées géographiques | 94 % | 45.4551469, -73.4682277 |
59−| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-16 | 59+| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-12-20 |
60−| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-16 | 60+| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-12-20 |
61−| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 96 % | 10:00 | 61+| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 95 % | 10:30 |
62−| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ | 62+| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 95 % | 12:00 |
63 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ | 63 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
64 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ | 64 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
65 | `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ | 65 | `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
66 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ | 66 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] | 67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
68 | `organizer` — Organisateur | promoteur / organisme | 100 % | Ville de Brossard | 68 | `organizer` — Organisateur | promoteur / organisme | 100 % | Ville de Brossard |
69−| `image` — Image | visuel (og:image ou média source) | 100 % | https://biblio.brossard.ca/wp-content/uploads/2025/07/jeux_societe_enfant.jpg | 69+| `image` — Image | visuel (og:image ou média source) | 100 % | https://biblio.brossard.ca/wp-content/uploads/2024/09/heure_conte_mandarin.jpg |
70 | `website` — Site web | site officiel de l'événement | 0 % | ∅ | 70 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
71 71
72 ## Fréquence & budgets 72 ## Fréquence & budgets
@@ -81,19 +81,19 @@ Complétude mesurée sur les **146 événements actifs** de la source ; exemples
81 81
82 ## Volumétrie & complétude live 82 ## Volumétrie & complétude live
83 83
84−*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)* 84+*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
85− 85+
86−- **Événements en base** : 264 (dont **146 actifs**) 86+- **Événements en base** : 266 (dont **147 actifs**)
87−- **GPS** : 138/146 actifs (95 %) 87+- **GPS** : 138/147 actifs (94 %)
88−- **Prix** : 0/146 actifs (0 %) 88+- **Prix** : 0/147 actifs (0 %)
89−- **Heure (start_time)** : 140/146 actifs (96 %) 89+- **Heure (start_time)** : 140/147 actifs (95 %)
90−- **Heure de fin** : 0/146 actifs (0 %) 90+- **Heure de fin** : 140/147 actifs (95 %)
91−- **Statut (annulé/reporté/complet)** : 0/146 actifs (0 %) 91+- **Statut (annulé/reporté/complet)** : 0/147 actifs (0 %)
92−- **Artistes** : 0/146 actifs (0 %) 92+- **Artistes** : 0/147 actifs (0 %)
93−- **Image** : 146/146 actifs (100 %) 93+- **Image** : 147/147 actifs (100 %)
94−- **Salle (venue)** : 138/146 actifs (95 %) 94+- **Salle (venue)** : 138/147 actifs (94 %)
95−- **Dernier sync** : 2026-08-22 23:02 — fetched 264, +0 ajoutés, ~0 mis à jour, -0 retirés 95+- **Dernier sync** : 2026-08-25 18:00 — fetched 264, +0 ajoutés, ~0 mis à jour, -0 retirés
96−- **Syncs enregistrés** (sync_log) : 105 96+- **Syncs enregistrés** (sync_log) : 160
97 97
98 ## Erreurs & dépannage 98 ## Erreurs & dépannage
99 99
modified docs/connecteurs/cantonsdelest.md +37 −32
Large diff (121 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/centreduquebec.md +16 −11
Large diff (65 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/charlevoix.md +115 −0
Large diff (115 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/chaudiereappalaches.md +28 −22
Large diff (99 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/clubs-pros.md +1 −1
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/cotenord.md +113 −0
Large diff (113 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/drummondville.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/eeyouistchee.md +113 −0
Large diff (113 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/evenementsattractions.md +114 −0
Large diff (114 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/evenko.md +42 −33
Large diff (115 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/eventbrite.md +22 −22
Large diff (77 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/gaspesie.md +35 −31
Large diff (108 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/gatineau.md +76 −13
Large diff (122 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/granby.md +105 −0
Large diff (105 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/ilesdelamadeleine.md +88 −0
Large diff (88 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/joliette.md +111 −0
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/lanaudiere.md +29 −24
Large diff (93 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/laurentides.md +85 −14
Large diff (131 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/laval.md +24 −24
Large diff (78 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/lavalweb.md +24 −24
Large diff (71 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/lavitrine.md +41 −29
Large diff (108 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/lepointdevente.md +43 −39
Large diff (118 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/levis.md +74 −13
Large diff (120 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/lhjmq.md +25 −25
Large diff (72 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/longueuil.md +4 −4
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/magog.md +107 −0
Large diff (107 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/mauricie.md +82 −14
Large diff (128 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/monteregie.md +31 −27
Large diff (102 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/montreal.md +34 −31
Large diff (107 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/mtlorg.md +114 −0
Large diff (114 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/outaouais.md +32 −21
Large diff (95 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/ovation.md +39 −31
Large diff (109 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/placedesarts.md +28 −28
Large diff (83 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/quebecanimee.md +31 −27
Large diff (99 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/quebeccite.md +114 −0
Large diff (114 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/quoifaire.md +115 −0
Large diff (115 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/repentigny.md +1 −1
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/rimouski.md +101 −0
Large diff (101 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/rouynnoranda.md +111 −0
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/saguenay.md +1 −1
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/saguenaylacsaintjean.md +46 −0
Large diff (46 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/saguenaysorties.md +15 −15
Large diff (64 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/sainthyacinthe.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/saintjerome.md +108 −0
Large diff (108 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/sallesjsonld.md +34 −34
Large diff (97 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/shawinigan.md +109 −0
Large diff (109 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/sherbrooke.md +24 −24
Large diff (79 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/showpass.md +77 −11
Large diff (122 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/signelaval.md +114 −0
Large diff (114 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/sitq.md +39 −28
Large diff (114 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/soreltracy.md +111 −0
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/terrebonne.md +78 −13
Large diff (124 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/ticketacces.md +38 −34
Large diff (117 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/ticketmaster.md +26 −26
Large diff (80 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/ticketpro.md +45 −29
Large diff (118 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/tourismelaval.md +113 −0
Large diff (113 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/troisrivieres.md +106 −0
Large diff (106 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/tuxedobillet.md +53 −36
Large diff (141 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/victoriaville.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/weezevent.md +6 −5
Large diff (38 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/zeffy.md +94 −13
Large diff (139 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/abitibi.py +98 −0
Large diff (98 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/atuvu.py +71 −12
Large diff (133 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/bandsintown.py +26 −1
Large diff (45 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/banq.py +163 −0
Large diff (163 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/bassaintlaurent.py +58 −10
Large diff (136 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/cantonsdelest.py +113 −26
Large diff (186 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/centreduquebec.py +46 −17
Large diff (115 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/charlevoix.py +171 −0
Large diff (171 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/chaudiereappalaches.py +69 −10
Large diff (135 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/cotenord.py +154 −0
Large diff (154 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/drummondville.py +160 −0
Large diff (160 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/eeyouistchee.py +153 −0
Large diff (153 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/evenementsattractions.py +173 −0
Large diff (173 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/evenko.py +15 −6
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/gaspesie.py +56 −11
Large diff (126 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/gatineau.py +102 −0
Large diff (102 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/granby.py +106 −0
Large diff (106 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/ilesdelamadeleine.py +139 −0
Large diff (139 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/joliette.py +147 −0
Large diff (147 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/lanaudiere.py +66 −12
Large diff (133 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/laurentides.py +173 −0
Large diff (173 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/lavitrine.py +156 −31
Large diff (255 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/lepointdevente.py +35 −11
Large diff (92 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/levis.py +148 −0
Large diff (148 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/magog.py +208 −0
Large diff (208 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/mauricie.py +151 −0
Large diff (151 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/monteregie.py +33 −12
Large diff (82 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/montreal.py +12 −7
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/mtlorg.py +122 −0
Large diff (122 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/outaouais.py +91 −13
Large diff (142 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/ovation.py +10 −2
Large diff (18 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/quebecanimee.py +46 −9
Large diff (106 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/quebeccite.py +120 −0
Large diff (120 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/quoifaire.py +192 −0
Large diff (192 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/rimouski.py +95 −0
Large diff (95 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/rouynnoranda.py +182 −0
Large diff (182 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/sainthyacinthe.py +144 −0
Large diff (144 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/saintjerome.py +123 −0
Large diff (123 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/shawinigan.py +153 −0
Large diff (153 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/showpass.py +151 −0
Large diff (151 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/signelaval.py +172 −0
Large diff (172 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/sitq.py +68 −21
Large diff (126 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/soreltracy.py +156 −0
Large diff (156 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/terrebonne.py +120 −0
Large diff (120 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/ticketacces.py +45 −12
Large diff (99 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/ticketpro.py +99 −7
Large diff (161 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/tourismelaval.py +111 −0
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/troisrivieres.py +91 −0
Large diff (91 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/connectors/tuxedobillet.py +169 −20
Large diff (248 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/victoriaville.py +136 −0
Large diff (136 lines) is not loaded by default to keep the page fast.Load diff
added sortika/connectors/zeffy.py +252 −0
Large diff (252 lines) is not loaded by default to keep the page fast.Load diff
added tests/fixtures/abitibi_liste.html +3251 −0
Large diff (3,252 lines) is not loaded by default to keep the page fast.Load diff
added tests/fixtures/atuvu_fiche_multiseances.html +1583 −0
Large diff (1,583 lines) is not loaded by default to keep the page fast.Load diff
added tests/fixtures/banq_fiche.html +691 −0
Large diff (691 lines) is not loaded by default to keep the page fast.Load diff

Diff truncated — file too large.

Menu

Theme