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 3 "organisations": [
4 4 {"code": "00000O", "nom": "Centre culturel de l'Université de Sherbrooke", "ville": "Sherbrooke"},
5 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 3 "salles": [
4 4 {
5 5 "id": "grandtheatre",
@@ -13,11 +13,11 @@
13 13 {
14 14 "id": "trident",
15 15 "nom": "Théâtre du Trident",
16 − "listes": ["https://www.letrident.com/spectacles/"],
16 + "listes": ["https://www.letrident.com/"],
17 17 "motif": "letrident\\.com/piece/[a-z0-9-]{3,}",
18 18 "salle": "Théâtre du Trident",
19 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 23 "id": "capitole",
@@ -37,6 +37,127 @@
37 37 "salle": "Théâtre Lionel-Groulx",
38 38 "ville": "Sainte-Thérèse",
39 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 6 "name": "SIT Québec — Ministère du Tourisme",
7 7 "url": "https://www.donneesquebec.ca/recherche/dataset/sit-quebec-evenements",
8 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 10 "acces_legal": "Licence Creative Commons 4.0 (Données Québec) — API officielle publiée par le Ministère du Tourisme",
11 11 "couverture": "Événements touristiques, toutes les régions du Québec",
12 12 "cadence": "horaire (watcher PM2)",
@@ -17,7 +17,7 @@
17 17 "name": "Ville de Montréal — Événements publics",
18 18 "url": "https://donnees.montreal.ca/dataset/evenements-publics",
19 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 21 "acces_legal": "Licence CC BY 4.0 (donnees.montreal.ca) — attribution : Ville de Montréal",
22 22 "couverture": "Événements municipaux, île de Montréal",
23 23 "cadence": "horaire (watcher PM2)",
@@ -28,7 +28,7 @@
28 28 "name": "Le point de vente — billetterie québécoise",
29 29 "url": "https://lepointdevente.com/billets",
30 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 32 "acces_legal": "robots.txt : « User-Agent: * / Allow: * » — GET throttlés, identification honnête, lien direct vers chaque billetterie",
33 33 "couverture": "Concerts, humour, théâtre, festivals — partout au Québec (~2 500 événements à venir)",
34 34 "cadence": "horaire (watcher PM2)",
@@ -86,7 +86,7 @@
86 86 "name": "Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)",
87 87 "url": "https://www.cantonsdelest.com/evenements",
88 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 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 91 "couverture": "Festivals, spectacles, événements — Cantons-de-l'Est (Estrie)",
92 92 "cadence": "horaire (watcher PM2, incrémental)",
@@ -121,7 +121,7 @@
121 121 "name": "evenko — grands concerts et festivals",
122 122 "url": "https://evenko.ca/fr/evenements",
123 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 125 "acces_legal": "robots.txt : Allow /api/search* (explicite) — lien billets = URL Ticketmaster officielle",
126 126 "couverture": "Grands concerts (Centre Bell, Place Bell, MTELUS…), festivals (Osheaga, ÎleSoniq…)",
127 127 "cadence": "horaire (watcher PM2)",
@@ -132,7 +132,7 @@
132 132 "name": "Atuvu.ca — calendrier culturel",
133 133 "url": "https://atuvu.ca/",
134 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 136 "acces_legal": "robots.txt : Allow / + sitemap public",
137 137 "couverture": "Sorties culturelles, Grand Montréal",
138 138 "cadence": "horaire (watcher PM2, incrémental)",
@@ -143,7 +143,7 @@
143 143 "name": "La Vitrine culturelle",
144 144 "url": "https://www.lavitrine.com/",
145 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 147 "acces_legal": "robots.txt : Allow / + Content-Signal search=yes, use=reference — usage index + lien vers la fiche originale",
148 148 "couverture": "Spectacles et sorties culturelles, Grand Montréal",
149 149 "cadence": "horaire (watcher PM2, incrémental)",
@@ -177,7 +177,7 @@
177 177 "name": "Bandsintown — dates de concerts par artiste",
178 178 "url": "https://rest.bandsintown.com/",
179 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 181 "acces_legal": "API publique Bandsintown (app_id d'identification) — usage index + lien vers la fiche originale",
182 182 "couverture": "Concerts au Québec des artistes en tournée connus de la base",
183 183 "cadence": "horaire (watcher PM2, rotation d'artistes)",
@@ -185,51 +185,36 @@
185 185 },
186 186 {
187 187 "id": "gatineau",
188 − "name": "Ville de Gatineau — Événements",
189 − "url": "https://www.gatineau.ca/",
188 + "name": "Ville de Gatineau — Calendrier officiel",
189 + "url": "https://calendrier.gatineau.cloud",
190 190 "type": "municipal",
191 − "extraction": "n/d",
192 − "acces_legal": "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": "application municipale publique, robots: all",
193 193 "couverture": "Gatineau (Outaouais)",
194 − "cadence": "n/d",
195 − "statut": "abandonnee",
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)"
194 + "cadence": "quotidien",
195 + "statut": "actif"
209 196 },
210 197 {
211 198 "id": "levis",
212 − "name": "Ville de Lévis — Calendrier",
213 − "url": "https://www.ville.levis.qc.ca/",
199 + "name": "Ville de Lévis — Calendrier des événements",
200 + "url": "https://levis.ca/fr/calendrier-des-evenements",
214 201 "type": "municipal",
215 − "extraction": "n/d",
216 − "acces_legal": "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)",
203 + "acces_legal": "API du site municipal public, jeton public, robots.txt permissif",
217 204 "couverture": "Lévis (Chaudière-Appalaches)",
218 − "cadence": "n/d",
219 − "statut": "abandonnee",
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)"
205 + "cadence": "quotidien",
206 + "statut": "actif"
221 207 },
222 208 {
223 209 "id": "terrebonne",
224 210 "name": "Ville de Terrebonne — Calendrier",
225 − "url": "https://terrebonne.ca/calendrier/",
211 + "url": "https://terrebonne.ca/calendrier-des-evenements/",
226 212 "type": "municipal",
227 − "extraction": "n/d",
228 − "acces_legal": "n/d",
213 + "extraction": "API REST wp-json/wp/v2/event via Scrapfly (Cloudflare), 3-5 appels/sync. RÉACTIVÉE 2026-08-25",
214 + "acces_legal": "API publique du site municipal ; anti-bot contourné avec volumes minimes",
229 215 "couverture": "Terrebonne (Lanaudière)",
230 − "cadence": "n/d",
231 − "statut": "abandonnee",
232 − "note": "Cloudflare bloque tout GET non navigateur (403) et aucun jeu « événements » sur Données Québec (vérifié 2026-08-18)"
216 + "cadence": "quotidien",
217 + "statut": "actif"
233 218 },
234 219 {
235 220 "id": "lavalweb",
@@ -249,7 +234,7 @@
249 234 "url": "https://tourismeoutaouais.com/calendrier-des-evenements",
250 235 "type": "tourisme-regional",
251 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 238 "acces_legal": "robots.txt : User-agent: * / Allow: / — GET direct throttlé 0,8 s, identification honnête, lien vers la fiche/site officiel",
254 239 "couverture": "Festivals et événements, Outaouais (337 fiches seulement au baseline régional)",
255 240 "cadence": "horaire (watcher PM2)",
@@ -261,7 +246,7 @@
261 246 "url": "https://lanaudiere.ca/fr/evenements-lanaudiere",
262 247 "type": "tourisme-regional",
263 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 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 251 "couverture": "Festivals et événements, Lanaudière",
267 252 "cadence": "horaire (watcher PM2, incrémental)",
@@ -285,7 +270,7 @@
285 270 "url": "https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/",
286 271 "type": "tourisme-regional",
287 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 274 "acces_legal": "pages publiques de l'ATR — GET throttlés 0,8 s, identification honnête, lien fiche originale",
290 275 "couverture": "Festivals et événements, Bas-Saint-Laurent",
291 276 "cadence": "horaire (watcher PM2, incrémental)",
@@ -297,7 +282,7 @@
297 282 "url": "https://animee.ville.quebec.qc.ca/activites/",
298 283 "type": "municipal",
299 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 286 "acces_legal": "site municipal public rendu serveur — GET throttlés 0,8 s, identification honnête, lien fiche officielle",
302 287 "couverture": "Activités gratuites/à faible coût, Ville de Québec (Capitale-Nationale)",
303 288 "cadence": "horaire (watcher PM2, incrémental)",
@@ -333,7 +318,7 @@
333 318 "url": "https://grandtheatre.qc.ca/programmation",
334 319 "type": "salle-de-spectacle",
335 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 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 323 "couverture": "Longue traîne des salles de spectacle QC (amorce : Grand Théâtre de Québec, Trident, Capitole — Capitale-Nationale)",
339 324 "cadence": "horaire (watcher PM2, incrémental)",
@@ -341,34 +326,32 @@
341 326 },
342 327 {
343 328 "id": "mauricie",
344 − "name": "Tourisme Mauricie — événements (ATR)",
329 + "name": "Tourisme Mauricie — calendrier des événements (ATR)",
345 330 "url": "https://tourismemauricie.com/evenements",
346 331 "type": "tourisme-regional",
347 − "extraction": "n/d",
348 − "acces_legal": "n/d",
349 − "couverture": "Mauricie",
350 − "cadence": "n/d",
351 − "statut": "abandonnee",
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."
332 + "extraction": "API JSON interne du thème (GET /wp-json/acolyte/v1/get-events-data?lang=fr&page=N, ~174 événements : titre, url, ville, salle, catégories, date FR, GPS, images) + fiches détail incrémentales (JSON-LD Event : date ISO, adresse, description ; cache, MAU_FICHE_MAX=12, re-visite 7 j) ; région par la VILLE (l'ATR couvre des villes du Centre-du-Québec). RÉHABILITÉE 2026-08-25 (écartée Phase 3 pour rendu JS — l'endpoint XHR interne est percé)",
333 + "acces_legal": "API REST WordPress publique (aucune auth), robots.txt sans interdiction — GET throttlés, UA honnête",
334 + "couverture": "Mauricie (+ villes limitrophes du Centre-du-Québec)",
335 + "cadence": "quotidienne",
336 + "statut": "actif"
353 337 },
354 338 {
355 339 "id": "laurentides",
356 − "name": "Tourisme Laurentides — événements (ATR)",
357 − "url": "https://www.laurentides.com/fr/quoifaire/evenements",
340 + "name": "Tourisme Laurentides — calendrier des événements (ATR)",
341 + "url": "https://www.laurentides.com/evenements/",
358 342 "type": "tourisme-regional",
359 − "extraction": "n/d",
360 − "acces_legal": "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)",
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 345 "couverture": "Laurentides",
362 − "cadence": "n/d",
363 − "statut": "abandonnee",
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."
346 + "cadence": "quotidienne (backfill des fiches ~3 semaines, puis incrémental)",
347 + "statut": "actif"
365 348 },
366 349 {
367 350 "id": "gaspesie",
368 351 "name": "Tourisme Gaspésie — événements (ATR)",
369 352 "url": "https://www.tourisme-gaspesie.com/fr/festival-et-evenements/",
370 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 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 356 "couverture": "Gaspésie–Îles-de-la-Madeleine",
374 357 "cadence": "horaire (watcher PM2) — cache 14 j, ~2 fiches re-visitées/j",
@@ -380,7 +363,7 @@
380 363 "name": "Tuxedo Billet — billetterie québécoise multi-tenants",
381 364 "url": "https://www.tuxedobillet.com/",
382 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 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 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 369 "cadence": "quotidienne (TTL 20 h dans le watcher horaire)",
@@ -404,7 +387,7 @@
404 387 "name": "Tourisme Montérégie — événements (ATR)",
405 388 "url": "https://www.tourisme-monteregie.qc.ca/membre/categorie/quoi-faire/festivals-et-evenements/",
406 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 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 392 "couverture": "Montérégie (~78 fiches à venir, vérifié 2026-08-21)",
410 393 "cadence": "horaire (watcher PM2)",
@@ -415,7 +398,7 @@
415 398 "name": "Tourisme Centre-du-Québec — événements (ATR)",
416 399 "url": "https://tourismecentreduquebec.com/evenements/",
417 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 402 "acces_legal": "Site public de l'ATR, robots.txt sans interdiction — GET throttlés 0,8 s, UA honnête",
420 403 "couverture": "Centre-du-Québec (première source de la région — 0 fiche avant connexion ; ~10 fiches)",
421 404 "cadence": "horaire (watcher PM2)",
@@ -426,7 +409,7 @@
426 409 "name": "Tourisme Chaudière-Appalaches — festivals et événements (ATR)",
427 410 "url": "https://chaudiereappalaches.com/planifier-votre-sejour/ete-automne/festivals-et-evenements/",
428 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 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 414 "couverture": "Chaudière-Appalaches (~36 fiches à venir, vérifié 2026-08-21)",
432 415 "cadence": "horaire (watcher PM2)",
@@ -437,7 +420,7 @@
437 420 "name": "TicketAcces.net — billetterie régionale québécoise",
438 421 "url": "https://www.ticketacces.net/fr/portail/index.cfm",
439 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 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 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 426 "cadence": "horaire (watcher PM2)",
@@ -448,7 +431,7 @@
448 431 "name": "Réseau Ovation — billetterie québécoise multi-salles",
449 432 "url": "https://reseau.ovation.ca/",
450 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 435 "acces_legal": "Billetterie publique sans auth ; GET throttlés 0,7 s, UA honnête, lien d'achat vers la fiche officielle",
453 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 437 "cadence": "horaire (watcher PM2)",
@@ -459,7 +442,7 @@
459 442 "name": "Ticketpro — billetterie canadienne (tenants Québec)",
460 443 "url": "https://www.ticketpro.ca/",
461 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 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 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 448 "cadence": "horaire (watcher PM2)",
@@ -467,27 +450,25 @@
467 450 },
468 451 {
469 452 "id": "zeffy",
470 − "name": "Zeffy — billetterie OSBL (Montréal)",
453 + "name": "Zeffy — billetterie OSBL",
471 454 "url": "https://www.zeffy.com/",
472 455 "type": "billetterie",
473 − "extraction": "—",
474 − "acces_legal": "robots.txt permissif, sitemaps publics",
475 − "couverture": "Événements communautaires/OSBL partout au Canada et aux É.-U.",
476 − "cadence": "—",
477 − "statut": "abandonnee",
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."
456 + "extraction": "sitemap des organisations (api.zeffy.com/sitemap/organizations/sitemap-0.xml, ~4 400 pages fr-CA/en-CA) → pages org rendues serveur (__NEXT_DATA__ organizationPage.upcomingEvents : dates UTC, adresse, image, URL) filtrées « , QC » et formCategory=Event, puis fiches billetterie JSON-LD offers[].price pour les tarifs réels ; incrémental cache 7 j, plafonds ZEFFY_ORG_MAX=400 / ZEFFY_DETAIL_MAX=80. RÉACTIVÉE 2026-08-25 (le sitemap billets était infaisable ; les pages d'organisations sont la bonne surface)",
457 + "acces_legal": "robots.txt Disallow: /*=$ uniquement (aucune URL visée) + sitemaps publiés ; GET throttlés, identification honnête, pas d'anti-bot constaté",
458 + "couverture": "~100-200 événements OSBL QC actifs (galas, spectacles-bénéfice, ateliers communautaires), toutes régions",
459 + "cadence": "quotidienne",
460 + "statut": "actif"
479 461 },
480 462 {
481 463 "id": "showpass",
482 464 "name": "Showpass — billetterie canadienne",
483 465 "url": "https://www.showpass.com/",
484 466 "type": "billetterie",
485 − "extraction": "—",
486 − "acces_legal": "API publique explicitement autorisée par robots.txt (Allow: /api/)",
487 − "couverture": "13 663 événements canadiens, très majoritairement Alberta/C.-B.",
488 − "cadence": "—",
489 − "statut": "abandonnee",
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."
467 + "extraction": "API JSON publique /api/public/events/ paginée, couverture du Québec par 10 points géo (location__point_location=lat,lng,rayon + starts_on__gte), filtre province=QC côté connecteur ; heure locale via local_starts_on ; tarifs ticket_types[].price. RÉACTIVÉE 2026-08-25 (l'écartement « aucun filtre géo » est invalidé — le paramètre fonctionne)",
468 + "acces_legal": "robots.txt Allow: /api/ (API publique explicitement autorisée), GET throttlés 0,8 s, identification honnête",
469 + "couverture": "~30-40 événements QC actifs (soirées, croisières, festivals, Candlelight) — toutes régions balayées",
470 + "cadence": "quotidienne",
471 + "statut": "actif"
491 472 },
492 473 {
493 474 "id": "weezevent",
@@ -495,11 +476,11 @@
495 476 "url": "https://www.weezevent.com/",
496 477 "type": "billetterie",
497 478 "extraction": "—",
498 − "acces_legal": "robots.txt permissif",
499 − "couverture": "Festivals/événements FR + QC",
479 + "acces_legal": "robots.txt permissif mais aucune surface de découverte publique",
480 + "couverture": "minisites my.weezevent.com avec JSON-LD Event complet, mais non énumérables (sitemap = 28 URLs tournantes France, pas de recherche publique, API par organisateur)",
500 481 "cadence": "—",
501 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 486 "id": "accesculture",
@@ -507,11 +488,287 @@
507 488 "url": "https://www.accesculture.com/",
508 489 "type": "agregateur",
509 490 "extraction": "—",
510 − "acces_legal": "robots.txt permissif, sitemap public",
511 − "couverture": "Diffuseurs des arrondissements de Montréal",
491 + "acces_legal": "—",
492 + "couverture": "AUCUNE : domaine recyclé (ferme SEO hôtels) hébergeant une copie fossilisée du site 2015 ; toute date « déduite » serait fabriquée",
512 493 "cadence": "—",
513 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 3 "tenants": [
4 4 { "domaine": "tproqc", "nom": "Ticketpro Québec (agrégateur provincial)" },
5 5 { "domaine": "tprotsd", "nom": "Théâtre St-Denis / Studio St-Denis (Montréal)" },
6 6 { "domaine": "tprofunnation", "nom": "Fun Nation (Montréal)" },
7 7 { "domaine": "expocitetpro", "nom": "ExpoCité — Centre de foires & Pavillon Guy-Lafleur (Québec)" },
8 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 13 "exclure_lieux": [
12 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 3 "tenants": [
4 4 {"domaine": "espacetheatre", "nom": "Espace Théâtre", "ville": "Mont-Laurier"},
5 5 {"domaine": "theatreoutremont", "nom": "Théâtre Outremont", "ville": "Montréal"},
@@ -28,6 +28,12 @@
28 28 {"domaine": "centrepierrepeladeau", "nom": "Centre Pierre-Péladeau", "ville": "Montréal"},
29 29 {"domaine": "latribu-lenational", "nom": "Le National (La Tribu)", "ville": "Montréal"},
30 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 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 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 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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
21 −| [evenko — grands concerts et festivals](evenko.md) | promoteur | actif | 413 | 97 % | 0 % | 99 % | 0 % | 1 % | 99 % | 100 % | 100 % | 2026-08-22 23:02 |
22 −| [Atuvu.ca — calendrier culturel](atuvu.md) | agregateur | actif | 217 | 82 % | 24 % | 46 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-22 23:01 |
23 −| [La Vitrine culturelle](lavitrine.md) | billetterie | actif | 5039 | 69 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-22 22:26 |
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 |
25 −| [Ticketmaster — Discovery API (Québec)](ticketmaster.md) | billetterie | actif | 359 | 100 % | 0 % | 96 % | 0 % | 4 % | 0 % | 89 % | 100 % | 2026-08-22 22:29 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 | 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 | 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 | 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 | 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-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-25 18:01 |
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 | 621 | 84 % | 0 % | 100 % | 0 % | 1 % | 100 % | 100 % | 100 % | 2026-08-25 18:00 |
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 | 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 | 147 | 94 % | 0 % | 95 % | 95 % | 0 % | 0 % | 100 % | 94 % | 2026-08-25 18:00 |
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 | 515 | 100 % | 1 % | 100 % | 0 % | 0 % | 100 % | 8 % | 100 % | 2026-08-25 17:59 |
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 +| [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 +| [Ville de Terrebonne — Calendrier](terrebonne.md) | municipal | actif | 31 | 39 % | 0 % | 100 % | 100 % | 0 % | 0 % | 87 % | 100 % | 2026-08-25 18:34 |
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 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 +| [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 +| [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 +| [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 +| [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 +| [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 +| [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 +| [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 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 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 +| [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 +| [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 +| [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 76 ## Sources abandonnées
46 77
@@ -48,17 +79,10 @@
48 79 |---|---|---|
49 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 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 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 |
59 −| [Showpass — billetterie canadienne](showpass.md) | billetterie | n/d |
60 −| [Weezevent — billetterie libre-service](weezevent.md) | billetterie | n/d |
61 −| [Accès culture — réseau culturel de Montréal](accesculture.md) | agregateur | 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… |
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… |
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 … |
62 86
63 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 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 5 **Statut : abandonnee** · Type : `agregateur` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
7 7 ## Description
8 8
9 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 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 14 ## Accès
14 15
15 16 - **Type** : agregateur
16 17 - **Endpoint** : voir URL source (https://www.accesculture.com/)
17 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 21 ## Champs récupérés → schéma
21 22
@@ -35,11 +36,11 @@
35 36
36 37 ## Licence / attribution
37 38
38 −- robots.txt permissif, sitemap public
39 +- —
39 40
40 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 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 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 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 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 5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/atuvu.py`
6 6
@@ -8,7 +8,7 @@
8 8
9 9 - **Source** : [Atuvu.ca — calendrier culturel](https://atuvu.ca/)
10 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 13 ## Accès
14 14
@@ -24,44 +24,52 @@
24 24
25 25 > connectors/atuvu.py : connecteur Atuvu.ca — calendrier culturel (Grand Montréal +)
26 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 30 > (evenements_N_2000.xml, lastmod par fiche) puis pages fiche
29 −> (h1, blocs .event-play : date FR, salle, ville, prix).
30 −> INCRÉMENTAL avec cache disque (data/atuvu_cache.json) : seules
31 −> les fiches nouvelles ou modifiées sont re-scrapées, plafonné à
32 −> ATUVU_MAX_FETCH pages/sync pour contenir le coût en crédits.
31 +> (h1, blocs .event-play : date FR + HEURE, salle, ville, prix).
32 +> INCRÉMENTAL avec cache disque (data/atuvu_cache.json), version
33 +> de parse « v » (patron lavitrine) : fiches nouvelles/modifiées
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 39 > Accès : robots.txt « User-Agent: * / Allow: / » + sitemap public.
34 40 > Prix : bloc .price-reg de la fiche (prix régulier) → price_min ;
35 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 45 </details>
38 46
39 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 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 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 |
48 −| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique", "arts-scene"] |
49 −| `venue` — Salle (venue) | nom du lieu | 100 % | Maison Mère Baie-Saint-Paul |
55 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://atuvu.ca/billets-spectacle/requiem-de-mozart |
56 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique", "cinema"] |
57 +| `venue` — Salle (venue) | nom du lieu | 100 % | Basilique Notre-Dame de Montréal |
50 58 | `address` — Adresse | adresse civique | 0 % | ∅ |
51 −| `city` — Ville | municipalité | 98 % | Baie-Saint-Paul |
52 −| `region` — Région | région administrative | 96 % | Capitale-Nationale |
53 −| `lat` — GPS (lat/lng) | coordonnées géographiques | 82 % | 47.4384969, -70.5066321 |
54 −| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-22 |
55 −| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-22 |
56 −| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 46 % | 11:30 |
59 +| `city` — Ville | municipalité | 98 % | Montréal |
60 +| `region` — Région | région administrative | 96 % | Montréal |
61 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 82 % | 45.5044365, -73.5559901 |
62 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-11-07 |
63 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-11-07 |
64 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 56 % | 14:00 |
57 65 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
58 66 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
59 −| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 18 % | ∅ |
60 −| `price_min` — Prix min | tarif minimal réel ($) | 24 % | 0.0 |
61 −| `price_label` — Libellé prix | étiquette tarifaire affichable | 18 % | ∅ |
67 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 19 % | 0 |
68 +| `price_min` — Prix min | tarif minimal réel ($) | 22 % | 54.58 |
69 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 19 % | 54.58 $ (prix régulier atuvu.ca) |
62 70 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
63 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 73 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
66 74
67 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 85 ## Volumétrie & complétude live
78 86
79 −*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)*
80 −
81 −- **Événements en base** : 249 (dont **217 actifs**)
82 −- **GPS** : 177/217 actifs (82 %)
83 −- **Prix** : 51/217 actifs (24 %)
84 −- **Heure (start_time)** : 100/217 actifs (46 %)
85 −- **Heure de fin** : 0/217 actifs (0 %)
86 −- **Statut (annulé/reporté/complet)** : 0/217 actifs (0 %)
87 −- **Artistes** : 0/217 actifs (0 %)
88 −- **Image** : 217/217 actifs (100 %)
89 −- **Salle (venue)** : 217/217 actifs (100 %)
90 −- **Dernier sync** : 2026-08-22 23:01 — fetched 253, +0 ajoutés, ~2 mis à jour, -0 retirés
91 −- **Syncs enregistrés** (sync_log) : 120
87 +*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
88 +
89 +- **Événements en base** : 273 (dont **227 actifs**)
90 +- **GPS** : 187/227 actifs (82 %)
91 +- **Prix** : 49/227 actifs (22 %)
92 +- **Heure (start_time)** : 127/227 actifs (56 %)
93 +- **Heure de fin** : 0/227 actifs (0 %)
94 +- **Statut (annulé/reporté/complet)** : 0/227 actifs (0 %)
95 +- **Artistes** : 0/227 actifs (0 %)
96 +- **Image** : 227/227 actifs (100 %)
97 +- **Salle (venue)** : 227/227 actifs (100 %)
98 +- **Dernier sync** : 2026-08-25 17:59 — fetched 274, +3 ajoutés, ~12 mis à jour, -0 retirés
99 +- **Syncs enregistrés** (sync_log) : 175
92 100
93 101 ## Erreurs & dépannage
94 102
modified docs/connecteurs/bandsintown.md +22 −17
@@ -1,6 +1,6 @@
1 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 5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/bandsintown.py`
6 6
@@ -8,7 +8,7 @@
8 8
9 9 - **Source** : [Bandsintown — dates de concerts par artiste](https://rest.bandsintown.com/)
10 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 13 ## Accès
14 14
@@ -37,13 +37,18 @@
37 37 > cache entre deux visites (re-visite après 3 jours).
38 38 > Champs : datetime local (date + heure), salle géolocalisée (lat/lng),
39 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 47 </details>
43 48
44 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 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 88 ## Volumétrie & complétude live
84 89
85 −*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)*
86 −
87 −- **Événements en base** : 532 (dont **519 actifs**)
88 −- **GPS** : 519/519 actifs (100 %)
89 −- **Prix** : 5/519 actifs (1 %)
90 −- **Heure (start_time)** : 518/519 actifs (100 %)
91 −- **Heure de fin** : 0/519 actifs (0 %)
92 −- **Statut (annulé/reporté/complet)** : 0/519 actifs (0 %)
93 −- **Artistes** : 519/519 actifs (100 %)
94 −- **Image** : 44/519 actifs (8 %)
95 −- **Salle (venue)** : 519/519 actifs (100 %)
96 −- **Dernier sync** : 2026-08-22 23:01 — fetched 522, +0 ajoutés, ~0 mis à jour, -0 retirés
97 −- **Syncs enregistrés** (sync_log) : 105
90 +*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
91 +
92 +- **Événements en base** : 546 (dont **515 actifs**)
93 +- **GPS** : 515/515 actifs (100 %)
94 +- **Prix** : 3/515 actifs (1 %)
95 +- **Heure (start_time)** : 514/515 actifs (100 %)
96 +- **Heure de fin** : 0/515 actifs (0 %)
97 +- **Statut (annulé/reporté/complet)** : 0/515 actifs (0 %)
98 +- **Artistes** : 515/515 actifs (100 %)
99 +- **Image** : 40/515 actifs (8 %)
100 +- **Salle (venue)** : 515/515 actifs (100 %)
101 +- **Dernier sync** : 2026-08-25 17:59 — fetched 518, +0 ajoutés, ~0 mis à jour, -0 retirés
102 +- **Syncs enregistrés** (sync_log) : 160
98 103
99 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 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 5 **Statut : actif** · Type : `tourisme-regional` · Connecteur : `sortika/connectors/bassaintlaurent.py`
6 6
@@ -8,7 +8,7 @@
8 8
9 9 - **Source** : [Tourisme Bas-Saint-Laurent — événements (ATR)](https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/)
10 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 13 ## Accès
14 14
@@ -25,12 +25,17 @@
25 25 > connectors/bassaintlaurent.py : Tourisme Bas-Saint-Laurent — événements (ATR)
26 26 > Source : https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/ —
27 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 31 > Extraction: cartes .card--type-event (lien, plage de dates FR, titre,
30 32 > municipalité, image) + fiches détail incrémentales (cache
31 33 > data/bassaintlaurent_cache.json, BSL_FICHE_MAX/sync, re-visite
32 −> 7 j) : og:description + GPS exact (coordonnées de la carte
33 −> embarquées dans la fiche).
34 +> 7 j, version v=2). ENRICHI (2026-08-25) : bloc window.locations
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 39 > Accès : pages publiques de l'ATR, rendu serveur — GET throttlés 0,8 s,
35 40 > identification honnête, lien vers la fiche originale.
36 41 > Décision : le Bas-Saint-Laurent n'avait que 168 fiches au baseline —
@@ -40,12 +45,12 @@
40 45
41 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 50 | Champ (`events.*`) | Description | Complétude | Exemple réel |
46 51 |---|---|---|---|
47 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 54 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/degelis-ta-riviere-tappelle/ |
50 55 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
51 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 84 ## Volumétrie & complétude live
80 85
81 −*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)*
82 −
83 −- **Événements en base** : 27 (dont **20 actifs**)
84 −- **GPS** : 20/20 actifs (100 %)
85 −- **Prix** : 0/20 actifs (0 %)
86 −- **Heure (start_time)** : 0/20 actifs (0 %)
87 −- **Heure de fin** : 0/20 actifs (0 %)
88 −- **Statut (annulé/reporté/complet)** : 0/20 actifs (0 %)
89 −- **Artistes** : 0/20 actifs (0 %)
90 −- **Image** : 20/20 actifs (100 %)
91 −- **Salle (venue)** : 0/20 actifs (0 %)
92 −- **Dernier sync** : 2026-08-22 23:01 — fetched 27, +0 ajoutés, ~0 mis à jour, -0 retirés
93 −- **Syncs enregistrés** (sync_log) : 82
86 +*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
87 +
88 +- **Événements en base** : 28 (dont **17 actifs**)
89 +- **GPS** : 17/17 actifs (100 %)
90 +- **Prix** : 0/17 actifs (0 %)
91 +- **Heure (start_time)** : 0/17 actifs (0 %)
92 +- **Heure de fin** : 0/17 actifs (0 %)
93 +- **Statut (annulé/reporté/complet)** : 0/17 actifs (0 %)
94 +- **Artistes** : 0/17 actifs (0 %)
95 +- **Image** : 17/17 actifs (100 %)
96 +- **Salle (venue)** : 0/17 actifs (0 %)
97 +- **Dernier sync** : 2026-08-25 17:59 — fetched 27, +0 ajoutés, ~22 mis à jour, -0 retirés
98 +- **Syncs enregistrés** (sync_log) : 137
94 99
95 100 ## Erreurs & dépannage
96 101
modified docs/connecteurs/brossard.md +26 −26
@@ -1,6 +1,6 @@
1 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 5 **Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/brossard.py`
6 6
@@ -43,30 +43,30 @@
43 43
44 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 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) |
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… |
52 −| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://brossard.ca/calendrier-evenements/atelier-jeux-de-societe-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 % | 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/heure-du-conte-en-mandarin-20-decembre-2026/ |
53 53 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["famille"] |
54 −| `venue` — Salle (venue) | nom du lieu | 95 % | Salle d'animation |
55 −| `address` — Adresse | adresse civique | 95 % | 7855, av San Francisco |
54 +| `venue` — Salle (venue) | nom du lieu | 94 % | Salle d'animation |
55 +| `address` — Adresse | adresse civique | 94 % | 7855, av San Francisco |
56 56 | `city` — Ville | municipalité | 100 % | Brossard |
57 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 |
59 −| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-16 |
60 −| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-16 |
61 −| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 96 % | 10:00 |
62 −| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
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-12-20 |
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) | 95 % | 10:30 |
62 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 95 % | 12:00 |
63 63 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
64 64 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
65 65 | `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
66 66 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
67 67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
68 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 70 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
71 71
72 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 82 ## Volumétrie & complétude live
83 83
84 −*(mesuré le 2026-08-22 23:05 EDT dans `data/sortika.db`)*
85 −
86 −- **Événements en base** : 264 (dont **146 actifs**)
87 −- **GPS** : 138/146 actifs (95 %)
88 −- **Prix** : 0/146 actifs (0 %)
89 −- **Heure (start_time)** : 140/146 actifs (96 %)
90 −- **Heure de fin** : 0/146 actifs (0 %)
91 −- **Statut (annulé/reporté/complet)** : 0/146 actifs (0 %)
92 −- **Artistes** : 0/146 actifs (0 %)
93 −- **Image** : 146/146 actifs (100 %)
94 −- **Salle (venue)** : 138/146 actifs (95 %)
95 −- **Dernier sync** : 2026-08-22 23:02 — fetched 264, +0 ajoutés, ~0 mis à jour, -0 retirés
96 −- **Syncs enregistrés** (sync_log) : 105
84 +*(mesuré le 2026-08-25 19:01 EDT dans `data/sortika.db`)*
85 +
86 +- **Événements en base** : 266 (dont **147 actifs**)
87 +- **GPS** : 138/147 actifs (94 %)
88 +- **Prix** : 0/147 actifs (0 %)
89 +- **Heure (start_time)** : 140/147 actifs (95 %)
90 +- **Heure de fin** : 140/147 actifs (95 %)
91 +- **Statut (annulé/reporté/complet)** : 0/147 actifs (0 %)
92 +- **Artistes** : 0/147 actifs (0 %)
93 +- **Image** : 147/147 actifs (100 %)
94 +- **Salle (venue)** : 138/147 actifs (94 %)
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) : 160
97 97
98 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