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>
128 changed files +16,147 −1,300
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.