SPB Git forge

spb/sorti-ka

Public

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

58commits 1branches 0releases
13.7 MBsize
maindefault branch
17 days agolast push
HTML 82.9% Python 15.2% TypeScript 0.9% JavaScript 0.7%

Phase 3 — registre (34 sources), conformité et crédits

- data/sources.json : 9 nouvelles sources actives avec fiche d évaluation
  datée (accès constaté, volume mesuré, robots.txt lu, effort) + 5 écartements
  consignés avec raison (mauricie JS, laurentides/gaspesie WAF, tuxedo en
  panne, clubs pros doublons)
- docs/CONFORMITE.md : tableau licences/robots.txt/crédits/fréquences de
  TOUTES les sources + données transversales (MAMH, OSM/ODbL, Nominatim)
- frontend + seo.py : étiquettes SRC_LABELS des 9 nouvelles sources (+ 3
  anciennes manquantes) ; pied de page d attribution enrichi, dont
  « lieux : © contributeurs OpenStreetMap (ODbL) » exigé par l annuaire
- docs/connecteurs : fiches régénérées (34 sources, INDEX)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 1 mo ago (Aug 19, 2026) parent 0b8a6f8

39 changed files +1,719 −213

modified data/sources.json +172 −3
@@ -44,7 +44,8 @@
44 44 "couverture": "Activités municipales, Laval",
45 45 "cadence": "horaire (watcher PM2)",
46 46 "statut": "morte-a-la-source",
47 "decision": "2026-08-19 (audit Phase 1 + Phase 2) : le jeu ouvert est MORT À LA SOURCE — 293 enregistrements, EventDate max 2025-12-09, plus aucun événement futur publié depuis fin 2025 alors que le connecteur tourne sans erreur (41 runs verts). Le connecteur reste branché (archivage naturel du stock + réveil automatique si la Ville republie), mais la source ne compte plus comme active. REMPLACEMENT prévu en Phase 3 : calendrier vivant laval.ca / Tourisme Laval (voir 04-SOURCES-CANDIDATES de l'audit)."
47 + "decision": "2026-08-19 (audit Phase 1 + Phase 2) : le jeu ouvert est MORT À LA SOURCE — 293 enregistrements, EventDate max 2025-12-09, plus aucun événement futur publié depuis fin 2025 alors que le connecteur tourne sans erreur (41 runs verts). Le connecteur reste branché (archivage naturel du stock + réveil automatique si la Ville republie), mais la source ne compte plus comme active. REMPLACEMENT prévu en Phase 3 : calendrier vivant laval.ca / Tourisme Laval (voir 04-SOURCES-CANDIDATES de l'audit).",
48 + "note": " REMPLACÉE 2026-08-19 (Phase 3) par la source « lavalweb » (calendrier vivant laval.ca)."
48 49 },
49 50 {
50 51 "id": "sherbrooke",
@@ -101,7 +102,7 @@
101 102 "couverture": "Saguenay",
102 103 "cadence": "n/d",
103 104 "statut": "abandonnee",
104 "note": "Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17)"
105 + "note": "Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17). REMPLACÉE 2026-08-19 (Phase 3) par la source « saguenaysorties » (portail sorties.saguenay.ca)."
105 106 },
106 107 {
107 108 "id": "repentigny",
@@ -229,6 +230,174 @@
229 230 "cadence": "n/d",
230 231 "statut": "abandonnee",
231 232 "note": "Cloudflare bloque tout GET non navigateur (403) et aucun jeu « événements » sur Données Québec (vérifié 2026-08-18)"
233 + },
234 + {
235 + "id": "lavalweb",
236 + "name": "Ville de Laval — calendrier vivant laval.ca",
237 + "url": "https://www.laval.ca/calendrier-activites/",
238 + "type": "municipal",
239 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = WordPress rendu serveur, pagination ?findstr[group]=events&findstr[page]=N (58 pages × ~8 cartes ≈ 460 activités à venir mesurées) ; l'API REST /wp-json/wp/v2/events (764 fiches) ne publie PAS la date de l'événement → listes SSR retenues ; volume mesuré ~460 ; couverture = activités municipales/culturelles/sportives Laval ; robots.txt lu : Disallow /wp-admin/ seulement ; effort ●●.",
240 + "extraction": "listes SSR paginées (cartes .event-item : date FR « 18 août 2026 | 18 h » → date + heure, titre, lieu, lien, image lazy) + fiches détail incrémentales (cache data/lavalweb_cache.json, LAVALWEB_FICHE_MAX/sync, re-visite 7 j) : og:description ; GPS via annuaire de salles + géocodeur",
241 + "acces_legal": "robots.txt laval.ca : Disallow /wp-admin/ seulement — pages calendrier publiques, GET throttlés 0,5 s, identification honnête",
242 + "couverture": "Activités municipales, Laval (remplace le jeu Données Québec mort à la source depuis 2025-12)",
243 + "cadence": "horaire (watcher PM2, incrémental)",
244 + "statut": "actif"
245 + },
246 + {
247 + "id": "outaouais",
248 + "name": "Tourisme Outaouais — calendrier des événements (ATR)",
249 + "url": "https://tourismeoutaouais.com/calendrier-des-evenements",
250 + "type": "tourisme-regional",
251 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = site Astro, la page calendrier embarque TOUT le calendrier dans les props sérialisées de l'îlot CalendrierDesEvenements (162 événements dont 25 futurs mesurés) — 1 GET/sync ; l'API GraphQL admin.tourismeoutaouais.com exige un jeton (403) ; robots.txt lu : Allow / ; effort ●.",
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",
253 + "acces_legal": "robots.txt : User-agent: * / Allow: / — GET direct throttlé 0,8 s, identification honnête, lien vers la fiche/site officiel",
254 + "couverture": "Festivals et événements, Outaouais (337 fiches seulement au baseline régional)",
255 + "cadence": "horaire (watcher PM2)",
256 + "statut": "actif"
257 + },
258 + {
259 + "id": "lanaudiere",
260 + "name": "Tourisme Lanaudière — événements (ATR)",
261 + "url": "https://lanaudiere.ca/fr/evenements-lanaudiere",
262 + "type": "tourisme-regional",
263 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = CMS Umbraco, liste SSR limitée à ~10 cartes (44 résultats annoncés, reste en JS) → passage par le SITEMAP officiel (83 URLs de fiches fr mesurées) ; fiches structurées (member-title-1-1 : titre, plage de dates FR, municipalité) + og:image Tourinsoft + og:description ; robots.txt lu : Disallow /*? (aucune URL à paramètres requêtée) + Crawl-delay 2 s (respecté : GET séquentiels 2,1 s) ; effort ●●.",
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",
265 + "acces_legal": "robots.txt : Disallow /*? + Crawl-delay: 2 — respectés à la lettre (aucun paramètre d'URL, 2,1 s entre GET), identification honnête",
266 + "couverture": "Festivals et événements, Lanaudière",
267 + "cadence": "horaire (watcher PM2, incrémental)",
268 + "statut": "actif"
269 + },
270 + {
271 + "id": "saguenaysorties",
272 + "name": "Sorties Saguenay — portail événementiel de la Ville",
273 + "url": "https://sorties.saguenay.ca/",
274 + "type": "municipal",
275 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = portail SSR de la Ville de Saguenay motorisé par les données La Vitrine (médias lvc-medias.lavitrine.com) ; pagination POST /ajax/plus (36 séances/lot, ~300-400 séances mesurées entre offset 0 et 500) ; détails POST /ajax/details (description + adresse) ; chaque carte = une séance horodatée (date + heure + ville + salle) ; robots.txt : non publié (page de maintenance) → volumes modestes et throttle 0,8 s ; effort ●●. Remplace le CSV Données Québec mort (2022-06).",
276 + "extraction": "POST /ajax/plus paginé (SAG_BATCH_MAX lots) : discipline, date FR, heure, titre, « Ville, Salle », image, detail-id → une fiche PAR séance ; détails incrémentaux POST /ajax/details (cache data/saguenaysorties_cache.json, SAG_DETAIL_MAX/sync, re-visite 7 j) : description, adresse civique",
277 + "acces_legal": "portail public municipal — POST throttlés 0,8 s, identification honnête, lien fiche officielle /festivals?id=<id> ; recoupement lavitrine/lepointdevente géré par dedup_key",
278 + "couverture": "Spectacles, expositions, festivals — Saguenay et environs (Saguenay–Lac-Saint-Jean)",
279 + "cadence": "horaire (watcher PM2, incrémental)",
280 + "statut": "actif"
281 + },
282 + {
283 + "id": "bassaintlaurent",
284 + "name": "Tourisme Bas-Saint-Laurent — événements (ATR)",
285 + "url": "https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/",
286 + "type": "tourisme-regional",
287 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = WordPress (Bedrock) rendu serveur, 27 cartes complètes sur la liste (titre, plage de dates FR, municipalité, image) ; fiches avec GPS exact embarqué + og:description ; robots.txt lu : rien d'interdit sur /fr/ ; volume mesuré 27 ; couverture = BSL (168 fiches seulement au baseline) ; effort ●.",
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",
289 + "acces_legal": "pages publiques de l'ATR — GET throttlés 0,8 s, identification honnête, lien fiche originale",
290 + "couverture": "Festivals et événements, Bas-Saint-Laurent",
291 + "cadence": "horaire (watcher PM2, incrémental)",
292 + "statut": "actif"
293 + },
294 + {
295 + "id": "quebecanimee",
296 + "name": "Québec animée — Ville de Québec",
297 + "url": "https://animee.ville.quebec.qc.ca/activites/",
298 + "type": "municipal",
299 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = portail municipal SSR ; la liste /activites/ porte TOUT en attributs data- (date-debut/date-fin ISO, arrondissement, catégories, prix « Gratuit ») : 126 séances / 73 activités mesurées, 1 GET ; fiches pour description/lieu ; le calendrier général ville.quebec.qc.ca n'expose pas de flux structuré (vérifié) ; effort ●. Comble l'absence de source municipale/gratuite de la 2ᵉ ville (inventaire Capitale-Nationale ~100 % billetteries).",
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",
301 + "acces_legal": "site municipal public rendu serveur — GET throttlés 0,8 s, identification honnête, lien fiche officielle",
302 + "couverture": "Activités gratuites/à faible coût, Ville de Québec (Capitale-Nationale)",
303 + "cadence": "horaire (watcher PM2, incrémental)",
304 + "statut": "actif"
305 + },
306 + {
307 + "id": "placedesarts",
308 + "name": "Place des Arts — calendrier multi-salles",
309 + "url": "https://www.placedesarts.com/programmation",
310 + "type": "salle-de-spectacle",
311 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = Craft CMS rendu serveur ; /programmation liste 97 spectacles (6 salles) ; chaque fiche embarque #eventbannerdata + #eventGTM (JSON : titre, salle, producteur, discipline, plage de dates) + barre latérale des représentations avec heure ET PRIX RÉELS (« 33 $ à 97,50 $ ») — 23 séances mesurées sur la fiche sonde ; robots.txt lu : Disallow /cpresources/ /vendor/ /cache/ seulement ; effort ●●. Meilleure candidate unitaire de la famille « salles » (audit §C).",
312 + "extraction": "liste /programmation (1 GET) → fiches /evenement/<slug> incrémentales (cache data/placedesarts_cache.json, PDA_FICHE_MAX/sync, re-visite 7 j) : une fiche Sorti-Ka PAR représentation (date + heure + prix réels), salle précise, producteur → organisateur, discipline → catégories",
313 + "acces_legal": "robots.txt : Disallow /cpresources/ /vendor/ /cache/ seulement — GET throttlés 0,8 s, identification honnête, lien billetterie officielle ; recoupement lavitrine/evenko géré par dedup_key",
314 + "couverture": "Spectacles des 6 salles de la Place des Arts, Montréal (~97 spectacles, plusieurs centaines de séances)",
315 + "cadence": "horaire (watcher PM2, incrémental)",
316 + "statut": "actif"
317 + },
318 + {
319 + "id": "lhjmq",
320 + "name": "LHJMQ — matchs des équipes québécoises",
321 + "url": "https://theqmjhl.ca/",
322 + "type": "sport",
323 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : accès constaté = API HockeyTech « modulekit » (lscluster.hockeytech.com, JSON, clé publique de la ligue embarquée dans ses propres sites) — saison 2026-27 : 580 matchs mesurés dont ~384 à domicile dans 12 villes QC (Chicoutimi, Baie-Comeau, Rimouski, Rouyn-Noranda, Val-d'Or, Gatineau, Shawinigan, Drummondville, Victoriaville, Boisbriand, Sherbrooke, Québec) ; date + heure + aréna structurés ; 2 GET/sync ; effort ●. Fort levier d'équilibre régional (Côte-Nord, Abitibi, BSL…).",
324 + "extraction": "API modulekit (view=seasons puis view=schedule) : matchs à domicile au Québec seulement → titre « LHJMQ : Visiteur c. Receveur », date + heure locales, aréna, ville, statut annulé si publié ; prix non publié → jamais inventé",
325 + "acces_legal": "flux JSON public qui motorise le site officiel de la ligue — usage index + lien fiche de match officielle (theqmjhl.ca/gamecentre/<id>), GET throttlés 1 s, identification honnête",
326 + "couverture": "~384 matchs/saison à domicile au Québec, 12 villes dans 10 régions",
327 + "cadence": "horaire (watcher PM2)",
328 + "statut": "actif"
329 + },
330 + {
331 + "id": "sallesjsonld",
332 + "name": "Salles de spectacle — moteur générique JSON-LD Event",
333 + "url": "https://grandtheatre.qc.ca/programmation",
334 + "type": "salle-de-spectacle",
335 + "evaluation": "ÉVALUATION 2026-08-19 (avant connexion) : moteur configurable (data/salles_jsonld.json, patron stores.json de fabri-ka) pour la longue traîne des salles qui publient schema.org/Event sur leurs fiches. Sondage 2026-08-19 : AVEC Event JSON-LD = Grand Théâtre de Québec (108 fiches listées), Théâtre du Trident, Théâtre Capitole (via gestev.com) ; SANS (écartées de la config, re-sonder plus tard) = Palais Montcalm, Le Diamant, Impérial Bell, MTelus/Corona/Club Soda (evenko, déjà couverts), Petit Champlain / Albert-Rousseau (plateforme JS « pages/collections ») ; robots.txt lu salle par salle avant ajout ; effort ●● (moteur) puis ● par salle.",
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",
337 + "acces_legal": "robots.txt vérifié PAR SALLE avant ajout à la config (consigné dans data/salles_jsonld.json) — GET throttlés 0,8 s, identification honnête, lien fiche originale",
338 + "couverture": "Longue traîne des salles de spectacle QC (amorce : Grand Théâtre de Québec, Trident, Capitole — Capitale-Nationale)",
339 + "cadence": "horaire (watcher PM2, incrémental)",
340 + "statut": "actif"
341 + },
342 + {
343 + "id": "mauricie",
344 + "name": "Tourisme Mauricie — événements (ATR)",
345 + "url": "https://tourismemauricie.com/evenements",
346 + "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."
353 + },
354 + {
355 + "id": "laurentides",
356 + "name": "Tourisme Laurentides — événements (ATR)",
357 + "url": "https://www.laurentides.com/fr/quoifaire/evenements",
358 + "type": "tourisme-regional",
359 + "extraction": "n/d",
360 + "acces_legal": "n/d",
361 + "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."
365 + },
366 + {
367 + "id": "gaspesie",
368 + "name": "Tourisme Gaspésie — événements (ATR)",
369 + "url": "https://www.tourisme-gaspesie.com/evenements-gaspesie.html",
370 + "type": "tourisme-regional",
371 + "extraction": "n/d",
372 + "acces_legal": "n/d",
373 + "couverture": "Gaspésie–Îles-de-la-Madeleine",
374 + "cadence": "n/d",
375 + "statut": "abandonnee",
376 + "note": "ÉCARTÉE 2026-08-19 (Phase 3) : WAF — 403 sur GET identifié (UA honnête). Région faible (60 fiches au baseline) : candidate prioritaire pour une vague Scrapfly consignée (crédits) ou un partenariat. À re-sonder."
377 + },
378 + {
379 + "id": "tuxedobillet",
380 + "name": "Tuxedo Billet — billetterie Capitale-Nationale",
381 + "url": "https://www.tuxedobillet.com/",
382 + "type": "billetterie",
383 + "extraction": "n/d",
384 + "acces_legal": "n/d",
385 + "couverture": "Salles de Québec/Lévis (Grand Théâtre, Palais Montcalm…)",
386 + "cadence": "n/d",
387 + "statut": "abandonnee",
388 + "note": "ÉCARTÉE 2026-08-19 (Phase 3) : site en PANNE aux sondes — www = page « failover site », apex = erreur TLS (curl 60). Le Grand Théâtre et le Capitole sont couverts via sallesjsonld en attendant. À re-sonder."
389 + },
390 + {
391 + "id": "clubs-pros",
392 + "name": "Clubs professionnels (CF Montréal, Alouettes, Rocket, Victoire…)",
393 + "url": "https://www.cfmontreal.com/",
394 + "type": "sport",
395 + "extraction": "n/d",
396 + "acces_legal": "n/d",
397 + "couverture": "Montréal/Laval (MLS, LCF, AHL, LPHF)",
398 + "cadence": "n/d",
399 + "statut": "abandonnee",
400 + "note": "ÉCARTÉE 2026-08-19 (Phase 3) : les matchs à domicile passent déjà par les billetteries connectées (evenko/ticketmaster : Canadiens 74 fiches, Remparts 31…) — des connecteurs de ligue dédiés (MLS/LCF/AHL) apporteraient surtout des doublons pour ~150 fiches nettes/an. La LHJMQ, elle, est connectée (vrai levier régional). À revisiter si un besoin statut/heure officiel apparaît."
232 401 }
233 402 ]
234 }
\ No newline at end of file
403 +}
added docs/CONFORMITE.md +69 −0
@@ -0,0 +1,69 @@
1 +# Sorti-KA — Conformité des sources (licences, robots.txt, crédits)
2 +
3 +> Établi le 2026-08-19 (Phase 3 — expansion des sources). À tenir à jour à CHAQUE
4 +> ajout/retrait de source. Règles maison transversales : User-Agent honnête
5 +> (`SortiKa/1.0 (+https://www.sorti-ka.com; contact@spboucher.ai)`), GET/POST
6 +> throttlés, caches incrémentaux (jamais de re-scrape intégral), lien
7 +> systématique vers la fiche originale, AUCUNE donnée inventée, quarantaine
8 +> pour le douteux. Le pied de page du site porte l'attribution globale ; la
9 +> fiche de chaque événement affiche « Source & attribution » avec le nom de la
10 +> source et le lien sortant.
11 +
12 +## Sources actives
13 +
14 +| Source (id) | Licence / CGU constatées | robots.txt (lu le) | Crédit requis | Fréquence pratiquée | Décision |
15 +|---|---|---|---|---|---|
16 +| SIT Québec (`sitq`) | Données Québec — Creative Commons 4.0 (API de syndication officielle du MTO) | n/a (API) | **Oui — CC 4.0** : « SIT Québec — Ministère du Tourisme » (pied de page + fiche) | horaire, 1 GET + images plafonnées | conforme |
17 +| Ville de Montréal (`montreal`) | donnees.montreal.ca — **CC BY 4.0** | WAF anti-« bot » dans l'UA (contourné par un UA produit honnête, permis) | **Oui — CC BY 4.0** : « Ville de Montréal » (pied de page + fiche) | horaire, API CKAN paginée | conforme |
18 +| Le point de vente (`lepointdevente`) | robots.txt : `User-Agent: * / Allow: *` ; CGU : pas d'interdiction d'indexation constatée | 2026-08 (Allow all) | Courtoisie : lien billetterie direct | horaire, 150 fiches/sync | conforme |
19 +| Ville de Laval jeu ouvert (`laval`) | Données Québec — CC 4.0 | n/a (fichier JSON) | Oui — CC 4.0 : « Ville de Laval » | horaire (source morte, stock archivé) | morte-à-la-source, branchée en veille |
20 +| **Ville de Laval laval.ca (`lavalweb`)** | site municipal public ; robots.txt : `Disallow: /wp-admin/` seulement | 2026-08-19 | Courtoisie : « Ville de Laval (laval.ca) » affiché | horaire, ~60 GET listes + 30 fiches/sync | **conforme (Phase 3)** |
21 +| Ville de Sherbrooke (`sherbrooke`) | page municipale publique (référencée sur Données Québec) | 2026-08 | Courtoisie : « Ville de Sherbrooke » | horaire, 1 GET | conforme |
22 +| Ville de Longueuil (`longueuil`) | portail municipal public | 2026-08 | Courtoisie | horaire, 1 GET + 30 fiches | conforme |
23 +| Eventbrite (`eventbrite`) | robots.txt : `/d/` et `/e/` non interdits (seuls /directory/, checkout, endpoints privés) | 2026-08 | Courtoisie : lien fiche directe | horaire, pages découverte + 150 fiches | conforme |
24 +| Tourisme Cantons-de-l'Est (`cantonsdelest`) | pages publiques ATR | 2026-08 | Courtoisie : « Tourisme Cantons-de-l'Est » | horaire, 1 GET + 40 fiches | conforme |
25 +| evenko (`evenko`) | robots.txt : `Allow /api/search*` explicite | 2026-08 | Courtoisie : lien billets officiel | horaire, ~5 GET | conforme |
26 +| Atuvu.ca (`atuvu`) | robots.txt : Allow / + sitemap public ; Cloudflare → Scrapfly consigné (crédits) | 2026-08 | Courtoisie | horaire, sitemaps lastmod + 120 fiches | conforme (Scrapfly consigné) |
27 +| La Vitrine (`lavitrine`) | robots.txt : Allow / + `Content-Signal: search=yes, use=reference` | 2026-08 | Courtoisie : usage index + lien fiche (conforme au Content-Signal) | horaire, 150 fiches/sync | conforme |
28 +| Ville de Brossard (`brossard`) | API REST WordPress publique sans auth | 2026-08 | Courtoisie | horaire, API + 80 fiches | conforme |
29 +| Ticketmaster (`ticketmaster`) | robots.txt : /discover/ non interdit (seuls /api/ismds/*) ; API officielle dès que TICKETMASTER_API_KEY fournie | 2026-08 | Courtoisie : lien billetterie officielle | horaire, ≤ 24 GET | conforme |
30 +| Bandsintown (`bandsintown`) | API publique avec app_id d'identification | n/a (API) | Courtoisie : lien fiche | horaire, ≤ 100 artistes/sync | conforme |
31 +| **Tourisme Outaouais (`outaouais`)** | pages publiques ATR ; robots.txt : `Allow: /` | 2026-08-19 | Courtoisie : « Tourisme Outaouais » | horaire, **1 GET** | **conforme (Phase 3)** |
32 +| **Tourisme Lanaudière (`lanaudiere`)** | pages publiques ATR ; robots.txt : `Disallow: /*?` + **Crawl-delay: 2** | 2026-08-19 | Courtoisie : « Tourisme Lanaudière » | horaire, sitemap + 10 fiches/sync, GET séquentiels **2,1 s**, aucune URL à paramètres | **conforme (Phase 3)** |
33 +| **Sorties Saguenay (`saguenaysorties`)** | portail public de la Ville de Saguenay (données La Vitrine) ; robots.txt non publié (page maintenance) | 2026-08-19 | Courtoisie : « Sorties Saguenay (Ville de Saguenay) » | horaire, ≤ 15 POST liste + 40 détails/sync | **conforme (Phase 3)** |
34 +| **Tourisme Bas-Saint-Laurent (`bassaintlaurent`)** | pages publiques ATR | 2026-08-19 | Courtoisie : « Tourisme Bas-Saint-Laurent » | horaire, 1 GET + 15 fiches/sync | **conforme (Phase 3)** |
35 +| **Québec animée (`quebecanimee`)** | portail officiel Ville de Québec ; © Ville de Québec (site municipal public) | 2026-08-19 | Courtoisie : « Québec animée (Ville de Québec) » | horaire, 1 GET + 20 fiches/sync | **conforme (Phase 3)** |
36 +| **Place des Arts (`placedesarts`)** | robots.txt : Disallow /cpresources/ /vendor/ /cache/ seulement ; CGU d'achat non applicables à l'index | 2026-08-19 | Courtoisie : « Place des Arts » + lien billetterie officielle | horaire, 1 GET + 25 fiches/sync | **conforme (Phase 3)** |
37 +| **LHJMQ (`lhjmq`)** | flux JSON public HockeyTech qui motorise le site officiel de la ligue (clé publique de la ligue) | n/a (API) | Courtoisie : « LHJMQ » + lien fiche de match officielle | horaire, 2 GET | **conforme (Phase 3)** — à retirer sur simple demande de la ligue |
38 +| **Salles JSON-LD (`sallesjsonld`)** | schema.org/Event publié PAR les salles pour l'indexation ; robots.txt vérifié PAR SALLE avant ajout (consigné dans data/salles_jsonld.json) | 2026-08-19 (Grand Théâtre : Allow / ; Trident : Disallow vide ; Capitole/Gestev : /cpresources/ /vendor/) | Courtoisie : nom de la salle + lien fiche | horaire, 3 GET listes + 40 fiches/sync partagées | **conforme (Phase 3)** |
39 +
40 +## Données transversales
41 +
42 +| Donnée | Licence | Crédit | Décision |
43 +|---|---|---|---|
44 +| Répertoire des municipalités (MAMH) — `data/villes_canon.json`, `villes_regions.json` | Données Québec CC 4.0 | Oui : « Répertoire des municipalités (MAMH) » (pied de page) | conforme |
45 +| **Annuaire de salles — OpenStreetMap (Overpass)** | **ODbL** — © contributeurs OpenStreetMap | **Oui : « lieux : © contributeurs OpenStreetMap (ODbL) »** (pied de page, ajouté Phase 3) | conforme — overpass-api.de (PAS l'extrait suisse), UA de bot honnête, 1 requête/30 j |
46 +| Annuaire de salles — Nominatim | politique d'usage OSMF : 1 req/s, UA identifié, cache obligatoire | idem OSM | conforme (throttle 1,1 s, cache disque, plafond/cycle) |
47 +
48 +## Sources écartées (et pourquoi) — vague 2026-08-19
49 +
50 +| Candidate | Raison de l'écartement | Re-sonder ? |
51 +|---|---|---|
52 +| Tourisme Mauricie | liste rendue JS (1 carte SSR/page), wp-json verrouillé (401) | oui (percer la facette admin-ajax) |
53 +| Tourisme Laurentides | WAF : 403 sur GET identifié | oui (région déjà bien couverte : 620 fiches — Scrapfly non justifié) |
54 +| Tourisme Gaspésie | WAF : 403 sur GET identifié | oui — région faible (60 fiches), candidate Scrapfly consignée ou partenariat |
55 +| Tuxedo Billet | site en panne aux sondes (www = « failover site », apex = erreur TLS) | oui |
56 +| Clubs pros (CF MTL, Alouettes, Rocket…) | déjà couverts par evenko/ticketmaster ; ligues dédiées = surtout des doublons | si besoin de statuts officiels |
57 +| Palais Montcalm, Le Diamant, Impérial Bell | fiches SANS JSON-LD Event (sondées) | oui, après refonte de leurs sites |
58 +| MTelus, Corona, Club Soda | salles evenko — déjà couvertes par le connecteur evenko | non (doublons garantis) |
59 +| Petit Champlain, Salle Albert-Rousseau | plateforme JS (« pages/collections »), rien de SSR | oui |
60 +| Médias (La Presse, Le Devoir, JdQ/JdM) | éditorial non structuré + droits d'auteur | non |
61 +
62 +## Règles d'affichage du crédit (vérifiées Phase 3)
63 +
64 +- **Pied de page** (`frontend/index.html`) : attribution globale — CC (SITQ, Montréal,
65 + Laval), villes, ATR, Place des Arts, LHJMQ, billetteries, MAMH, **OSM/ODbL** (ajouté
66 + 2026-08-19 avec l'annuaire de salles).
67 +- **Fiche événement** : bloc « Source & attribution » (`SRC_LABELS`, frontend +
68 + `sortika/seo.py` pour le SSR) — les 9 nouvelles sources y sont étiquetées.
69 +- **JSON-LD sortant** : chaque fiche renvoie l'URL de la source originale.
modified docs/connecteurs/INDEX.md +31 −17
@@ -1,8 +1,8 @@
1 1 # Sorti-Ka — Connecteurs de sources d'événements
2 2
3 > Index généré le 2026-08-19 01:27 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-19 02:34 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 **20 sources au registre** — 14 actives/prêtes, 6 abandonnées · **19458 événements en base** (dont 13061 actifs).
5 +**34 sources au registre** — 23 actives/prêtes, 11 abandonnées · **22105 événements en base** (dont 15449 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,31 +10,45 @@
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 | 876 | 97 % | 0 % | 0 % | 0 % | 0 % | 0 % | 63 % | 74 % | 2026-08-19 01:19 |
14 | [Ville de Montréal — Événements publics](montreal.md) | donnees-ouvertes | actif | 3291 | 99 % | 100 % | 100 % | 9 % | 0 % | 0 % | 100 % | 5 % | 2026-08-19 01:19 |
15 | [Le point de vente — billetterie québécoise](lepointdevente.md) | billetterie | actif | 1786 | 27 % | 92 % | 94 % | 0 % | 0 % | 1 % | 100 % | 99 % | 2026-08-19 01:19 |
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-19 01:17 |
17 | [Ville de Sherbrooke — Calendrier des événements](sherbrooke.md) | municipal | actif | 116 | 0 % | 100 % | 87 % | 92 % | 0 % | 0 % | 99 % | 0 % | 2026-08-19 01:19 |
18 | [Ville de Longueuil — Événements (nouveau portail)](longueuil.md) | municipal | actif | 4 | 75 % | 0 % | 100 % | 50 % | 0 % | 0 % | 100 % | 0 % | 2026-08-19 01:19 |
19 | [Eventbrite — billetterie libre-service (Québec)](eventbrite.md) | billetterie | actif | 429 | 100 % | 88 % | 100 % | 100 % | 0 % | 0 % | 98 % | 100 % | 2026-08-19 01:26 |
20 | [Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)](cantonsdelest.md) | tourisme-regional | actif | 11 | 91 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-19 01:16 |
21 | [evenko — grands concerts et festivals](evenko.md) | promoteur | actif | 421 | 77 % | 0 % | 99 % | 0 % | 0 % | 99 % | 100 % | 100 % | 2026-08-19 01:16 |
22 | [Atuvu.ca — calendrier culturel](atuvu.md) | agregateur | actif | 151 | 62 % | 37 % | 9 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 01:16 |
23 | [La Vitrine culturelle](lavitrine.md) | billetterie | actif | 5087 | 52 % | 0 % | 51 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 01:21 |
24 | [Ville de Brossard — Calendrier des événements](brossard.md) | municipal | actif | 150 | 94 % | 0 % | 96 % | 0 % | 0 % | 0 % | 100 % | 94 % | 2026-08-19 01:16 |
25 | [Ticketmaster — Discovery API (Québec)](ticketmaster.md) | billetterie | actif | 368 | 100 % | 0 % | 96 % | 0 % | 4 % | 0 % | 91 % | 100 % | 2026-08-19 01:20 |
26 | [Bandsintown — dates de concerts par artiste](bandsintown.md) | agregateur | actif | 370 | 100 % | 1 % | 100 % | 0 % | 0 % | 100 % | 7 % | 100 % | 2026-08-19 01:16 |
13 +| [SIT Québec — Ministère du Tourisme](sitq.md) | donnees-ouvertes | actif | 1013 | 97 % | 0 % | 0 % | 0 % | 0 % | 0 % | 63 % | 73 % | 2026-08-19 02:27 |
14 +| [Ville de Montréal — Événements publics](montreal.md) | donnees-ouvertes | actif | 3291 | 99 % | 100 % | 100 % | 18 % | 0 % | 0 % | 100 % | 5 % | 2026-08-19 01:33 |
15 +| [Le point de vente — billetterie québécoise](lepointdevente.md) | billetterie | actif | 1786 | 31 % | 92 % | 94 % | 0 % | 0 % | 1 % | 100 % | 99 % | 2026-08-19 01:32 |
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-19 01:31 |
17 +| [Ville de Sherbrooke — Calendrier des événements](sherbrooke.md) | municipal | actif | 116 | 0 % | 100 % | 87 % | 92 % | 0 % | 0 % | 99 % | 0 % | 2026-08-19 01:33 |
18 +| [Ville de Longueuil — Événements (nouveau portail)](longueuil.md) | municipal | actif | 4 | 75 % | 0 % | 100 % | 50 % | 0 % | 0 % | 100 % | 0 % | 2026-08-19 01:32 |
19 +| [Eventbrite — billetterie libre-service (Québec)](eventbrite.md) | billetterie | actif | 430 | 100 % | 87 % | 100 % | 100 % | 0 % | 0 % | 98 % | 100 % | 2026-08-19 01:31 |
20 +| [Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie)](cantonsdelest.md) | tourisme-regional | actif | 11 | 91 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-19 01:30 |
21 +| [evenko — grands concerts et festivals](evenko.md) | promoteur | actif | 421 | 97 % | 0 % | 99 % | 0 % | 0 % | 99 % | 100 % | 100 % | 2026-08-19 01:30 |
22 +| [Atuvu.ca — calendrier culturel](atuvu.md) | agregateur | actif | 152 | 70 % | 38 % | 9 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 02:33 |
23 +| [La Vitrine culturelle](lavitrine.md) | billetterie | actif | 5086 | 69 % | 0 % | 71 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 01:31 |
24 +| [Ville de Brossard — Calendrier des événements](brossard.md) | municipal | actif | 150 | 94 % | 0 % | 96 % | 0 % | 0 % | 0 % | 100 % | 94 % | 2026-08-19 01:30 |
25 +| [Ticketmaster — Discovery API (Québec)](ticketmaster.md) | billetterie | actif | 357 | 100 % | 0 % | 96 % | 0 % | 4 % | 0 % | 91 % | 100 % | 2026-08-19 01:33 |
26 +| [Bandsintown — dates de concerts par artiste](bandsintown.md) | agregateur | actif | 452 | 100 % | 1 % | 100 % | 0 % | 0 % | 100 % | 9 % | 100 % | 2026-08-19 01:29 |
27 +| [Ville de Laval — calendrier vivant laval.ca](lavalweb.md) | municipal | actif | 470 | 74 % | 0 % | 98 % | 0 % | 0 % | 0 % | 0 % | 100 % | 2026-08-19 02:14 |
28 +| [Tourisme Outaouais — calendrier des événements (ATR)](outaouais.md) | tourisme-regional | actif | 27 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 96 % | 0 % | 2026-08-19 02:19 |
29 +| [Tourisme Lanaudière — événements (ATR)](lanaudiere.md) | tourisme-regional | actif | 44 | 0 % | 0 % | 0 % | 0 % | 0 % | 0 % | 95 % | 0 % | 2026-08-19 02:19 |
30 +| [Sorties Saguenay — portail événementiel de la Ville](saguenaysorties.md) | municipal | actif | 445 | 33 % | 0 % | 100 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 02:19 |
31 +| [Tourisme Bas-Saint-Laurent — événements (ATR)](bassaintlaurent.md) | tourisme-regional | actif | 20 | 100 % | 0 % | 0 % | 0 % | 0 % | 0 % | 100 % | 0 % | 2026-08-19 02:10 |
32 +| [Québec animée — Ville de Québec](quebecanimee.md) | municipal | actif | 126 | 54 % | 100 % | 0 % | 0 % | 0 % | 0 % | 100 % | 54 % | 2026-08-19 02:10 |
33 +| [Place des Arts — calendrier multi-salles](placedesarts.md) | salle-de-spectacle | actif | 350 | 94 % | 72 % | 99 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 02:15 |
34 +| [LHJMQ — matchs des équipes québécoises](lhjmq.md) | sport | actif | 421 | 99 % | 0 % | 100 % | 0 % | 0 % | 0 % | 0 % | 100 % | 2026-08-19 02:10 |
35 +| [Salles de spectacle — moteur générique JSON-LD Event](sallesjsonld.md) | salle-de-spectacle | actif | 276 | 100 % | 97 % | 100 % | 47 % | 1 % | 0 % | 3 % | 100 % | 2026-08-19 02:19 |
27 36
28 37 ## Sources abandonnées
29 38
30 39 | Source | Type | Raison |
31 40 |---|---|---|
32 | [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) |
41 +| [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… |
33 42 | [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) |
34 43 | [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)… |
35 44 | [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 … |
36 45 | [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é… |
37 46 | [Ville de Terrebonne — Calendrier](terrebonne.md) | municipal | Cloudflare bloque tout GET non navigateur (403) et aucun jeu « événements » sur Données Québec (… |
47 +| [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é… |
48 +| [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 … |
49 +| [Tourisme Gaspésie — événements (ATR)](gaspesie.md) | tourisme-regional | ÉCARTÉE 2026-08-19 (Phase 3) : WAF — 403 sur GET identifié (UA honnête). Région faible (60 fiche… |
50 +| [Tuxedo Billet — billetterie Capitale-Nationale](tuxedobillet.md) | billetterie | ÉCARTÉE 2026-08-19 (Phase 3) : site en PANNE aux sondes — www = page « failover site », apex = e… |
51 +| [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… |
38 52
39 53 ## Régénérer cette documentation
40 54
modified docs/connecteurs/atuvu.md +17 −16
@@ -1,6 +1,6 @@
1 1 # Atuvu.ca — calendrier culturel (`atuvu`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 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
@@ -38,7 +38,7 @@
38 38
39 39 ## Champs récupérés → schéma
40 40
41 Complétude mesurée sur les **151 événements actifs** de la source ; exemples tirés d'un événement réel (`atuvu:belmar-cardinal-en-spectacle-2026-08-19`).
41 +Complétude mesurée sur les **152 événements actifs** de la source ; exemples tirés d'un événement réel (`atuvu:belmar-cardinal-en-spectacle-2026-08-19`).
42 42
43 43 | Champ (`events.*`) | Description | Complétude | Exemple réel |
44 44 |---|---|---|---|
@@ -50,14 +50,14 @@ Complétude mesurée sur les **151 événements actifs** de la source ; exemples
50 50 | `address` — Adresse | adresse civique | 0 % | ∅ |
51 51 | `city` — Ville | municipalité | 97 % | Montréal |
52 52 | `region` — Région | région administrative | 94 % | Montréal |
53 | `lat` — GPS (lat/lng) | coordonnées géographiques | 62 % | 45.5602793, -73.6576904 |
53 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 70 % | 45.5602793, -73.6576904 |
54 54 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
55 55 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
56 56 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 9 % | 18:00 |
57 57 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
58 58 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
59 59 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 28 % | ∅ |
60 | `price_min` — Prix min | tarif minimal réel ($) | 37 % | 0.0 |
60 +| `price_min` — Prix min | tarif minimal réel ($) | 38 % | 0.0 |
61 61 | `price_label` — Libellé prix | étiquette tarifaire affichable | 28 % | ∅ |
62 62 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
63 63 | `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
@@ -76,19 +76,19 @@ Complétude mesurée sur les **151 événements actifs** de la source ; exemples
76 76
77 77 ## Volumétrie & complétude live
78 78
79 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
79 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
80 80
81 - **Événements en base** : 162 (dont **151 actifs**)
82 - **GPS** : 94/151 actifs (62 %)
83 - **Prix** : 56/151 actifs (37 %)
84 - **Heure (start_time)** : 14/151 actifs (9 %)
85 - **Heure de fin** : 0/151 actifs (0 %)
86 - **Statut (annulé/reporté/complet)** : 0/151 actifs (0 %)
87 - **Artistes** : 0/151 actifs (0 %)
88 - **Image** : 151/151 actifs (100 %)
89 - **Salle (venue)** : 151/151 actifs (100 %)
90 - **Dernier sync** : 2026-08-19 01:16 — fetched 170, +0 ajoutés, ~160 mis à jour, -0 retirés
91 - **Syncs enregistrés** (sync_log) : 37
81 +- **Événements en base** : 162 (dont **152 actifs**)
82 +- **GPS** : 106/152 actifs (70 %)
83 +- **Prix** : 57/152 actifs (38 %)
84 +- **Heure (start_time)** : 14/152 actifs (9 %)
85 +- **Heure de fin** : 0/152 actifs (0 %)
86 +- **Statut (annulé/reporté/complet)** : 0/152 actifs (0 %)
87 +- **Artistes** : 0/152 actifs (0 %)
88 +- **Image** : 152/152 actifs (100 %)
89 +- **Salle (venue)** : 152/152 actifs (100 %)
90 +- **Dernier sync** : 2026-08-19 02:33 — fetched 170, +0 ajoutés, ~2 mis à jour, -0 retirés
91 +- **Syncs enregistrés** (sync_log) : 39
92 92
93 93 ## Erreurs & dépannage
94 94
@@ -109,5 +109,6 @@ Aucune erreur dans `sync_log` pour cette source. ✅
109 109
110 110 Commits touchant `sortika/connectors/atuvu.py` :
111 111
112 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
112 113 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
113 114 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec
modified docs/connecteurs/bandsintown.md +17 −16
@@ -1,6 +1,6 @@
1 1 # Bandsintown — dates de concerts par artiste (`bandsintown`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 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
@@ -43,12 +43,12 @@
43 43
44 44 ## Champs récupérés → schéma
45 45
46 Complétude mesurée sur les **370 événements actifs** de la source ; exemples tirés d'un événement réel (`bandsintown:108747079`).
46 +Complétude mesurée sur les **452 événements actifs** de la source ; exemples tirés d'un événement réel (`bandsintown:108747079`).
47 47
48 48 | Champ (`events.*`) | Description | Complétude | Exemple réel |
49 49 |---|---|---|---|
50 50 | `title` — Titre | titre de l'événement | 100 % | Doug St-Louis & Dj Chuck / Ptit Gros Bison à Grenville en Fête |
51 | `description` — Description | texte descriptif (source ou fiche détail) | 18 % | Au Parc Normand-Woodbury à Grenville. Spectacle Gratuit Ils seront en duo pour vous faire danser… |
51 +| `description` — Description | texte descriptif (source ou fiche détail) | 19 % | Au Parc Normand-Woodbury à Grenville. Spectacle Gratuit Ils seront en duo pour vous faire danser… |
52 52 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.bandsintown.com/e/108747079?app_id=js_www.sorti-ka.com&came_from=267&utm_medium=api&… |
53 53 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique"] |
54 54 | `venue` — Salle (venue) | nom du lieu | 100 % | Doug St-Louis & Dj Chuck / Ptit Gros Bison à Grenville en Fête |
@@ -66,7 +66,7 @@ Complétude mesurée sur les **370 événements actifs** de la source ; exemples
66 66 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
67 67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 100 % | ["Doug St-Louis", "P'tit Gros Bison"] |
68 68 | `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
69 | `image` — Image | visuel (og:image ou média source) | 7 % | https://photos.bandsintown.com/large/25853181.jpeg |
69 +| `image` — Image | visuel (og:image ou média source) | 9 % | https://photos.bandsintown.com/large/25853181.jpeg |
70 70 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
71 71
72 72 ## Fréquence & budgets
@@ -82,19 +82,19 @@ Complétude mesurée sur les **370 événements actifs** de la source ; exemples
82 82
83 83 ## Volumétrie & complétude live
84 84
85 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
85 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
86 86
87 - **Événements en base** : 372 (dont **370 actifs**)
88 - **GPS** : 370/370 actifs (100 %)
89 - **Prix** : 4/370 actifs (1 %)
90 - **Heure (start_time)** : 369/370 actifs (100 %)
91 - **Heure de fin** : 0/370 actifs (0 %)
92 - **Statut (annulé/reporté/complet)** : 0/370 actifs (0 %)
93 - **Artistes** : 370/370 actifs (100 %)
94 - **Image** : 27/370 actifs (7 %)
95 - **Salle (venue)** : 370/370 actifs (100 %)
96 - **Dernier sync** : 2026-08-19 01:16 — fetched 371, +0 ajoutés, ~371 mis à jour, -0 retirés
97 - **Syncs enregistrés** (sync_log) : 23
87 +- **Événements en base** : 454 (dont **452 actifs**)
88 +- **GPS** : 452/452 actifs (100 %)
89 +- **Prix** : 4/452 actifs (1 %)
90 +- **Heure (start_time)** : 451/452 actifs (100 %)
91 +- **Heure de fin** : 0/452 actifs (0 %)
92 +- **Statut (annulé/reporté/complet)** : 0/452 actifs (0 %)
93 +- **Artistes** : 452/452 actifs (100 %)
94 +- **Image** : 42/452 actifs (9 %)
95 +- **Salle (venue)** : 452/452 actifs (100 %)
96 +- **Dernier sync** : 2026-08-19 01:29 — fetched 453, +82 ajoutés, ~0 mis à jour, -0 retirés
97 +- **Syncs enregistrés** (sync_log) : 24
98 98
99 99 ## Erreurs & dépannage
100 100
@@ -115,4 +115,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
115 115
116 116 Commits touchant `sortika/connectors/bandsintown.py` :
117 117
118 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
118 119 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
added docs/connecteurs/bassaintlaurent.md +109 −0
@@ -0,0 +1,109 @@
1 +# Tourisme Bas-Saint-Laurent — événements (ATR) (`bassaintlaurent`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 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/bassaintlaurent.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Tourisme Bas-Saint-Laurent — événements (ATR)](https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/)
10 +- **Couverture** : Festivals et événements, Bas-Saint-Laurent
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
12 +
13 +## Accès
14 +
15 +- **Type** : tourisme-regional
16 +- **Endpoint** (`BASE`) : `https://www.bassaintlaurent.ca`
17 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
18 +- **Pagination** : aucune (flux unique)
19 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
20 +- **Throttle** : 0.8 s entre requêtes
21 +- **Accès légal** : pages publiques de l'ATR — GET throttlés 0,8 s, identification honnête, lien fiche originale
22 +
23 +<details><summary>En-tête documentaire du connecteur</summary>
24 +
25 +> connectors/bassaintlaurent.py : Tourisme Bas-Saint-Laurent — événements (ATR)
26 +> Source : https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/ —
27 +> WordPress (Bedrock), liste rendue serveur (~27 fiches à venir,
28 +> vérifié 2026-08-19).
29 +> Extraction: cartes .card--type-event (lien, plage de dates FR, titre,
30 +> municipalité, image) + fiches détail incrémentales (cache
31 +> 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 +> Accès : pages publiques de l'ATR, rendu serveur — GET throttlés 0,8 s,
35 +> identification honnête, lien vers la fiche originale.
36 +> Décision : le Bas-Saint-Laurent n'avait que 168 fiches au baseline —
37 +> équilibre régional (04-SOURCES-CANDIDATES §A).
38 +
39 +</details>
40 +
41 +## Champs récupérés → schéma
42 +
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`).
44 +
45 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
46 +|---|---|---|---|
47 +| `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… |
49 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.bassaintlaurent.ca/fr/quoi-faire/evenements/degelis-ta-riviere-tappelle/ |
50 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
51 +| `venue` — Salle (venue) | nom du lieu | 0 % | ∅ |
52 +| `address` — Adresse | adresse civique | 0 % | ∅ |
53 +| `city` — Ville | municipalité | 100 % | Dégelis |
54 +| `region` — Région | région administrative | 100 % | Bas-Saint-Laurent |
55 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 100 % | 47.547957, -68.647141 |
56 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-27 |
57 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-30 |
58 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
59 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
60 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
61 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
62 +| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
63 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
64 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
65 +| `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
66 +| `image` — Image | visuel (og:image ou média source) | 100 % | https://www.bassaintlaurent.ca/app/uploads/2026/07/Image-siteweb-434x337.png |
67 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : horaire (watcher PM2, incrémental)
72 +- **Budgets / plafonds (variables d'environnement)** :
73 +
74 +| Variable | Défaut | Rôle |
75 +|---|---|---|
76 +| `BSL_FICHE_MAX` | `15` | — |
77 +- **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).
78 +
79 +## Volumétrie & complétude live
80 +
81 +*(mesuré le 2026-08-19 02:34 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-19 02:10 — fetched 27, +27 ajoutés, ~0 mis à jour, -0 retirés
93 +- **Syncs enregistrés** (sync_log) : 1
94 +
95 +## Erreurs & dépannage
96 +
97 +Aucune erreur dans `sync_log` pour cette source. ✅
98 +
99 +- Rejouer un sync isolé : `python3 run.py sync --source bassaintlaurent` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='bassaintlaurent' ORDER BY ts DESC LIMIT 5;"`
100 +
101 +## Licence / attribution
102 +
103 +- pages publiques de l'ATR — GET throttlés 0,8 s, identification honnête, lien fiche originale
104 +
105 +## Historique
106 +
107 +- **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.
108 +- **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).
109 +- **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/brossard.md +5 −4
@@ -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-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 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
@@ -81,7 +81,7 @@ Complétude mesurée sur les **150 événements actifs** de la source ; exemples
81 81
82 82 ## Volumétrie & complétude live
83 83
84 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
84 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
85 85
86 86 - **Événements en base** : 264 (dont **150 actifs**)
87 87 - **GPS** : 141/150 actifs (94 %)
@@ -92,8 +92,8 @@ Complétude mesurée sur les **150 événements actifs** de la source ; exemples
92 92 - **Artistes** : 0/150 actifs (0 %)
93 93 - **Image** : 150/150 actifs (100 %)
94 94 - **Salle (venue)** : 141/150 actifs (94 %)
95 - **Dernier sync** : 2026-08-19 01:16 — fetched 264, +0 ajoutés, ~264 mis à jour, -0 retirés
96 - **Syncs enregistrés** (sync_log) : 23
95 +- **Dernier sync** : 2026-08-19 01:30 — fetched 264, +0 ajoutés, ~0 mis à jour, -0 retirés
96 +- **Syncs enregistrés** (sync_log) : 24
97 97
98 98 ## Erreurs & dépannage
99 99
@@ -113,4 +113,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
113 113
114 114 Commits touchant `sortika/connectors/brossard.py` :
115 115
116 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
116 117 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
modified docs/connecteurs/cantonsdelest.md +4 −4
@@ -1,6 +1,6 @@
1 1 # Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie) (`cantonsdelest`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 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/cantonsdelest.py`
6 6
@@ -79,7 +79,7 @@ Complétude mesurée sur les **11 événements actifs** de la source ; exemples
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
82 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
83 83
84 84 - **Événements en base** : 23 (dont **11 actifs**)
85 85 - **GPS** : 10/11 actifs (91 %)
@@ -90,8 +90,8 @@ Complétude mesurée sur les **11 événements actifs** de la source ; exemples
90 90 - **Artistes** : 0/11 actifs (0 %)
91 91 - **Image** : 11/11 actifs (100 %)
92 92 - **Salle (venue)** : 0/11 actifs (0 %)
93 - **Dernier sync** : 2026-08-19 01:16 — fetched 13, +0 ajoutés, ~13 mis à jour, -1 retirés
94 - **Syncs enregistrés** (sync_log) : 20
93 +- **Dernier sync** : 2026-08-19 01:30 — fetched 13, +0 ajoutés, ~0 mis à jour, -0 retirés
94 +- **Syncs enregistrés** (sync_log) : 21
95 95
96 96 ## Erreurs & dépannage
97 97
added docs/connecteurs/clubs-pros.md +46 −0
@@ -0,0 +1,46 @@
1 +# Clubs professionnels (CF Montréal, Alouettes, Rocket, Victoire…) (`clubs-pros`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : abandonnee** · Type : `sport` · Connecteur : *aucun (source sans connecteur runtime)*
6 +
7 +## Description
8 +
9 +- **Source** : [Clubs professionnels (CF Montréal, Alouettes, Rocket, Victoire…)](https://www.cfmontreal.com/)
10 +- **Couverture** : Montréal/Laval (MLS, LCF, AHL, LPHF)
11 +- **Extraction** : n/d
12 +- **Note** : ÉCARTÉE 2026-08-19 (Phase 3) : les matchs à domicile passent déjà par les billetteries connectées (evenko/ticketmaster : Canadiens 74 fiches, Remparts 31…) — des connecteurs de ligue dédiés (MLS/LCF/AHL) apporteraient surtout des doublons pour ~150 fiches nettes/an. La LHJMQ, elle, est connectée (vrai levier régional). À revisiter si un besoin statut/heure officiel apparaît.
13 +
14 +## Accès
15 +
16 +- **Type** : sport
17 +- **Endpoint** : voir URL source (https://www.cfmontreal.com/)
18 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
19 +- **Accès légal** : n/d
20 +
21 +## Champs récupérés → schéma
22 +
23 +*Aucun événement actif en base pour cette source — pas de schéma live à montrer.*
24 +
25 +## Fréquence & budgets
26 +
27 +- **Cadence** : n/d
28 +- **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).
29 +
30 +## Volumétrie & complétude live
31 +
32 +*Source sans connecteur runtime : aucune donnée en base.*
33 +
34 +## Erreurs & dépannage
35 +
36 +
37 +## Licence / attribution
38 +
39 +- n/d
40 +
41 +## Historique
42 +
43 +- **Source abandonnée** — ÉCARTÉE 2026-08-19 (Phase 3) : les matchs à domicile passent déjà par les billetteries connectées (evenko/ticketmaster : Canadiens 74 fiches, Remparts 31…) — des connecteurs de ligue dédiés (MLS/LCF/AHL) apporteraient surtout des doublons pour ~150 fiches nettes/an. La LHJMQ, elle, est connectée (vrai levier régional). À revisiter si un besoin statut/heure officiel apparaît.
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.
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).
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/evenko.md +7 −6
@@ -1,6 +1,6 @@
1 1 # evenko — grands concerts et festivals (`evenko`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : actif** · Type : `promoteur` · Connecteur : `sortika/connectors/evenko.py`
6 6
@@ -52,7 +52,7 @@ Complétude mesurée sur les **421 événements actifs** de la source ; exemples
52 52 | `address` — Adresse | adresse civique | 0 % | ∅ |
53 53 | `city` — Ville | municipalité | 100 % | Montréal |
54 54 | `region` — Région | région administrative | 100 % | Montréal |
55 | `lat` — GPS (lat/lng) | coordonnées géographiques | 77 % | 45.5106101, -73.5633963 |
55 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 97 % | 45.5106101, -73.5633963 |
56 56 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-17 |
57 57 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-17 |
58 58 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 99 % | 20:00 |
@@ -73,10 +73,10 @@ Complétude mesurée sur les **421 événements actifs** de la source ; exemples
73 73
74 74 ## Volumétrie & complétude live
75 75
76 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
76 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
77 77
78 78 - **Événements en base** : 424 (dont **421 actifs**)
79 - **GPS** : 326/421 actifs (77 %)
79 +- **GPS** : 408/421 actifs (97 %)
80 80 - **Prix** : 0/421 actifs (0 %)
81 81 - **Heure (start_time)** : 418/421 actifs (99 %)
82 82 - **Heure de fin** : 0/421 actifs (0 %)
@@ -84,8 +84,8 @@ Complétude mesurée sur les **421 événements actifs** de la source ; exemples
84 84 - **Artistes** : 418/421 actifs (99 %)
85 85 - **Image** : 421/421 actifs (100 %)
86 86 - **Salle (venue)** : 421/421 actifs (100 %)
87 - **Dernier sync** : 2026-08-19 01:16 — fetched 422, +0 ajoutés, ~422 mis à jour, -0 retirés
88 - **Syncs enregistrés** (sync_log) : 39
87 +- **Dernier sync** : 2026-08-19 01:30 — fetched 422, +0 ajoutés, ~0 mis à jour, -0 retirés
88 +- **Syncs enregistrés** (sync_log) : 40
89 89
90 90 ## Erreurs & dépannage
91 91
@@ -105,6 +105,7 @@ Aucune erreur dans `sync_log` pour cette source. ✅
105 105
106 106 Commits touchant `sortika/connectors/evenko.py` :
107 107
108 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
108 109 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
109 110 - `7d9d1b0` 2026-08-18 Enrichissement des connecteurs + géocodage des salles
110 111 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec
modified docs/connecteurs/eventbrite.md +33 −32
@@ -1,6 +1,6 @@
1 1 # Eventbrite — billetterie libre-service (Québec) (`eventbrite`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/eventbrite.py`
6 6
@@ -46,30 +46,30 @@
46 46
47 47 ## Champs récupérés → schéma
48 48
49 Complétude mesurée sur les **429 événements actifs** de la source ; exemples tirés d'un événement réel (`eventbrite:1992308860433`).
49 +Complétude mesurée sur les **430 événements actifs** de la source ; exemples tirés d'un événement réel (`eventbrite:1985751030788`).
50 50
51 51 | Champ (`events.*`) | Description | Complétude | Exemple réel |
52 52 |---|---|---|---|
53 | `title` — Titre | titre de l'événement | 100 % | Artillery avec Drowning In Blood |
54 | `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Thrash legends Artillery's Made In Hell North American Tour |
55 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.eventbrite.com/e/artillery-avec-drowning-in-blood-tickets-1992308860433 |
56 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique"] |
57 | `venue` — Salle (venue) | nom du lieu | 100 % | Piranha Bar |
58 | `address` — Adresse | adresse civique | 100 % | 680 Rue Sainte-Catherine Ouest |
59 | `city` — Ville | municipalité | 100 % | Montréal |
60 | `region` — Région | région administrative | 99 % | Montréal |
61 | `lat` — GPS (lat/lng) | coordonnées géographiques | 100 % | 45.502852, -73.569942 |
62 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-15 |
63 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-15 |
64 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 100 % | 19:00 |
65 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 100 % | 23:00 |
53 +| `title` — Titre | titre de l'événement | 100 % | Châteauguay : Samedi 07 novembre 2026 - Spectacle hommage aux grandes voix |
54 +| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Châteauguay : Samedi 07 novembre 2026 à 19h30 - Spectacle hommage aux grandes voix avec René Laj… |
55 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.eventbrite.ca/e/billets-chateauguay-samedi-07-novembre-2026-spectacle-hommage-aux-gr… |
56 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["conference"] |
57 +| `venue` — Salle (venue) | nom du lieu | 100 % | Hôtel Manoir D'Youville |
58 +| `address` — Adresse | adresse civique | 100 % | 498 Boulevard D'Youville |
59 +| `city` — Ville | municipalité | 100 % | Châteauguay |
60 +| `region` — Région | région administrative | 99 % | Montérégie |
61 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 100 % | 45.384507, -73.770495 |
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) | 100 % | 19:30 |
65 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 100 % | 21:00 |
66 66 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
67 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 88 % | 0 |
68 | `price_min` — Prix min | tarif minimal réel ($) | 86 % | 32.99 |
69 | `price_label` — Libellé prix | étiquette tarifaire affichable | 88 % | 32.99 $ à 98.98 $ (Eventbrite) |
67 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 87 % | 0 |
68 +| `price_min` — Prix min | tarif minimal réel ($) | 86 % | 60.79 |
69 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 87 % | 60.79 $ (Eventbrite) |
70 70 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
71 | `organizer` — Organisateur | promoteur / organisme | 67 % | 13 Media Concerts |
72 | `image` — Image | visuel (og:image ou média source) | 98 % | https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F1187347149%2F55053021303%2F1%2Forig… |
71 +| `organizer` — Organisateur | promoteur / organisme | 96 % | Productions Marc Gervais Conférence / Spectacle |
72 +| `image` — Image | visuel (og:image ou média source) | 98 % | https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F1180396379%2F242151267944%2F1%2Fori… |
73 73 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
74 74
75 75 ## Fréquence & budgets
@@ -84,19 +84,19 @@ Complétude mesurée sur les **429 événements actifs** de la source ; exemples
84 84
85 85 ## Volumétrie & complétude live
86 86
87 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
87 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
88 88
89 - **Événements en base** : 478 (dont **429 actifs**)
90 - **GPS** : 429/429 actifs (100 %)
91 - **Prix** : 376/429 actifs (88 %)
92 - **Heure (start_time)** : 429/429 actifs (100 %)
93 - **Heure de fin** : 429/429 actifs (100 %)
94 - **Statut (annulé/reporté/complet)** : 0/429 actifs (0 %)
95 - **Artistes** : 0/429 actifs (0 %)
96 - **Image** : 421/429 actifs (98 %)
97 - **Salle (venue)** : 429/429 actifs (100 %)
98 - **Dernier sync** : 2026-08-19 01:26 — fetched 426, +0 ajoutés, ~147 mis à jour, -3 retirés
99 - **Syncs enregistrés** (sync_log) : 21
89 +- **Événements en base** : 478 (dont **430 actifs**)
90 +- **GPS** : 430/430 actifs (100 %)
91 +- **Prix** : 376/430 actifs (87 %)
92 +- **Heure (start_time)** : 430/430 actifs (100 %)
93 +- **Heure de fin** : 430/430 actifs (100 %)
94 +- **Statut (annulé/reporté/complet)** : 0/430 actifs (0 %)
95 +- **Artistes** : 0/430 actifs (0 %)
96 +- **Image** : 422/430 actifs (98 %)
97 +- **Salle (venue)** : 430/430 actifs (100 %)
98 +- **Dernier sync** : 2026-08-19 01:31 — fetched 426, +0 ajoutés, ~124 mis à jour, -2 retirés
99 +- **Syncs enregistrés** (sync_log) : 22
100 100
101 101 ## Erreurs & dépannage
102 102
@@ -116,4 +116,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
116 116
117 117 Commits touchant `sortika/connectors/eventbrite.py` :
118 118
119 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
119 120 - `86b1494` 2026-08-18 Vague 3 : Ticketmaster SANS clé + Eventbrite + Longueuil + Cantons-de-l'Est
added docs/connecteurs/gaspesie.md +46 −0
@@ -0,0 +1,46 @@
1 +# Tourisme Gaspésie — événements (ATR) (`gaspesie`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : abandonnee** · Type : `tourisme-regional` · Connecteur : *aucun (source sans connecteur runtime)*
6 +
7 +## Description
8 +
9 +- **Source** : [Tourisme Gaspésie — événements (ATR)](https://www.tourisme-gaspesie.com/evenements-gaspesie.html)
10 +- **Couverture** : Gaspésie–Îles-de-la-Madeleine
11 +- **Extraction** : n/d
12 +- **Note** : ÉCARTÉE 2026-08-19 (Phase 3) : WAF — 403 sur GET identifié (UA honnête). Région faible (60 fiches au baseline) : candidate prioritaire pour une vague Scrapfly consignée (crédits) ou un partenariat. À re-sonder.
13 +
14 +## Accès
15 +
16 +- **Type** : tourisme-regional
17 +- **Endpoint** : voir URL source (https://www.tourisme-gaspesie.com/evenements-gaspesie.html)
18 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
19 +- **Accès légal** : n/d
20 +
21 +## Champs récupérés → schéma
22 +
23 +*Aucun événement actif en base pour cette source — pas de schéma live à montrer.*
24 +
25 +## Fréquence & budgets
26 +
27 +- **Cadence** : n/d
28 +- **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).
29 +
30 +## Volumétrie & complétude live
31 +
32 +*Source sans connecteur runtime : aucune donnée en base.*
33 +
34 +## Erreurs & dépannage
35 +
36 +
37 +## Licence / attribution
38 +
39 +- n/d
40 +
41 +## Historique
42 +
43 +- **Source abandonnée** — ÉCARTÉE 2026-08-19 (Phase 3) : WAF — 403 sur GET identifié (UA honnête). Région faible (60 fiches au baseline) : candidate prioritaire pour une vague Scrapfly consignée (crédits) ou un partenariat. À re-sonder.
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.
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).
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/gatineau.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Ville de Gatineau — Événements (`gatineau`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : abandonnee** · Type : `municipal` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
added docs/connecteurs/lanaudiere.md +111 −0
@@ -0,0 +1,111 @@
1 +# Tourisme Lanaudière — événements (ATR) (`lanaudiere`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 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/lanaudiere.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Tourisme Lanaudière — événements (ATR)](https://lanaudiere.ca/fr/evenements-lanaudiere)
10 +- **Couverture** : Festivals et événements, Lanaudière
11 +- **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
12 +
13 +## Accès
14 +
15 +- **Type** : tourisme-regional
16 +- **Endpoint** (`BASE`) : `https://lanaudiere.ca`
17 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
18 +- **Pagination** : parcours de sitemap XML
19 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
20 +- **Throttle** : 2.1 s entre requêtes
21 +- **Accès légal** : robots.txt : Disallow /*? + Crawl-delay: 2 — respectés à la lettre (aucun paramètre d'URL, 2,1 s entre GET), identification honnête
22 +
23 +<details><summary>En-tête documentaire du connecteur</summary>
24 +
25 +> connectors/lanaudiere.py : Tourisme Lanaudière — événements (ATR, Phase 3)
26 +> Source : https://lanaudiere.ca/fr/evenements-lanaudiere — CMS Umbraco,
27 +> médias Tourinsoft (mto.media.tourinsoft.eu — même gisement que
28 +> le SIT Québec, recoupement géré par dedup_key). La liste rendue
29 +> serveur ne montre que ~10 cartes (le reste charge en JS) → on
30 +> passe par le SITEMAP officiel (robots.txt), qui publie TOUTES
31 +> les fiches /fr/evenements-lanaudiere/<slug>/ (~44 à venir,
32 +> vérifié 2026-08-19).
33 +> Extraction: sitemap.xml (1 GET) → fiches détail incrémentales (cache
34 +> data/lanaudiere_cache.json, LAN_FICHE_MAX/sync, re-visite 7 j) :
35 +> en-tête structuré member-title-1-1 (titre, plage de dates FR
36 +> « Du 17 au 26 juillet 2026 », municipalité) + og:image +
37 +> og:description. Pas d'heure ni tarif structurés → jamais inventés.
38 +> Accès : robots.txt : « Disallow: /*? » (aucune URL à paramètres
39 +> requêtée) + « Crawl-delay: 2 » → GET séquentiels 2,1 s.
40 +
41 +</details>
42 +
43 +## Champs récupérés → schéma
44 +
45 +Complétude mesurée sur les **44 événements actifs** de la source ; exemples tirés d'un événement réel (`lanaudiere:1804-evenement`).
46 +
47 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
48 +|---|---|---|---|
49 +| `title` — Titre | titre de l'événement | 100 % | 1804, l'événement |
50 +| `description` — Description | texte descriptif (source ou fiche détail) | 5 % | ∅ |
51 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://lanaudiere.ca/fr/evenements-lanaudiere/1804-evenement/ |
52 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
53 +| `venue` — Salle (venue) | nom du lieu | 0 % | ∅ |
54 +| `address` — Adresse | adresse civique | 0 % | ∅ |
55 +| `city` — Ville | municipalité | 100 % | Terrebonne |
56 +| `region` — Région | région administrative | 100 % | Lanaudière |
57 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 0 % | ∅ |
58 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-05 |
59 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-06 |
60 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
61 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
62 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
63 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
64 +| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
65 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
66 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
67 +| `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
68 +| `image` — Image | visuel (og:image ou média source) | 95 % | https://mto.media.tourinsoft.eu/upload/Corpo---SODECT-1804-2019-171.JPG |
69 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
70 +
71 +## Fréquence & budgets
72 +
73 +- **Cadence** : horaire (watcher PM2, incrémental)
74 +- **Budgets / plafonds (variables d'environnement)** :
75 +
76 +| Variable | Défaut | Rôle |
77 +|---|---|---|
78 +| `LAN_FICHE_MAX` | `10` | — |
79 +- **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).
80 +
81 +## Volumétrie & complétude live
82 +
83 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
84 +
85 +- **Événements en base** : 80 (dont **44 actifs**)
86 +- **GPS** : 0/44 actifs (0 %)
87 +- **Prix** : 0/44 actifs (0 %)
88 +- **Heure (start_time)** : 0/44 actifs (0 %)
89 +- **Heure de fin** : 0/44 actifs (0 %)
90 +- **Statut (annulé/reporté/complet)** : 0/44 actifs (0 %)
91 +- **Artistes** : 0/44 actifs (0 %)
92 +- **Image** : 42/44 actifs (95 %)
93 +- **Salle (venue)** : 0/44 actifs (0 %)
94 +- **Dernier sync** : 2026-08-19 02:19 — fetched 80, +80 ajoutés, ~0 mis à jour, -0 retirés
95 +- **Syncs enregistrés** (sync_log) : 1
96 +
97 +## Erreurs & dépannage
98 +
99 +Aucune erreur dans `sync_log` pour cette source. ✅
100 +
101 +- Rejouer un sync isolé : `python3 run.py sync --source lanaudiere` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='lanaudiere' ORDER BY ts DESC LIMIT 5;"`
102 +
103 +## Licence / attribution
104 +
105 +- robots.txt : Disallow /*? + Crawl-delay: 2 — respectés à la lettre (aucun paramètre d'URL, 2,1 s entre GET), identification honnête
106 +
107 +## Historique
108 +
109 +- **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.
110 +- **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).
111 +- **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 ».
added docs/connecteurs/laurentides.md +46 −0
@@ -0,0 +1,46 @@
1 +# Tourisme Laurentides — événements (ATR) (`laurentides`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : abandonnee** · Type : `tourisme-regional` · Connecteur : *aucun (source sans connecteur runtime)*
6 +
7 +## Description
8 +
9 +- **Source** : [Tourisme Laurentides — événements (ATR)](https://www.laurentides.com/fr/quoifaire/evenements)
10 +- **Couverture** : Laurentides
11 +- **Extraction** : n/d
12 +- **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.
13 +
14 +## Accès
15 +
16 +- **Type** : tourisme-regional
17 +- **Endpoint** : voir URL source (https://www.laurentides.com/fr/quoifaire/evenements)
18 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
19 +- **Accès légal** : n/d
20 +
21 +## Champs récupérés → schéma
22 +
23 +*Aucun événement actif en base pour cette source — pas de schéma live à montrer.*
24 +
25 +## Fréquence & budgets
26 +
27 +- **Cadence** : n/d
28 +- **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).
29 +
30 +## Volumétrie & complétude live
31 +
32 +*Source sans connecteur runtime : aucune donnée en base.*
33 +
34 +## Erreurs & dépannage
35 +
36 +
37 +## Licence / attribution
38 +
39 +- n/d
40 +
41 +## Historique
42 +
43 +- **Source abandonnée** — É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.
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.
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).
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/laval.md +6 −4
@@ -1,6 +1,6 @@
1 1 # Ville de Laval — Calendrier des activités (`laval`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : morte-a-la-source** · Type : `donnees-ouvertes` · Connecteur : `sortika/connectors/laval.py`
6 6
@@ -9,6 +9,7 @@
9 9 - **Source** : [Ville de Laval — Calendrier des activités](https://www.donneesquebec.ca/recherche/dataset/calendrier-des-activites)
10 10 - **Couverture** : Activités municipales, Laval
11 11 - **Extraction** : fichier JSON officiel (Données Québec) — EventDate/EndDate publiés en UTC (vérifié 2026-08) → convertis en date + heure locales Québec (minuit local = « toute la journée », pas d'heure) ; détection du préfixe « ANNULÉ - » du titre → statut cancelled (Phase 2)
12 +- **Note** : REMPLACÉE 2026-08-19 (Phase 3) par la source « lavalweb » (calendrier vivant laval.ca).
12 13
13 14 ## Accès
14 15
@@ -66,7 +67,7 @@ Complétude mesurée sur les **1 événements actifs** de la source ; exemples t
66 67
67 68 ## Volumétrie & complétude live
68 69
69 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
70 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
70 71
71 72 - **Événements en base** : 277 (dont **1 actifs**)
72 73 - **GPS** : 0/1 actifs (0 %)
@@ -77,8 +78,8 @@ Complétude mesurée sur les **1 événements actifs** de la source ; exemples t
77 78 - **Artistes** : 0/1 actifs (0 %)
78 79 - **Image** : 1/1 actifs (100 %)
79 80 - **Salle (venue)** : 0/1 actifs (0 %)
80 - **Dernier sync** : 2026-08-19 01:17 — fetched 293, +0 ajoutés, ~293 mis à jour, -0 retirés
81 - **Syncs enregistrés** (sync_log) : 42
81 +- **Dernier sync** : 2026-08-19 01:31 — fetched 293, +0 ajoutés, ~32 mis à jour, -0 retirés
82 +- **Syncs enregistrés** (sync_log) : 43
82 83
83 84 ## Erreurs & dépannage
84 85
@@ -100,5 +101,6 @@ Aucune erreur dans `sync_log` pour cette source. ✅
100 101
101 102 Commits touchant `sortika/connectors/laval.py` :
102 103
104 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
103 105 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
104 106 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec
added docs/connecteurs/lavalweb.md +111 −0
@@ -0,0 +1,111 @@
1 +# Ville de Laval — calendrier vivant laval.ca (`lavalweb`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/lavalweb.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Ville de Laval — calendrier vivant laval.ca](https://www.laval.ca/calendrier-activites/)
10 +- **Couverture** : Activités municipales, Laval (remplace le jeu Données Québec mort à la source depuis 2025-12)
11 +- **Extraction** : listes SSR paginées (cartes .event-item : date FR « 18 août 2026 | 18 h » → date + heure, titre, lieu, lien, image lazy) + fiches détail incrémentales (cache data/lavalweb_cache.json, LAVALWEB_FICHE_MAX/sync, re-visite 7 j) : og:description ; GPS via annuaire de salles + géocodeur
12 +
13 +## Accès
14 +
15 +- **Type** : municipal
16 +- **Endpoint** (`BASE`) : `https://www.laval.ca`
17 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
18 +- **Pagination** : par numéro de page
19 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
20 +- **Throttle** : 0.5 s entre requêtes
21 +- **Accès légal** : robots.txt laval.ca : Disallow /wp-admin/ seulement — pages calendrier publiques, GET throttlés 0,5 s, identification honnête
22 +
23 +<details><summary>En-tête documentaire du connecteur</summary>
24 +
25 +> connectors/lavalweb.py : Ville de Laval — calendrier VIVANT laval.ca (Phase 3)
26 +> Remplace la source « laval » (jeu Données Québec MORT À LA SOURCE depuis
27 +> 2025-12, consigné Phase 2). L'ancien connecteur reste branché (réveil
28 +> automatique si la Ville republie) ; le recoupement éventuel est géré par
29 +> dedup_key.
30 +> Source : https://www.laval.ca/calendrier-activites/ — WordPress, listes
31 +> rendues serveur, pagination ?findstr[group]=events&findstr[page]=N
32 +> (~58 pages × 8 cartes ≈ 460 activités à venir, vérifié 2026-08-19).
33 +> Extraction: cartes .event-item (date FR « 18 août 2026 | 18 h », titre,
34 +> lieu, lien, image lazy) + fiches détail incrémentales (cache
35 +> data/lavalweb_cache.json, LAVALWEB_FICHE_MAX/sync, re-visite
36 +> 7 j) : og:description. GPS via annuaire de salles/géocodeur.
37 +> Accès : robots.txt laval.ca : « Disallow: /wp-admin/ » seulement — les
38 +> pages calendrier sont libres. GET throttlés 0,5 s, UA honnête.
39 +
40 +</details>
41 +
42 +## Champs récupérés → schéma
43 +
44 +Complétude mesurée sur les **470 événements actifs** de la source ; exemples tirés d'un événement réel (`lavalweb:cardio-fit-dehors-isabelle-2026-08-19`).
45 +
46 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
47 +|---|---|---|---|
48 +| `title` — Titre | titre de l'événement | 100 % | Cardio-fit |
49 +| `description` — Description | texte descriptif (source ou fiche détail) | 5 % | ∅ |
50 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.laval.ca/calendrier-activites/cardio-fit-dehors-isabelle-2026-08-19/ |
51 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
52 +| `venue` — Salle (venue) | nom du lieu | 100 % | Parc Isabelle |
53 +| `address` — Adresse | adresse civique | 0 % | ∅ |
54 +| `city` — Ville | municipalité | 100 % | Laval |
55 +| `region` — Région | région administrative | 100 % | Laval |
56 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 74 % | 45.5676014, -73.8151736 |
57 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
58 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
59 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 98 % | 09:00 |
60 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
61 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
62 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
63 +| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
64 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
65 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
66 +| `organizer` — Organisateur | promoteur / organisme | 100 % | Ville de Laval |
67 +| `image` — Image | visuel (og:image ou média source) | 0 % | ∅ |
68 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
69 +
70 +## Fréquence & budgets
71 +
72 +- **Cadence** : horaire (watcher PM2, incrémental)
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut | Rôle |
76 +|---|---|---|
77 +| `LAVALWEB_PAGES_MAX` | `60` | — |
78 +| `LAVALWEB_FICHE_MAX` | `30` | — |
79 +- **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).
80 +
81 +## Volumétrie & complétude live
82 +
83 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
84 +
85 +- **Événements en base** : 470 (dont **470 actifs**)
86 +- **GPS** : 349/470 actifs (74 %)
87 +- **Prix** : 0/470 actifs (0 %)
88 +- **Heure (start_time)** : 460/470 actifs (98 %)
89 +- **Heure de fin** : 0/470 actifs (0 %)
90 +- **Statut (annulé/reporté/complet)** : 0/470 actifs (0 %)
91 +- **Artistes** : 0/470 actifs (0 %)
92 +- **Image** : 0/470 actifs (0 %)
93 +- **Salle (venue)** : 470/470 actifs (100 %)
94 +- **Dernier sync** : 2026-08-19 02:14 — fetched 470, +470 ajoutés, ~0 mis à jour, -0 retirés
95 +- **Syncs enregistrés** (sync_log) : 1
96 +
97 +## Erreurs & dépannage
98 +
99 +Aucune erreur dans `sync_log` pour cette source. ✅
100 +
101 +- Rejouer un sync isolé : `python3 run.py sync --source lavalweb` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='lavalweb' ORDER BY ts DESC LIMIT 5;"`
102 +
103 +## Licence / attribution
104 +
105 +- robots.txt laval.ca : Disallow /wp-admin/ seulement — pages calendrier publiques, GET throttlés 0,5 s, identification honnête
106 +
107 +## Historique
108 +
109 +- **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.
110 +- **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).
111 +- **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/lavitrine.md +26 −25
@@ -1,6 +1,6 @@
1 1 # La Vitrine culturelle (`lavitrine`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/lavitrine.py`
6 6
@@ -43,22 +43,22 @@
43 43
44 44 ## Champs récupérés → schéma
45 45
46 Complétude mesurée sur les **5087 événements actifs** de la source ; exemples tirés d'un événement réel (`lavitrine:19959-2026-12-18`).
46 +Complétude mesurée sur les **5086 événements actifs** de la source ; exemples tirés d'un événement réel (`lavitrine:7561-2026-08-20`).
47 47
48 48 | Champ (`events.*`) | Description | Complétude | Exemple réel |
49 49 |---|---|---|---|
50 | `title` — Titre | titre de l'événement | 100 % | Exterio |
51 | `description` — Description | texte descriptif (source ou fiche détail) | 51 % | C’est en 1992 que le groupe EXTERIO fait son apparition dans la banlieue montréalaise de l’Île-B… |
52 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.lavitrine.com/fr/evenement/exterio/19959 |
50 +| `title` — Titre | titre de l'événement | 100 % | Pink Floyd - The Dark Side of the Moon |
51 +| `description` — Description | texte descriptif (source ou fiche détail) | 71 % | Après avoir conquis des millions de spectateurs à travers le monde, Hubblo et le Théâtre Manuvie… |
52 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.lavitrine.com/fr/evenement/pink-floyd-dark-side-of-the-moon/7561 |
53 53 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
54 | `venue` — Salle (venue) | nom du lieu | 100 % | Grizzly Fuzz |
54 +| `venue` — Salle (venue) | nom du lieu | 100 % | Le Dome |
55 55 | `address` — Adresse | adresse civique | 0 % | ∅ |
56 | `city` — Ville | municipalité | 100 % | Québec |
57 | `region` — Région | région administrative | 100 % | Capitale-Nationale |
58 | `lat` — GPS (lat/lng) | coordonnées géographiques | 52 % | 46.8132333, -71.2279284 |
59 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-12-18 |
60 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-12-18 |
61 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 51 % | 20:00 |
56 +| `city` — Ville | municipalité | 100 % | Brossard |
57 +| `region` — Région | région administrative | 100 % | Montérégie |
58 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 69 % | 45.441097, -73.440315 |
59 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-20 |
60 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-20 |
61 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 71 % | 17:30 |
62 62 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
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 % | ∅ |
@@ -66,7 +66,7 @@ Complétude mesurée sur les **5087 événements actifs** de la source ; exemple
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 | 0 % | ∅ |
69 | `image` — Image | visuel (og:image ou média source) | 100 % | https://lvc-medias.lavitrine.com/7a937ee1-0e46-5c6c-9e97-1e995767315d.jpg |
69 +| `image` — Image | visuel (og:image ou média source) | 100 % | https://lvc-medias.lavitrine.com/3c48bccd-aa63-5048-9a3d-48e07d4b48e6.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 **5087 événements actifs** de la source ; exemple
81 81
82 82 ## Volumétrie & complétude live
83 83
84 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
84 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
85 85
86 - **Événements en base** : 5145 (dont **5087 actifs**)
87 - **GPS** : 2660/5087 actifs (52 %)
88 - **Prix** : 0/5087 actifs (0 %)
89 - **Heure (start_time)** : 2609/5087 actifs (51 %)
90 - **Heure de fin** : 0/5087 actifs (0 %)
91 - **Statut (annulé/reporté/complet)** : 0/5087 actifs (0 %)
92 - **Artistes** : 0/5087 actifs (0 %)
93 - **Image** : 5087/5087 actifs (100 %)
94 - **Salle (venue)** : 5085/5087 actifs (100 %)
95 - **Dernier sync** : 2026-08-19 01:21 — fetched 5127, +1 ajoutés, ~1570 mis à jour, -0 retirés
96 - **Syncs enregistrés** (sync_log) : 33
86 +- **Événements en base** : 5145 (dont **5086 actifs**)
87 +- **GPS** : 3509/5086 actifs (69 %)
88 +- **Prix** : 0/5086 actifs (0 %)
89 +- **Heure (start_time)** : 3627/5086 actifs (71 %)
90 +- **Heure de fin** : 0/5086 actifs (0 %)
91 +- **Statut (annulé/reporté/complet)** : 0/5086 actifs (0 %)
92 +- **Artistes** : 0/5086 actifs (0 %)
93 +- **Image** : 5086/5086 actifs (100 %)
94 +- **Salle (venue)** : 5084/5086 actifs (100 %)
95 +- **Dernier sync** : 2026-08-19 01:31 — fetched 5123, +0 ajoutés, ~1019 mis à jour, -1 retirés
96 +- **Syncs enregistrés** (sync_log) : 34
97 97
98 98 ## Erreurs & dépannage
99 99
@@ -114,4 +114,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
114 114
115 115 Commits touchant `sortika/connectors/lavitrine.py` :
116 116
117 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
117 118 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec
modified docs/connecteurs/lepointdevente.md +6 −6
@@ -1,6 +1,6 @@
1 1 # Le point de vente — billetterie québécoise (`lepointdevente`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/lepointdevente.py`
6 6
@@ -56,7 +56,7 @@ Complétude mesurée sur les **1786 événements actifs** de la source ; exemple
56 56 | `address` — Adresse | adresse civique | 0 % | ∅ |
57 57 | `city` — Ville | municipalité | 100 % | Fossambault-sur-le-Lac |
58 58 | `region` — Région | région administrative | 98 % | Capitale-Nationale |
59 | `lat` — GPS (lat/lng) | coordonnées géographiques | 27 % | 46.8903229, -71.6121222 |
59 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 31 % | 46.8903229, -71.6121222 |
60 60 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-26 |
61 61 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-26 |
62 62 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 94 % | 20:00 |
@@ -82,10 +82,10 @@ Complétude mesurée sur les **1786 événements actifs** de la source ; exemple
82 82
83 83 ## Volumétrie & complétude live
84 84
85 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
85 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
86 86
87 87 - **Événements en base** : 4237 (dont **1786 actifs**)
88 - **GPS** : 486/1786 actifs (27 %)
88 +- **GPS** : 547/1786 actifs (31 %)
89 89 - **Prix** : 1647/1786 actifs (92 %)
90 90 - **Heure (start_time)** : 1673/1786 actifs (94 %)
91 91 - **Heure de fin** : 0/1786 actifs (0 %)
@@ -93,8 +93,8 @@ Complétude mesurée sur les **1786 événements actifs** de la source ; exemple
93 93 - **Artistes** : 16/1786 actifs (1 %)
94 94 - **Image** : 1786/1786 actifs (100 %)
95 95 - **Salle (venue)** : 1776/1786 actifs (99 %)
96 - **Dernier sync** : 2026-08-19 01:19 — fetched 1787, +0 ajoutés, ~1787 mis à jour, -2 retirés
97 - **Syncs enregistrés** (sync_log) : 43
96 +- **Dernier sync** : 2026-08-19 01:32 — fetched 1787, +0 ajoutés, ~4 mis à jour, -0 retirés
97 +- **Syncs enregistrés** (sync_log) : 44
98 98
99 99 ## Erreurs & dépannage
100 100
modified docs/connecteurs/levis.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Ville de Lévis — Calendrier (`levis`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : abandonnee** · Type : `municipal` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
added docs/connecteurs/lhjmq.md +108 −0
@@ -0,0 +1,108 @@
1 +# LHJMQ — matchs des équipes québécoises (`lhjmq`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : actif** · Type : `sport` · Connecteur : `sortika/connectors/lhjmq.py`
6 +
7 +## Description
8 +
9 +- **Source** : [LHJMQ — matchs des équipes québécoises](https://theqmjhl.ca/)
10 +- **Couverture** : ~384 matchs/saison à domicile au Québec, 12 villes dans 10 régions
11 +- **Extraction** : API modulekit (view=seasons puis view=schedule) : matchs à domicile au Québec seulement → titre « LHJMQ : Visiteur c. Receveur », date + heure locales, aréna, ville, statut annulé si publié ; prix non publié → jamais inventé
12 +
13 +## Accès
14 +
15 +- **Type** : sport
16 +- **Endpoint** (`FEED`) : `https://lscluster.hockeytech.com/feed/?feed=modulekit&view={view}&key=f322673b6bcae299&fmt=json&client_code=lhjmq&lang=fr{extra}`
17 +- **Endpoint** (`GAME_URL`) : `https://theqmjhl.ca/gamecentre/{gid}`
18 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
19 +- **Pagination** : aucune (flux unique)
20 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
21 +- **Throttle** : 1.0 s entre requêtes
22 +- **Accès légal** : flux JSON public qui motorise le site officiel de la ligue — usage index + lien fiche de match officielle (theqmjhl.ca/gamecentre/<id>), GET throttlés 1 s, identification honnête
23 +
24 +<details><summary>En-tête documentaire du connecteur</summary>
25 +
26 +> connectors/lhjmq.py : LHJMQ — matchs des 12 équipes québécoises (Phase 3)
27 +> Source : API HockeyTech « modulekit » (lscluster.hockeytech.com) — le
28 +> flux JSON public qui motorise le site officiel theqmjhl.ca
29 +> (clé publique embarquée dans les sites de la ligue, largement
30 +> documentée). 2 GET/sync : saisons + calendrier de la saison
31 +> courante (~580 matchs, dont ~384 à domicile au Québec,
32 +> vérifié 2026-08-19 pour 2026-27).
33 +> Extraction: date + heure locale exactes, aréna (venue_name), équipes,
34 +> statut. Seuls les matchs À DOMICILE au Québec sont publiés
35 +> (Chicoutimi, Baie-Comeau, Victoriaville, Blainville-Boisbriand,
36 +> Sherbrooke, Gatineau, Québec, Rouyn-Noranda, Rimouski,
37 +> Val-d'Or, Shawinigan, Drummondville). Prix non publié par la
38 +> ligue → jamais inventé. Lien = fiche de match officielle.
39 +> Accès : usage index + lien vers theqmjhl.ca ; GET throttlés,
40 +> identification honnête. Couverture régionale forte
41 +> (Abitibi, Côte-Nord, Bas-Saint-Laurent, Saguenay…).
42 +
43 +</details>
44 +
45 +## Champs récupérés → schéma
46 +
47 +Complétude mesurée sur les **421 événements actifs** de la source ; exemples tirés d'un événement réel (`lhjmq:32601`).
48 +
49 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
50 +|---|---|---|---|
51 +| `title` — Titre | titre de l'événement | 100 % | LHJMQ : Voltigeurs (Drummondville) c. Cataractes (Shawinigan) |
52 +| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Match de la Ligue de hockey junior Maritimes Québec (LHJMQ) — Voltigeurs (Drummondville) en visi… |
53 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://theqmjhl.ca/gamecentre/32601 |
54 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["sport"] |
55 +| `venue` — Salle (venue) | nom du lieu | 100 % | Aréna de Grand-Mère |
56 +| `address` — Adresse | adresse civique | 0 % | ∅ |
57 +| `city` — Ville | municipalité | 100 % | Shawinigan |
58 +| `region` — Région | région administrative | 100 % | Mauricie |
59 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 99 % | 46.6119958, -72.6893595 |
60 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-21 |
61 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-21 |
62 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 100 % | 15:00 |
63 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
64 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
65 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
66 +| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
67 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
68 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
69 +| `organizer` — Organisateur | promoteur / organisme | 100 % | LHJMQ |
70 +| `image` — Image | visuel (og:image ou média source) | 0 % | ∅ |
71 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
72 +
73 +## Fréquence & budgets
74 +
75 +- **Cadence** : horaire (watcher PM2)
76 +- **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).
77 +
78 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
81 +
82 +- **Événements en base** : 423 (dont **421 actifs**)
83 +- **GPS** : 415/421 actifs (99 %)
84 +- **Prix** : 0/421 actifs (0 %)
85 +- **Heure (start_time)** : 421/421 actifs (100 %)
86 +- **Heure de fin** : 0/421 actifs (0 %)
87 +- **Statut (annulé/reporté/complet)** : 0/421 actifs (0 %)
88 +- **Artistes** : 0/421 actifs (0 %)
89 +- **Image** : 0/421 actifs (0 %)
90 +- **Salle (venue)** : 421/421 actifs (100 %)
91 +- **Dernier sync** : 2026-08-19 02:10 — fetched 423, +423 ajoutés, ~0 mis à jour, -0 retirés
92 +- **Syncs enregistrés** (sync_log) : 1
93 +
94 +## Erreurs & dépannage
95 +
96 +Aucune erreur dans `sync_log` pour cette source. ✅
97 +
98 +- Rejouer un sync isolé : `python3 run.py sync --source lhjmq` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='lhjmq' ORDER BY ts DESC LIMIT 5;"`
99 +
100 +## Licence / attribution
101 +
102 +- flux JSON public qui motorise le site officiel de la ligue — usage index + lien fiche de match officielle (theqmjhl.ca/gamecentre/<id>), GET throttlés 1 s, identification honnête
103 +
104 +## Historique
105 +
106 +- **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.
107 +- **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).
108 +- **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/longueuil.md +5 −4
@@ -1,6 +1,6 @@
1 1 # Ville de Longueuil — Événements (nouveau portail) (`longueuil`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 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/longueuil.py`
6 6
@@ -81,7 +81,7 @@ Complétude mesurée sur les **4 événements actifs** de la source ; exemples t
81 81
82 82 ## Volumétrie & complétude live
83 83
84 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
84 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
85 85
86 86 - **Événements en base** : 9 (dont **4 actifs**)
87 87 - **GPS** : 3/4 actifs (75 %)
@@ -92,8 +92,8 @@ Complétude mesurée sur les **4 événements actifs** de la source ; exemples t
92 92 - **Artistes** : 0/4 actifs (0 %)
93 93 - **Image** : 4/4 actifs (100 %)
94 94 - **Salle (venue)** : 0/4 actifs (0 %)
95 - **Dernier sync** : 2026-08-19 01:19 — fetched 9, +0 ajoutés, ~9 mis à jour, -0 retirés
96 - **Syncs enregistrés** (sync_log) : 20
95 +- **Dernier sync** : 2026-08-19 01:32 — fetched 9, +0 ajoutés, ~0 mis à jour, -0 retirés
96 +- **Syncs enregistrés** (sync_log) : 21
97 97
98 98 ## Erreurs & dépannage
99 99
@@ -113,4 +113,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
113 113
114 114 Commits touchant `sortika/connectors/longueuil.py` :
115 115
116 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
116 117 - `86b1494` 2026-08-18 Vague 3 : Ticketmaster SANS clé + Eventbrite + Longueuil + Cantons-de-l'Est
added docs/connecteurs/mauricie.md +46 −0
@@ -0,0 +1,46 @@
1 +# Tourisme Mauricie — événements (ATR) (`mauricie`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : abandonnee** · Type : `tourisme-regional` · Connecteur : *aucun (source sans connecteur runtime)*
6 +
7 +## Description
8 +
9 +- **Source** : [Tourisme Mauricie — événements (ATR)](https://tourismemauricie.com/evenements)
10 +- **Couverture** : Mauricie
11 +- **Extraction** : n/d
12 +- **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.
13 +
14 +## Accès
15 +
16 +- **Type** : tourisme-regional
17 +- **Endpoint** : voir URL source (https://tourismemauricie.com/evenements)
18 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
19 +- **Accès légal** : n/d
20 +
21 +## Champs récupérés → schéma
22 +
23 +*Aucun événement actif en base pour cette source — pas de schéma live à montrer.*
24 +
25 +## Fréquence & budgets
26 +
27 +- **Cadence** : n/d
28 +- **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).
29 +
30 +## Volumétrie & complétude live
31 +
32 +*Source sans connecteur runtime : aucune donnée en base.*
33 +
34 +## Erreurs & dépannage
35 +
36 +
37 +## Licence / attribution
38 +
39 +- n/d
40 +
41 +## Historique
42 +
43 +- **Source abandonnée** — É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.
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.
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).
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/montreal.md +20 −19
@@ -1,6 +1,6 @@
1 1 # Ville de Montréal — Événements publics (`montreal`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : actif** · Type : `donnees-ouvertes` · Connecteur : `sortika/connectors/montreal.py`
6 6
@@ -37,29 +37,29 @@
37 37
38 38 ## Champs récupérés → schéma
39 39
40 Complétude mesurée sur les **3291 événements actifs** de la source ; exemples tirés d'un événement réel (`montreal:seance-du-conseil-darrondissement-de-ville-marie-de-novembre-39866`).
40 +Complétude mesurée sur les **3291 événements actifs** de la source ; exemples tirés d'un événement réel (`montreal:les-legendaires-cine-ete-111611`).
41 41
42 42 | Champ (`events.*`) | Description | Complétude | Exemple réel |
43 43 |---|---|---|---|
44 | `title` — Titre | titre de l'événement | 100 % | Séance du conseil d'arrondissement de Ville-Marie de novembre |
45 | `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Participez à la vie démocratique de Ville-Marie et assistez au conseil d’arrondissement du 10 no… |
46 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://montreal.ca/evenements/seance-du-conseil-darrondissement-de-ville-marie-de-novembre-3986… |
47 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["communautaire"] |
48 | `venue` — Salle (venue) | nom du lieu | 5 % | Salle du conseil d'arrondissement |
49 | `address` — Adresse | adresse civique | 5 % | 800, boulevard De Maisonneuve Est, rez-de-chaussée |
44 +| `title` — Titre | titre de l'événement | 100 % | Les Légendaires – Ciné-été |
45 +| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Découvrez cette adaptation cinématographique des bandes dessinées de Patrick Sobral, réalisée pa… |
46 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://montreal.ca/evenements/les-legendaires-cine-ete-111611 |
47 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["cinema"] |
48 +| `venue` — Salle (venue) | nom du lieu | 5 % | Cinéma Beaubien |
49 +| `address` — Adresse | adresse civique | 5 % | 2396 Rue Beaubien E |
50 50 | `city` — Ville | municipalité | 100 % | Montréal |
51 51 | `region` — Région | région administrative | 100 % | Montréal |
52 | `lat` — GPS (lat/lng) | coordonnées géographiques | 99 % | 45.516518, -73.559733 |
53 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-11-10 |
54 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-11-10 |
55 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 100 % | 18:30 |
56 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 9 % | 18:30 |
52 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 99 % | 45.548115, -73.5921 |
53 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-22 |
54 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-22 |
55 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 100 % | 09:30 |
56 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 18 % | 11:05 |
57 57 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
58 58 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 100 % | 1 |
59 59 | `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
60 | `price_label` — Libellé prix | étiquette tarifaire affichable | 100 % | Gratuit — Entrée libre |
60 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 100 % | Gratuit — Avec billet |
61 61 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
62 | `organizer` — Organisateur | promoteur / organisme | 100 % | Ville de Montréal — Ville-Marie |
62 +| `organizer` — Organisateur | promoteur / organisme | 100 % | Ville de Montréal — Rosemont–La Petite-Patrie |
63 63 | `image` — Image | visuel (og:image ou média source) | 100 % | https://res.cloudinary.com/villemontreal/image/upload/w_1200,h_630,c_fill/f_auto,dpr_auto,q_auto… |
64 64 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
65 65
@@ -75,19 +75,19 @@ Complétude mesurée sur les **3291 événements actifs** de la source ; exemple
75 75
76 76 ## Volumétrie & complétude live
77 77
78 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
78 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
79 79
80 80 - **Événements en base** : 5809 (dont **3291 actifs**)
81 81 - **GPS** : 3253/3291 actifs (99 %)
82 82 - **Prix** : 3291/3291 actifs (100 %)
83 83 - **Heure (start_time)** : 3277/3291 actifs (100 %)
84 - **Heure de fin** : 288/3291 actifs (9 %)
84 +- **Heure de fin** : 588/3291 actifs (18 %)
85 85 - **Statut (annulé/reporté/complet)** : 0/3291 actifs (0 %)
86 86 - **Artistes** : 0/3291 actifs (0 %)
87 87 - **Image** : 3291/3291 actifs (100 %)
88 88 - **Salle (venue)** : 160/3291 actifs (5 %)
89 - **Dernier sync** : 2026-08-19 01:19 — fetched 5686, +0 ajoutés, ~5686 mis à jour, -0 retirés
90 - **Syncs enregistrés** (sync_log) : 43
89 +- **Dernier sync** : 2026-08-19 01:33 — fetched 5686, +0 ajoutés, ~300 mis à jour, -0 retirés
90 +- **Syncs enregistrés** (sync_log) : 44
91 91
92 92 ## Erreurs & dépannage
93 93
@@ -114,6 +114,7 @@ Erreurs relevées dans `sync_log` :
114 114
115 115 Commits touchant `sortika/connectors/montreal.py` :
116 116
117 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
117 118 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
118 119 - `7d9d1b0` 2026-08-18 Enrichissement des connecteurs + géocodage des salles
119 120 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec
added docs/connecteurs/outaouais.md +106 −0
@@ -0,0 +1,106 @@
1 +# Tourisme Outaouais — calendrier des événements (ATR) (`outaouais`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 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/outaouais.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Tourisme Outaouais — calendrier des événements (ATR)](https://tourismeoutaouais.com/calendrier-des-evenements)
10 +- **Couverture** : Festivals et événements, Outaouais (337 fiches seulement au baseline régional)
11 +- **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
12 +
13 +## Accès
14 +
15 +- **Type** : tourisme-regional
16 +- **Endpoint** (`BASE`) : `https://tourismeoutaouais.com`
17 +- **Endpoint** (`ADMIN`) : `https://admin.tourismeoutaouais.com`
18 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
19 +- **Pagination** : aucune (flux unique)
20 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
21 +- **Throttle** : 0.8 s entre requêtes
22 +- **Accès légal** : robots.txt : User-agent: * / Allow: / — GET direct throttlé 0,8 s, identification honnête, lien vers la fiche/site officiel
23 +
24 +<details><summary>En-tête documentaire du connecteur</summary>
25 +
26 +> connectors/outaouais.py : Tourisme Outaouais — calendrier des événements (ATR)
27 +> Source : https://tourismeoutaouais.com/calendrier-des-evenements — site
28 +> Astro : la page embarque TOUT le calendrier dans les props
29 +> sérialisées de l'îlot <astro-island CalendrierDesEvenements>
30 +> (162 événements dont 25 à venir, vérifié 2026-08-19) →
31 +> UNE SEULE requête par sync.
32 +> Extraction: props JSON (format Svelte [type, valeur] déballé) : id, titre,
33 +> slug/url (interne /attraits/<slug> ou site officiel externe),
34 +> municipalité, territoire, photo (CDN admin.tourismeoutaouais.com),
35 +> startDate/endDate ISO. Pas d'heure ni de tarif publiés → jamais
36 +> inventés. GPS via annuaire de salles/géocodeur central.
37 +> Accès : robots.txt « Allow: / » — GET direct, identification honnête.
38 +> Décision : comble l'échec Gatineau (site 100 % JS, consigné 2026-08-18) —
39 +> l'Outaouais n'avait que 337 fiches au baseline Phase 3.
40 +
41 +</details>
42 +
43 +## Champs récupérés → schéma
44 +
45 +Complétude mesurée sur les **27 événements actifs** de la source ; exemples tirés d'un événement réel (`outaouais:6a680428b2fca6a632e1e46b`).
46 +
47 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
48 +|---|---|---|---|
49 +| `title` — Titre | titre de l'événement | 100 % | La marche Maple Leaf |
50 +| `description` — Description | texte descriptif (source ou fiche détail) | 0 % | ∅ |
51 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://tourismeoutaouais.com/attraits/la-marche-maple-leaf |
52 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["marche-foire"] |
53 +| `venue` — Salle (venue) | nom du lieu | 0 % | ∅ |
54 +| `address` — Adresse | adresse civique | 0 % | ∅ |
55 +| `city` — Ville | municipalité | 59 % | ∅ |
56 +| `region` — Région | région administrative | 100 % | Outaouais |
57 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 0 % | ∅ |
58 +| `start_date` — Date début | date locale AAAA-MM-JJ | 93 % | 2026-10-09 |
59 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 93 % | 2026-10-11 |
60 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
61 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
62 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
63 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
64 +| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
65 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
66 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
67 +| `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
68 +| `image` — Image | visuel (og:image ou média source) | 96 % | https://admin.tourismeoutaouais.com/api/photos/file/ld-la-marche-maple-leaf-la-marche-maple-leaf… |
69 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
70 +
71 +## Fréquence & budgets
72 +
73 +- **Cadence** : horaire (watcher PM2)
74 +- **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).
75 +
76 +## Volumétrie & complétude live
77 +
78 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
79 +
80 +- **Événements en base** : 162 (dont **27 actifs**)
81 +- **GPS** : 0/27 actifs (0 %)
82 +- **Prix** : 0/27 actifs (0 %)
83 +- **Heure (start_time)** : 0/27 actifs (0 %)
84 +- **Heure de fin** : 0/27 actifs (0 %)
85 +- **Statut (annulé/reporté/complet)** : 0/27 actifs (0 %)
86 +- **Artistes** : 0/27 actifs (0 %)
87 +- **Image** : 26/27 actifs (96 %)
88 +- **Salle (venue)** : 0/27 actifs (0 %)
89 +- **Dernier sync** : 2026-08-19 02:19 — fetched 162, +0 ajoutés, ~3 mis à jour, -0 retirés
90 +- **Syncs enregistrés** (sync_log) : 2
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source. ✅
95 +
96 +- Rejouer un sync isolé : `python3 run.py sync --source outaouais` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='outaouais' ORDER BY ts DESC LIMIT 5;"`
97 +
98 +## Licence / attribution
99 +
100 +- robots.txt : User-agent: * / Allow: / — GET direct throttlé 0,8 s, identification honnête, lien vers la fiche/site officiel
101 +
102 +## Historique
103 +
104 +- **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.
105 +- **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).
106 +- **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 ».
added docs/connecteurs/placedesarts.md +113 −0
@@ -0,0 +1,113 @@
1 +# Place des Arts — calendrier multi-salles (`placedesarts`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : actif** · Type : `salle-de-spectacle` · Connecteur : `sortika/connectors/placedesarts.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Place des Arts — calendrier multi-salles](https://www.placedesarts.com/programmation)
10 +- **Couverture** : Spectacles des 6 salles de la Place des Arts, Montréal (~97 spectacles, plusieurs centaines de séances)
11 +- **Extraction** : liste /programmation (1 GET) → fiches /evenement/<slug> incrémentales (cache data/placedesarts_cache.json, PDA_FICHE_MAX/sync, re-visite 7 j) : une fiche Sorti-Ka PAR représentation (date + heure + prix réels), salle précise, producteur → organisateur, discipline → catégories
12 +
13 +## Accès
14 +
15 +- **Type** : salle-de-spectacle
16 +- **Endpoint** (`BASE`) : `https://www.placedesarts.com`
17 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
18 +- **Pagination** : aucune (flux unique)
19 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
20 +- **Throttle** : 0.8 s entre requêtes
21 +- **Accès légal** : robots.txt : Disallow /cpresources/ /vendor/ /cache/ seulement — GET throttlés 0,8 s, identification honnête, lien billetterie officielle ; recoupement lavitrine/evenko géré par dedup_key
22 +
23 +<details><summary>En-tête documentaire du connecteur</summary>
24 +
25 +> connectors/placedesarts.py : Place des Arts — calendrier multi-salles (Phase 3)
26 +> Source : https://www.placedesarts.com/programmation (Craft CMS) —
27 +> ~97 spectacles à l'affiche sur les 6 salles (Wilfrid-Pelletier,
28 +> Maison symphonique, Théâtre Maisonneuve, Jean-Duceppe,
29 +> Cinquième Salle, Claude-Léveillée), vérifié 2026-08-19.
30 +> Extraction: liste /programmation (1 GET) → fiches /evenement/<slug>
31 +> incrémentales (cache data/placedesarts_cache.json,
32 +> PDA_FICHE_MAX/sync, re-visite 7 j). Chaque fiche embarque :
33 +> · #eventbannerdata (JSON) : titre, url, image, plage de dates ;
34 +> · #eventGTM (JSON) : salle(s), producteur, discipline ;
35 +> · barre latérale #sb-performances : CHAQUE représentation avec
36 +> heure (« 19h30 »), date FR complète et PRIX RÉELS
37 +> (« 33 $ à 97,50 $ ») → une fiche Sorti-Ka PAR séance
38 +> (dedup_key par heure, patron Phase 2).
39 +> Accès : robots.txt n'interdit que /cpresources/ /vendor/ /cache/ —
40 +> GET throttlés 0,8 s, identification honnête, lien billetterie
41 +> officiel. Recoupement lavitrine/evenko géré par dedup_key.
42 +
43 +</details>
44 +
45 +## Champs récupérés → schéma
46 +
47 +Complétude mesurée sur les **350 événements actifs** de la source ; exemples tirés d'un événement réel (`placedesarts:24-poses-portraits-2026-09-02-19:30`).
48 +
49 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
50 +|---|---|---|---|
51 +| `title` — Titre | titre de l'événement | 100 % | 24 poses (portraits) |
52 +| `description` — Description | texte descriptif (source ou fiche détail) | 0 % | ∅ |
53 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://www.placedesarts.com/evenement/24-poses-portraits |
54 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["arts-scene"] |
55 +| `venue` — Salle (venue) | nom du lieu | 100 % | Théâtre Jean-Duceppe |
56 +| `address` — Adresse | adresse civique | 0 % | ∅ |
57 +| `city` — Ville | municipalité | 100 % | Montréal |
58 +| `region` — Région | région administrative | 100 % | Montréal |
59 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 94 % | 45.5084325, -73.5658186 |
60 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-02 |
61 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-02 |
62 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 99 % | 19:30 |
63 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
64 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
65 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 72 % | 0 |
66 +| `price_min` — Prix min | tarif minimal réel ($) | 72 % | 33.0 |
67 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 72 % | 33 $ à 97,50 $ |
68 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
69 +| `organizer` — Organisateur | promoteur / organisme | 100 % | Duceppe |
70 +| `image` — Image | visuel (og:image ou média source) | 100 % | https://cdn.placedesarts.com/tranforms/_300x140_crop_center-center_none_ns/1657294/24POSES_DU252… |
71 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
72 +
73 +## Fréquence & budgets
74 +
75 +- **Cadence** : horaire (watcher PM2, incrémental)
76 +- **Budgets / plafonds (variables d'environnement)** :
77 +
78 +| Variable | Défaut | Rôle |
79 +|---|---|---|
80 +| `PDA_FICHE_MAX` | `25` | — |
81 +- **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).
82 +
83 +## Volumétrie & complétude live
84 +
85 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
86 +
87 +- **Événements en base** : 352 (dont **350 actifs**)
88 +- **GPS** : 328/350 actifs (94 %)
89 +- **Prix** : 253/350 actifs (72 %)
90 +- **Heure (start_time)** : 348/350 actifs (99 %)
91 +- **Heure de fin** : 0/350 actifs (0 %)
92 +- **Statut (annulé/reporté/complet)** : 0/350 actifs (0 %)
93 +- **Artistes** : 0/350 actifs (0 %)
94 +- **Image** : 350/350 actifs (100 %)
95 +- **Salle (venue)** : 350/350 actifs (100 %)
96 +- **Dernier sync** : 2026-08-19 02:15 — fetched 352, +352 ajoutés, ~0 mis à jour, -0 retirés
97 +- **Syncs enregistrés** (sync_log) : 1
98 +
99 +## Erreurs & dépannage
100 +
101 +Aucune erreur dans `sync_log` pour cette source. ✅
102 +
103 +- Rejouer un sync isolé : `python3 run.py sync --source placedesarts` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='placedesarts' ORDER BY ts DESC LIMIT 5;"`
104 +
105 +## Licence / attribution
106 +
107 +- robots.txt : Disallow /cpresources/ /vendor/ /cache/ seulement — GET throttlés 0,8 s, identification honnête, lien billetterie officielle ; recoupement lavitrine/evenko géré par dedup_key
108 +
109 +## Historique
110 +
111 +- **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.
112 +- **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).
113 +- **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 ».
added docs/connecteurs/quebecanimee.md +110 −0
@@ -0,0 +1,110 @@
1 +# Québec animée — Ville de Québec (`quebecanimee`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/quebecanimee.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Québec animée — Ville de Québec](https://animee.ville.quebec.qc.ca/activites/)
10 +- **Couverture** : Activités gratuites/à faible coût, Ville de Québec (Capitale-Nationale)
11 +- **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
12 +
13 +## Accès
14 +
15 +- **Type** : municipal
16 +- **Endpoint** (`BASE`) : `https://animee.ville.quebec.qc.ca`
17 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
18 +- **Pagination** : aucune (flux unique)
19 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
20 +- **Throttle** : 0.8 s entre requêtes
21 +- **Accès légal** : site municipal public rendu serveur — GET throttlés 0,8 s, identification honnête, lien fiche officielle
22 +
23 +<details><summary>En-tête documentaire du connecteur</summary>
24 +
25 +> connectors/quebecanimee.py : Québec animée — Ville de Québec (Phase 3)
26 +> Source : https://animee.ville.quebec.qc.ca/activites/ — portail officiel
27 +> des activités gratuites/à faible coût dont la Ville est
28 +> promotrice ou partenaire (73 fiches à venir, vérifié 2026-08-19).
29 +> Comble l'absence de source municipale/gratuite pour la 2ᵉ ville
30 +> du Québec (l'inventaire Capitale-Nationale était ~100 % billetteries).
31 +> Extraction: la LISTE porte tout en attributs data- (1 requête) :
32 +> data-date-debut / data-date-fin ISO, data-arrondissement,
33 +> data-categorie, data-prix (« Gratuit ») + titre/image de la
34 +> carte ; fiches détail incrémentales (cache
35 +> data/quebecanimee_cache.json, QA_FICHE_MAX/sync, re-visite 7 j) :
36 +> description, lieu (nom de salle/parc), heures si publiées.
37 +> Accès : site municipal public rendu serveur — GET throttlés 0,8 s,
38 +> identification honnête, lien vers la fiche officielle.
39 +
40 +</details>
41 +
42 +## Champs récupérés → schéma
43 +
44 +Complétude mesurée sur les **126 événements actifs** de la source ; exemples tirés d'un événement réel (`quebecanimee:cinema-en-plein-air-de-radio-canada-2026-08-19`).
45 +
46 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
47 +|---|---|---|---|
48 +| `title` — Titre | titre de l'événement | 100 % | Cinéma en plein air de Radio-Canada |
49 +| `description` — Description | texte descriptif (source ou fiche détail) | 54 % | 19 août 2026, Parc de la Pointe-aux-Lièvres |
50 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://animee.ville.quebec.qc.ca/activites/cinema-en-plein-air-de-radio-canada/ |
51 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["cinema", "famille"] |
52 +| `venue` — Salle (venue) | nom du lieu | 54 % | Lieux |
53 +| `address` — Adresse | adresse civique | 0 % | ∅ |
54 +| `city` — Ville | municipalité | 100 % | Québec |
55 +| `region` — Région | région administrative | 100 % | Capitale-Nationale |
56 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 54 % | 48.4527492, -71.0736674 |
57 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
58 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
59 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
60 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
61 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
62 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 100 % | 1 |
63 +| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
64 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 100 % | Gratuit |
65 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
66 +| `organizer` — Organisateur | promoteur / organisme | 100 % | Ville de Québec |
67 +| `image` — Image | visuel (og:image ou média source) | 100 % | https://animee.ville.quebec.qc.ca/media/jvoijf3z/rc_photo_cine-dans-lparc.jpg?width=320&amp;heig… |
68 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
69 +
70 +## Fréquence & budgets
71 +
72 +- **Cadence** : horaire (watcher PM2, incrémental)
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut | Rôle |
76 +|---|---|---|
77 +| `QA_FICHE_MAX` | `20` | — |
78 +- **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).
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
83 +
84 +- **Événements en base** : 126 (dont **126 actifs**)
85 +- **GPS** : 68/126 actifs (54 %)
86 +- **Prix** : 126/126 actifs (100 %)
87 +- **Heure (start_time)** : 0/126 actifs (0 %)
88 +- **Heure de fin** : 0/126 actifs (0 %)
89 +- **Statut (annulé/reporté/complet)** : 0/126 actifs (0 %)
90 +- **Artistes** : 0/126 actifs (0 %)
91 +- **Image** : 126/126 actifs (100 %)
92 +- **Salle (venue)** : 68/126 actifs (54 %)
93 +- **Dernier sync** : 2026-08-19 02:10 — fetched 126, +126 ajoutés, ~0 mis à jour, -0 retirés
94 +- **Syncs enregistrés** (sync_log) : 1
95 +
96 +## Erreurs & dépannage
97 +
98 +Aucune erreur dans `sync_log` pour cette source. ✅
99 +
100 +- Rejouer un sync isolé : `python3 run.py sync --source quebecanimee` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='quebecanimee' ORDER BY ts DESC LIMIT 5;"`
101 +
102 +## Licence / attribution
103 +
104 +- site municipal public rendu serveur — GET throttlés 0,8 s, identification honnête, lien fiche officielle
105 +
106 +## Historique
107 +
108 +- **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.
109 +- **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).
110 +- **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/repentigny.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Ville de Repentigny — Événements (`repentigny`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : abandonnee** · Type : `donnees-ouvertes` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
modified docs/connecteurs/saguenay.md +3 −3
@@ -1,6 +1,6 @@
1 1 # Ville de Saguenay — Événements culturels (`saguenay`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : abandonnee** · Type : `donnees-ouvertes` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
@@ -9,7 +9,7 @@
9 9 - **Source** : [Ville de Saguenay — Événements culturels](https://www.donneesquebec.ca/recherche/dataset/sag_evenements-culturels)
10 10 - **Couverture** : Saguenay
11 11 - **Extraction** : CSV (Données Québec)
12 - **Note** : Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17)
12 +- **Note** : Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17). REMPLACÉE 2026-08-19 (Phase 3) par la source « saguenaysorties » (portail sorties.saguenay.ca).
13 13
14 14 ## Accès
15 15
@@ -40,7 +40,7 @@
40 40
41 41 ## Historique
42 42
43 - **Source abandonnée** — Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17)
43 +- **Source abandonnée** — Jeu de données périmé — dernière date d'événement : 2022-06 (vérifié 2026-08-17). REMPLACÉE 2026-08-19 (Phase 3) par la source « saguenaysorties » (portail sorties.saguenay.ca).
44 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.
45 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).
46 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 ».
added docs/connecteurs/saguenaysorties.md +111 −0
@@ -0,0 +1,111 @@
1 +# Sorties Saguenay — portail événementiel de la Ville (`saguenaysorties`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/saguenaysorties.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Sorties Saguenay — portail événementiel de la Ville](https://sorties.saguenay.ca/)
10 +- **Couverture** : Spectacles, expositions, festivals — Saguenay et environs (Saguenay–Lac-Saint-Jean)
11 +- **Extraction** : POST /ajax/plus paginé (SAG_BATCH_MAX lots) : discipline, date FR, heure, titre, « Ville, Salle », image, detail-id → une fiche PAR séance ; détails incrémentaux POST /ajax/details (cache data/saguenaysorties_cache.json, SAG_DETAIL_MAX/sync, re-visite 7 j) : description, adresse civique
12 +
13 +## Accès
14 +
15 +- **Type** : municipal
16 +- **Endpoint** (`BASE`) : `https://sorties.saguenay.ca`
17 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
18 +- **Pagination** : offset/limit, par numéro de page
19 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
20 +- **Throttle** : 0.8 s entre requêtes
21 +- **Accès légal** : portail public municipal — POST throttlés 0,8 s, identification honnête, lien fiche officielle /festivals?id=<id> ; recoupement lavitrine/lepointdevente géré par dedup_key
22 +
23 +<details><summary>En-tête documentaire du connecteur</summary>
24 +
25 +> connectors/saguenaysorties.py : Sorties Saguenay — portail officiel de la
26 +> Ville de Saguenay (Phase 3). Remplace le CSV Données Québec mort (2022).
27 +> Source : https://sorties.saguenay.ca — portail événementiel municipal
28 +> (motorisé par les données La Vitrine culturelle, médias
29 +> lvc-medias.lavitrine.com ; recoupement géré par dedup_key).
30 +> Extraction: POST /ajax/plus (offset par pas de 36, ~300-400 séances
31 +> horodatées, vérifié 2026-08-19) — chaque <article> = UNE séance :
32 +> discipline, date FR, heure « 08 h 30 », titre, « Ville, Salle »,
33 +> image, data-detail-id. Détails incrémentaux POST /ajax/details
34 +> (cache data/saguenaysorties_cache.json, SAG_DETAIL_MAX/sync,
35 +> re-visite 7 j) : description + adresse civique.
36 +> Accès : portail public municipal, pas de robots.txt publié (page de
37 +> maintenance) — volumes modestes, POST throttlés 0,8 s, UA
38 +> honnête, lien vers la fiche officielle /festivals?id=<id>.
39 +
40 +</details>
41 +
42 +## Champs récupérés → schéma
43 +
44 +Complétude mesurée sur les **445 événements actifs** de la source ; exemples tirés d'un événement réel (`saguenaysorties:497146-2026-08-20-08:30`).
45 +
46 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
47 +|---|---|---|---|
48 +| `title` — Titre | titre de l'événement | 100 % | Rencontre avec les archéologues sur le terrain |
49 +| `description` — Description | texte descriptif (source ou fiche détail) | 51 % | ∅ |
50 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://sorties.saguenay.ca/festivals?id=497146 |
51 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["patrimoine"] |
52 +| `venue` — Salle (venue) | nom du lieu | 100 % | Poste-de-traite-de-Chicoutimi |
53 +| `address` — Adresse | adresse civique | 51 % | ∅ |
54 +| `city` — Ville | municipalité | 87 % | Chicoutimi |
55 +| `region` — Région | région administrative | 100 % | Saguenay–Lac-Saint-Jean |
56 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 33 % | 48.4287017, -71.0756153 |
57 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-20 |
58 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-20 |
59 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 100 % | 08:30 |
60 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
61 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
62 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
63 +| `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
64 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
65 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
66 +| `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
67 +| `image` — Image | visuel (og:image ou média source) | 100 % | https://lvc-medias.lavitrine.com/77b5b9cf-95f5-517a-be63-82ed1e8e4806.jpg |
68 +| `website` — Site web | site officiel de l'événement | 0 % | ∅ |
69 +
70 +## Fréquence & budgets
71 +
72 +- **Cadence** : horaire (watcher PM2, incrémental)
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut | Rôle |
76 +|---|---|---|
77 +| `SAG_BATCH_MAX` | `15` | ≤ 540 séances |
78 +| `SAG_DETAIL_MAX` | `40` | — |
79 +- **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).
80 +
81 +## Volumétrie & complétude live
82 +
83 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
84 +
85 +- **Événements en base** : 445 (dont **445 actifs**)
86 +- **GPS** : 149/445 actifs (33 %)
87 +- **Prix** : 0/445 actifs (0 %)
88 +- **Heure (start_time)** : 444/445 actifs (100 %)
89 +- **Heure de fin** : 0/445 actifs (0 %)
90 +- **Statut (annulé/reporté/complet)** : 0/445 actifs (0 %)
91 +- **Artistes** : 0/445 actifs (0 %)
92 +- **Image** : 445/445 actifs (100 %)
93 +- **Salle (venue)** : 445/445 actifs (100 %)
94 +- **Dernier sync** : 2026-08-19 02:19 — fetched 445, +445 ajoutés, ~0 mis à jour, -0 retirés
95 +- **Syncs enregistrés** (sync_log) : 1
96 +
97 +## Erreurs & dépannage
98 +
99 +Aucune erreur dans `sync_log` pour cette source. ✅
100 +
101 +- Rejouer un sync isolé : `python3 run.py sync --source saguenaysorties` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='saguenaysorties' ORDER BY ts DESC LIMIT 5;"`
102 +
103 +## Licence / attribution
104 +
105 +- portail public municipal — POST throttlés 0,8 s, identification honnête, lien fiche officielle /festivals?id=<id> ; recoupement lavitrine/lepointdevente géré par dedup_key
106 +
107 +## Historique
108 +
109 +- **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.
110 +- **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).
111 +- **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 ».
added docs/connecteurs/sallesjsonld.md +112 −0
@@ -0,0 +1,112 @@
1 +# Salles de spectacle — moteur générique JSON-LD Event (`sallesjsonld`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : actif** · Type : `salle-de-spectacle` · Connecteur : `sortika/connectors/sallesjsonld.py`
6 +
7 +## Description
8 +
9 +- **Source** : [Salles de spectacle — moteur générique JSON-LD Event](https://grandtheatre.qc.ca/programmation)
10 +- **Couverture** : Longue traîne des salles de spectacle QC (amorce : Grand Théâtre de Québec, Trident, Capitole — Capitale-Nationale)
11 +- **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
12 +
13 +## Accès
14 +
15 +- **Type** : salle-de-spectacle
16 +- **Endpoint** : voir URL source (https://grandtheatre.qc.ca/programmation)
17 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
18 +- **Pagination** : aucune (flux unique)
19 +- **Backend** : GET direct `requests` (throttlé, UA `SortiKa/1.0` identifié)
20 +- **Throttle** : 0.8 s entre requêtes
21 +- **Accès légal** : 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
22 +
23 +<details><summary>En-tête documentaire du connecteur</summary>
24 +
25 +> connectors/sallesjsonld.py : moteur générique « schema.org/Event » (Phase 3)
26 +> La LONGUE TRAÎNE des salles de spectacle : beaucoup de sites de salles
27 +> embarquent un bloc JSON-LD Event complet (dates horodatées, salle, offres,
28 +> statut) sur chaque fiche. Ce connecteur prend une LISTE DE SALLES
29 +> configurable (data/salles_jsonld.json, patron stores.json de fabri-ka) :
30 +> chaque entrée = page(s) de programmation + motif des liens de fiche +
31 +> ville/salle par défaut. Ajouter une salle = 1 bloc de config, 0 code.
32 +> Extraction: page liste (1 GET/salle) → fiches incrémentales (cache
33 +> data/sallesjsonld_cache.json, SALLES_FICHE_MAX/sync partagé,
34 +> re-visite 7 j) → TOUS les blocs JSON-LD @type Event de la
35 +> fiche (une fiche multi-dates = plusieurs séances).
36 +> Salles d'amorce validées 2026-08-19 (Event JSON-LD réel constaté) :
37 +> Grand Théâtre de Québec, Théâtre du Trident, Théâtre Capitole (Gestev).
38 +> Accès : robots.txt vérifié PAR SALLE avant l'ajout à la config
39 +> (consigné dans docs/connecteurs/sallesjsonld.md) ; GET
40 +> throttlés 0,8 s, identification honnête, lien fiche originale.
41 +
42 +</details>
43 +
44 +## Champs récupérés → schéma
45 +
46 +Complétude mesurée sur les **276 événements actifs** de la source ; exemples tirés d'un événement réel (`sallesjsonld:grandtheatre-decembre-signe-quebec-issime-2026-12-04-0030`).
47 +
48 +| Champ (`events.*`) | Description | Complétude | Exemple réel |
49 +|---|---|---|---|
50 +| `title` — Titre | titre de l'événement | 100 % | Décembre signé Québec Issime |
51 +| `description` — Description | texte descriptif (source ou fiche détail) | 100 % | Célébrez la 4e décennie de magie, de musique et de souvenirs du spectacle Décembre lors de son g… |
52 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://grandtheatre.qc.ca/programmation/decembre-signe-quebec-issime/ |
53 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] |
54 +| `venue` — Salle (venue) | nom du lieu | 100 % | Grand Théatre de Québec |
55 +| `address` — Adresse | adresse civique | 100 % | 269 Boulevard René-Lévesque E |
56 +| `city` — Ville | municipalité | 100 % | Québec |
57 +| `region` — Région | région administrative | 100 % | Capitale-Nationale |
58 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 100 % | 46.806236, -71.221762 |
59 +| `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-12-03 |
60 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-12-03 |
61 +| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 100 % | 19:30 |
62 +| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 47 % | 23:30 |
63 +| `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 1 % | ∅ |
64 +| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 97 % | 0 |
65 +| `price_min` — Prix min | tarif minimal réel ($) | 97 % | 98.0 |
66 +| `price_label` — Libellé prix | étiquette tarifaire affichable | 97 % | 98.00 $ |
67 +| `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
68 +| `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ |
69 +| `image` — Image | visuel (og:image ou média source) | 3 % | ∅ |
70 +| `website` — Site web | site officiel de l'événement | 100 % | https://am.ticketmaster.com/grandtheatre/fr-ca/buy/virtual-venue/TDAyNjIyMDE%3D |
71 +
72 +## Fréquence & budgets
73 +
74 +- **Cadence** : horaire (watcher PM2, incrémental)
75 +- **Budgets / plafonds (variables d'environnement)** :
76 +
77 +| Variable | Défaut | Rôle |
78 +|---|---|---|
79 +| `SALLES_FICHE_MAX` | `40` | total, toutes salles |
80 +- **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).
81 +
82 +## Volumétrie & complétude live
83 +
84 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
85 +
86 +- **Événements en base** : 276 (dont **276 actifs**)
87 +- **GPS** : 276/276 actifs (100 %)
88 +- **Prix** : 267/276 actifs (97 %)
89 +- **Heure (start_time)** : 276/276 actifs (100 %)
90 +- **Heure de fin** : 131/276 actifs (47 %)
91 +- **Statut (annulé/reporté/complet)** : 2/276 actifs (1 %)
92 +- **Artistes** : 0/276 actifs (0 %)
93 +- **Image** : 9/276 actifs (3 %)
94 +- **Salle (venue)** : 276/276 actifs (100 %)
95 +- **Dernier sync** : 2026-08-19 02:19 — fetched 276, +0 ajoutés, ~267 mis à jour, -0 retirés
96 +- **Syncs enregistrés** (sync_log) : 2
97 +
98 +## Erreurs & dépannage
99 +
100 +Aucune erreur dans `sync_log` pour cette source. ✅
101 +
102 +- Rejouer un sync isolé : `python3 run.py sync --source sallesjsonld` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='sallesjsonld' ORDER BY ts DESC LIMIT 5;"`
103 +
104 +## Licence / attribution
105 +
106 +- 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
107 +
108 +## Historique
109 +
110 +- **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.
111 +- **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).
112 +- **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/sherbrooke.md +5 −4
@@ -1,6 +1,6 @@
1 1 # Ville de Sherbrooke — Calendrier des événements (`sherbrooke`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 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/sherbrooke.py`
6 6
@@ -69,7 +69,7 @@ Complétude mesurée sur les **116 événements actifs** de la source ; exemples
69 69
70 70 ## Volumétrie & complétude live
71 71
72 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
72 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
73 73
74 74 - **Événements en base** : 271 (dont **116 actifs**)
75 75 - **GPS** : 0/116 actifs (0 %)
@@ -80,8 +80,8 @@ Complétude mesurée sur les **116 événements actifs** de la source ; exemples
80 80 - **Artistes** : 0/116 actifs (0 %)
81 81 - **Image** : 115/116 actifs (99 %)
82 82 - **Salle (venue)** : 0/116 actifs (0 %)
83 - **Dernier sync** : 2026-08-19 01:19 — fetched 271, +0 ajoutés, ~271 mis à jour, -0 retirés
84 - **Syncs enregistrés** (sync_log) : 35
83 +- **Dernier sync** : 2026-08-19 01:33 — fetched 271, +0 ajoutés, ~0 mis à jour, -0 retirés
84 +- **Syncs enregistrés** (sync_log) : 36
85 85
86 86 ## Erreurs & dépannage
87 87
@@ -101,5 +101,6 @@ Aucune erreur dans `sync_log` pour cette source. ✅
101 101
102 102 Commits touchant `sortika/connectors/sherbrooke.py` :
103 103
104 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
104 105 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
105 106 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec
modified docs/connecteurs/sitq.md +29 −28
@@ -1,6 +1,6 @@
1 1 # SIT Québec — Ministère du Tourisme (`sitq`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : actif** · Type : `donnees-ouvertes` · Connecteur : `sortika/connectors/sitq.py`
6 6
@@ -41,21 +41,21 @@
41 41
42 42 ## Champs récupérés → schéma
43 43
44 Complétude mesurée sur les **876 événements actifs** de la source ; exemples tirés d'un événement réel (`sitq:EVENMTOV500ON8`).
44 +Complétude mesurée sur les **1013 événements actifs** de la source ; exemples tirés d'un événement réel (`sitq:EVENMTOV503XJP`).
45 45
46 46 | Champ (`events.*`) | Description | Complétude | Exemple réel |
47 47 |---|---|---|---|
48 | `title` — Titre | titre de l'événement | 100 % | Festival du nouveau cinéma de Montréal |
49 | `description` — Description | texte descriptif (source ou fiche détail) | 89 % | Renseignements : 514 282-0004 · info@nouveaucinema.ca |
50 | `url` — URL | lien vers la fiche originale / billetterie | 100 % | http://www.nouveaucinema.ca |
51 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["festival", "cinema"] |
52 | `venue` — Salle (venue) | nom du lieu | 74 % | Cinémathèque Québécoise |
53 | `address` — Adresse | adresse civique | 84 % | 335 Boulevard de Maisonneuve Est |
54 | `city` — Ville | municipalité | 95 % | Montréal |
55 | `region` — Région | région administrative | 99 % | Montréal |
56 | `lat` — GPS (lat/lng) | coordonnées géographiques | 97 % | 45.514451, -73.562257 |
57 | `start_date` — Date début | date locale AAAA-MM-JJ | 98 % | 2026-10-08 |
58 | `end_date` — Date fin | date locale AAAA-MM-JJ | 98 % | 2026-10-18 |
48 +| `title` — Titre | titre de l'événement | 100 % | Le Phoenix de Sherbrooke |
49 +| `description` — Description | texte descriptif (source ou fiche détail) | 89 % | Renseignements : 819 560-8842 · billets@hockeyphoenix.ca |
50 +| `url` — URL | lien vers la fiche originale / billetterie | 100 % | https://chl.ca/lhjmq-phoenix |
51 +| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["sport"] |
52 +| `venue` — Salle (venue) | nom du lieu | 73 % | Palais des sports Léopold-Drolet |
53 +| `address` — Adresse | adresse civique | 84 % | 360 Rue du Cégep |
54 +| `city` — Ville | municipalité | 96 % | Sherbrooke |
55 +| `region` — Région | région administrative | 99 % | Estrie |
56 +| `lat` — GPS (lat/lng) | coordonnées géographiques | 97 % | 45.410473, -71.883448 |
57 +| `start_date` — Date début | date locale AAAA-MM-JJ | 99 % | 2026-07-19 |
58 +| `end_date` — Date fin | date locale AAAA-MM-JJ | 99 % | 2027-03-20 |
59 59 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
60 60 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
61 61 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
@@ -63,9 +63,9 @@ Complétude mesurée sur les **876 événements actifs** de la source ; exemples
63 63 | `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ |
64 64 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
65 65 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
66 | `organizer` — Organisateur | promoteur / organisme | 100 % | Tourisme Montréal |
67 | `image` — Image | visuel (og:image ou média source) | 63 % | https://nouveaucinema.ca/share-2025.jpg |
68 | `website` — Site web | site officiel de l'événement | 95 % | http://www.nouveaucinema.ca |
66 +| `organizer` — Organisateur | promoteur / organisme | 100 % | Tourisme Cantons-de-l’Est |
67 +| `image` — Image | visuel (og:image ou média source) | 63 % | https://cdn.theqmjhl.ca/uploads/sherbrooke_phoenix/2020/09/08132344/LOGO.png |
68 +| `website` — Site web | site officiel de l'événement | 96 % | https://chl.ca/lhjmq-phoenix |
69 69
70 70 ## Fréquence & budgets
71 71
@@ -79,19 +79,19 @@ Complétude mesurée sur les **876 événements actifs** de la source ; exemples
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
82 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
83 83
84 - **Événements en base** : 1607 (dont **876 actifs**)
85 - **GPS** : 846/876 actifs (97 %)
86 - **Prix** : 0/876 actifs (0 %)
87 - **Heure (start_time)** : 0/876 actifs (0 %)
88 - **Heure de fin** : 0/876 actifs (0 %)
89 - **Statut (annulé/reporté/complet)** : 0/876 actifs (0 %)
90 - **Artistes** : 0/876 actifs (0 %)
91 - **Image** : 551/876 actifs (63 %)
92 - **Salle (venue)** : 644/876 actifs (74 %)
93 - **Dernier sync** : 2026-08-19 01:19 — fetched 0, +0 ajoutés, ~0 mis à jour, -0 retirés, **erreur : 502 Server Error: Bad Gateway for url: https://api-v3.tourinsoft.com/api/syndications/mto.tourin…**
94 - **Syncs enregistrés** (sync_log) : 42
84 +- **Événements en base** : 1811 (dont **1013 actifs**)
85 +- **GPS** : 981/1013 actifs (97 %)
86 +- **Prix** : 0/1013 actifs (0 %)
87 +- **Heure (start_time)** : 0/1013 actifs (0 %)
88 +- **Heure de fin** : 0/1013 actifs (0 %)
89 +- **Statut (annulé/reporté/complet)** : 0/1013 actifs (0 %)
90 +- **Artistes** : 0/1013 actifs (0 %)
91 +- **Image** : 643/1013 actifs (63 %)
92 +- **Salle (venue)** : 742/1013 actifs (73 %)
93 +- **Dernier sync** : 2026-08-19 02:27 — fetched 1803, +204 ajoutés, ~35 mis à jour, -0 retirés
94 +- **Syncs enregistrés** (sync_log) : 45
95 95
96 96 ## Erreurs & dépannage
97 97
@@ -99,6 +99,7 @@ Erreurs relevées dans `sync_log` :
99 99
100 100 | Erreur | Occurrences | Dernière fois |
101 101 |---|---|---|
102 +| database is locked | 1 | 2026-08-19 02:22 |
102 103 | 502 Server Error: Bad Gateway for url: https://api-v3.tourinsoft.com/api/syndications/mto.tourin… | 1 | 2026-08-19 01:19 |
103 104
104 105 - Rejouer un sync isolé : `python3 run.py sync --source sitq` (ou via le watcher PM2) ; inspecter ensuite `sync_log` : `sqlite3 data/sortika.db "SELECT * FROM sync_log WHERE source='sitq' ORDER BY ts DESC LIMIT 5;"`
modified docs/connecteurs/terrebonne.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Ville de Terrebonne — Calendrier (`terrebonne`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : abandonnee** · Type : `municipal` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
modified docs/connecteurs/ticketmaster.md +15 −14
@@ -1,6 +1,6 @@
1 1 # Ticketmaster — Discovery API (Québec) (`ticketmaster`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/ticketmaster.py`
6 6
@@ -46,7 +46,7 @@
46 46
47 47 ## Champs récupérés → schéma
48 48
49 Complétude mesurée sur les **368 événements actifs** de la source ; exemples tirés d'un événement réel (`ticketmaster:31006476DB368606`).
49 +Complétude mesurée sur les **357 événements actifs** de la source ; exemples tirés d'un événement réel (`ticketmaster:31006476DB368606`).
50 50
51 51 | Champ (`events.*`) | Description | Complétude | Exemple réel |
52 52 |---|---|---|---|
@@ -87,19 +87,19 @@ Complétude mesurée sur les **368 événements actifs** de la source ; exemples
87 87
88 88 ## Volumétrie & complétude live
89 89
90 *(mesuré le 2026-08-19 01:27 EDT dans `data/sortika.db`)*
90 +*(mesuré le 2026-08-19 02:34 EDT dans `data/sortika.db`)*
91 91
92 - **Événements en base** : 380 (dont **368 actifs**)
93 - **GPS** : 368/368 actifs (100 %)
94 - **Prix** : 0/368 actifs (0 %)
95 - **Heure (start_time)** : 354/368 actifs (96 %)
96 - **Heure de fin** : 0/368 actifs (0 %)
97 - **Statut (annulé/reporté/complet)** : 14/368 actifs (4 %)
98 - **Artistes** : 0/368 actifs (0 %)
99 - **Image** : 336/368 actifs (91 %)
100 - **Salle (venue)** : 368/368 actifs (100 %)
101 - **Dernier sync** : 2026-08-19 01:20 — fetched 360, +16 ajoutés, ~344 mis à jour, -0 retirés
102 - **Syncs enregistrés** (sync_log) : 24
92 +- **Événements en base** : 380 (dont **357 actifs**)
93 +- **GPS** : 357/357 actifs (100 %)
94 +- **Prix** : 0/357 actifs (0 %)
95 +- **Heure (start_time)** : 343/357 actifs (96 %)
96 +- **Heure de fin** : 0/357 actifs (0 %)
97 +- **Statut (annulé/reporté/complet)** : 14/357 actifs (4 %)
98 +- **Artistes** : 0/357 actifs (0 %)
99 +- **Image** : 325/357 actifs (91 %)
100 +- **Salle (venue)** : 357/357 actifs (100 %)
101 +- **Dernier sync** : 2026-08-19 01:33 — fetched 360, +0 ajoutés, ~0 mis à jour, -11 retirés
102 +- **Syncs enregistrés** (sync_log) : 25
103 103
104 104 ## Erreurs & dépannage
105 105
@@ -120,5 +120,6 @@ Aucune erreur dans `sync_log` pour cette source. ✅
120 120
121 121 Commits touchant `sortika/connectors/ticketmaster.py` :
122 122
123 +- `85714fd` 2026-08-19 Phase 2 — connecteurs : heure+description La Vitrine, statuts, end_time, offres, taxonomies
123 124 - `86b1494` 2026-08-18 Vague 3 : Ticketmaster SANS clé + Eventbrite + Longueuil + Cantons-de-l'Est
124 125 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
modified docs/connecteurs/trois-rivieres.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Ville de Trois-Rivières — Événements (`trois-rivieres`)
2 2
3 > Fiche générée le 2026-08-19 01:27 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 4
5 5 **Statut : abandonnee** · Type : `municipal` · Connecteur : *aucun (source sans connecteur runtime)*
6 6
added docs/connecteurs/tuxedobillet.md +46 −0
@@ -0,0 +1,46 @@
1 +# Tuxedo Billet — billetterie Capitale-Nationale (`tuxedobillet`)
2 +
3 +> Fiche générée le 2026-08-19 02:34 EDT par `scripts/gen_connector_docs.py` — ne pas éditer à la main, relancer le script.
4 +
5 +**Statut : abandonnee** · Type : `billetterie` · Connecteur : *aucun (source sans connecteur runtime)*
6 +
7 +## Description
8 +
9 +- **Source** : [Tuxedo Billet — billetterie Capitale-Nationale](https://www.tuxedobillet.com/)
10 +- **Couverture** : Salles de Québec/Lévis (Grand Théâtre, Palais Montcalm…)
11 +- **Extraction** : n/d
12 +- **Note** : ÉCARTÉE 2026-08-19 (Phase 3) : site en PANNE aux sondes — www = page « failover site », apex = erreur TLS (curl 60). Le Grand Théâtre et le Capitole sont couverts via sallesjsonld en attendant. À re-sonder.
13 +
14 +## Accès
15 +
16 +- **Type** : billetterie
17 +- **Endpoint** : voir URL source (https://www.tuxedobillet.com/)
18 +- **Auth** : Aucune (accès public, identification honnête par User-Agent)
19 +- **Accès légal** : n/d
20 +
21 +## Champs récupérés → schéma
22 +
23 +*Aucun événement actif en base pour cette source — pas de schéma live à montrer.*
24 +
25 +## Fréquence & budgets
26 +
27 +- **Cadence** : n/d
28 +- **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).
29 +
30 +## Volumétrie & complétude live
31 +
32 +*Source sans connecteur runtime : aucune donnée en base.*
33 +
34 +## Erreurs & dépannage
35 +
36 +
37 +## Licence / attribution
38 +
39 +- n/d
40 +
41 +## Historique
42 +
43 +- **Source abandonnée** — ÉCARTÉE 2026-08-19 (Phase 3) : site en PANNE aux sondes — www = page « failover site », apex = erreur TLS (curl 60). Le Grand Théâtre et le Capitole sont couverts via sallesjsonld en attendant. À re-sonder.
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.
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).
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 frontend/index.html +14 −3
@@ -607,8 +607,12 @@ button{font-family:inherit}
607 607 <span>Légal, vie privée &amp; Loi 25</span></p>
608 608 </div>
609 609 <p class="legal">Données : SIT Québec (MTO, CC 4.0) · Ville de Montréal (CC BY 4.0) ·
610 Ville de Laval (CC 4.0) · Le point de vente · evenko · Atuvu.ca · La Vitrine ·
611 Répertoire des municipalités (MAMH).</p>
610 + Ville de Laval (CC 4.0 &amp; laval.ca) · Villes de Québec (Québec animée), Sherbrooke,
611 + Longueuil, Brossard &amp; Saguenay (Sorties Saguenay) · Tourisme Cantons-de-l'Est,
612 + Outaouais, Lanaudière &amp; Bas-Saint-Laurent · Place des Arts · LHJMQ ·
613 + Le point de vente · evenko · Atuvu.ca · La Vitrine · Eventbrite · Ticketmaster ·
614 + Bandsintown · salles officielles · Répertoire des municipalités (MAMH) ·
615 + lieux : © contributeurs OpenStreetMap (ODbL).</p>
612 616 <p class="legal">© 2026 Groupe KA — Simon-Pierre Boucher
613 617 · <a data-nav href="/contact">Contact</a>
614 618 · <a href="https://www.groupe-ka.com/conditions" target="_blank" rel="noopener noreferrer">Conditions d'utilisation</a>
@@ -635,7 +639,14 @@ const SRC_LABELS = {
635 639 "sitq":"SIT Québec — Ministère du Tourisme","montreal":"Ville de Montréal",
636 640 "laval":"Ville de Laval","lepointdevente":"Le point de vente",
637 641 "evenko":"evenko","atuvu":"Atuvu.ca","lavitrine":"La Vitrine","sherbrooke":"Ville de Sherbrooke",
638 "brossard":"Ville de Brossard","ticketmaster":"Ticketmaster","bandsintown":"Bandsintown"
642 + "brossard":"Ville de Brossard","ticketmaster":"Ticketmaster","bandsintown":"Bandsintown",
643 + "eventbrite":"Eventbrite","longueuil":"Ville de Longueuil",
644 + "cantonsdelest":"Tourisme Cantons-de-l'Est",
645 + "lavalweb":"Ville de Laval (laval.ca)","outaouais":"Tourisme Outaouais",
646 + "lanaudiere":"Tourisme Lanaudière","saguenaysorties":"Sorties Saguenay (Ville de Saguenay)",
647 + "bassaintlaurent":"Tourisme Bas-Saint-Laurent","quebecanimee":"Québec animée (Ville de Québec)",
648 + "placedesarts":"Place des Arts","lhjmq":"LHJMQ",
649 + "sallesjsonld":"Site officiel de la salle"
639 650 };
640 651 const MONTHS = ["jan","fév","mar","avr","mai","juin","juil","août","sep","oct","nov","déc"];
641 652 const MONTHS_FULL = ["janvier","février","mars","avril","mai","juin","juillet",
modified sortika/seo.py +9 −0
@@ -44,6 +44,15 @@ _SRC_LABELS = {
44 44 "evenko": "evenko", "atuvu": "Atuvu.ca", "lavitrine": "La Vitrine",
45 45 "sherbrooke": "Ville de Sherbrooke", "brossard": "Ville de Brossard",
46 46 "ticketmaster": "Ticketmaster", "bandsintown": "Bandsintown",
47 + "eventbrite": "Eventbrite", "longueuil": "Ville de Longueuil",
48 + "cantonsdelest": "Tourisme Cantons-de-l'Est",
49 + "lavalweb": "Ville de Laval (laval.ca)", "outaouais": "Tourisme Outaouais",
50 + "lanaudiere": "Tourisme Lanaudière",
51 + "saguenaysorties": "Sorties Saguenay (Ville de Saguenay)",
52 + "bassaintlaurent": "Tourisme Bas-Saint-Laurent",
53 + "quebecanimee": "Québec animée (Ville de Québec)",
54 + "placedesarts": "Place des Arts", "lhjmq": "LHJMQ",
55 + "sallesjsonld": "Site officiel de la salle",
47 56 }
48 57
49 58
50 59