SPB Git

spb/sorti-ka

Public

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

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 (Aug 19, 2026) parent 0b8a6f8 Browse files

39 changed files +1,719 −213

modified data/sources.json +172 −3
@@ -44,7 +44,8 @@
44 "couverture": "Activités municipales, Laval", 44 "couverture": "Activités municipales, Laval",
45 "cadence": "horaire (watcher PM2)", 45 "cadence": "horaire (watcher PM2)",
46 "statut": "morte-a-la-source", 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 "id": "sherbrooke", 51 "id": "sherbrooke",
@@ -101,7 +102,7 @@
101 "couverture": "Saguenay", 102 "couverture": "Saguenay",
102 "cadence": "n/d", 103 "cadence": "n/d",
103 "statut": "abandonnee", 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 "id": "repentigny", 108 "id": "repentigny",
@@ -229,6 +230,174 @@
229 "cadence": "n/d", 230 "cadence": "n/d",
230 "statut": "abandonnee", 231 "statut": "abandonnee",
231 "note": "Cloudflare bloque tout GET non navigateur (403) et aucun jeu « événements » sur Données Québec (vérifié 2026-08-18)" 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 # Sorti-Ka — Connecteurs de sources d'événements 1 # Sorti-Ka — Connecteurs de sources d'événements
2 2
3−> Index généré le 2026-08-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 ⚠️ **Attributions requises** : Ville de Montréal (CC BY 4.0) ; SIT Québec / Ministère du Tourisme et Ville de Laval (CC 4.0 — Données Québec). Détails dans chaque fiche, section « Licence / attribution ». 7 ⚠️ **Attributions requises** : Ville de Montréal (CC BY 4.0) ; SIT Québec / Ministère du Tourisme et Ville de Laval (CC 4.0 — Données Québec). Détails dans chaque fiche, section « Licence / attribution ».
8 8
@@ -10,31 +10,45 @@
10 10
11 | Source | Type | Statut | Actifs | GPS | Prix | Heure | Artistes | Image | Salle | Dernier sync | 11 | Source | Type | Statut | Actifs | GPS | Prix | Heure | Artistes | Image | Salle | Dernier sync |
12 |---|---|---|---|---|---|---|---|---|---|---| 12 |---|---|---|---|---|---|---|---|---|---|---|
13−| [SIT Québec — Ministère du Tourisme](sitq.md) | donnees-ouvertes | actif | 876 | 97 % | 0 % | 0 % | 0 % | 0 % | 0 % | 63 % | 74 % | 2026-08-19 01:19 | 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 % | 9 % | 0 % | 0 % | 100 % | 5 % | 2026-08-19 01:19 | 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 | 27 % | 92 % | 94 % | 0 % | 0 % | 1 % | 100 % | 99 % | 2026-08-19 01:19 | 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:17 | 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:19 | 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: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:32 |
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 | 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:16 | 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 | 77 % | 0 % | 99 % | 0 % | 0 % | 99 % | 100 % | 100 % | 2026-08-19 01:16 | 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 | 151 | 62 % | 37 % | 9 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 01:16 | 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 | 5087 | 52 % | 0 % | 51 % | 0 % | 0 % | 0 % | 100 % | 100 % | 2026-08-19 01:21 | 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:16 | 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 | 368 | 100 % | 0 % | 96 % | 0 % | 4 % | 0 % | 91 % | 100 % | 2026-08-19 01:20 | 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 | 370 | 100 % | 1 % | 100 % | 0 % | 0 % | 100 % | 7 % | 100 % | 2026-08-19 01:16 | 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 ## Sources abandonnées 37 ## Sources abandonnées
29 38
30 | Source | Type | Raison | 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 | [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) | 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 | [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)… | 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 | [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 … | 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 | [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é… | 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 | [Ville de Terrebonne — Calendrier](terrebonne.md) | municipal | Cloudflare bloque tout GET non navigateur (403) et aucun jeu « événements » sur Données Québec (… | 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 ## Régénérer cette documentation 53 ## Régénérer cette documentation
40 54
modified docs/connecteurs/atuvu.md +17 −16
@@ -1,6 +1,6 @@
1 # Atuvu.ca — calendrier culturel (`atuvu`) 1 # Atuvu.ca — calendrier culturel (`atuvu`)
2 2
3−> Fiche générée le 2026-08-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 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/atuvu.py` 5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/atuvu.py`
6 6
@@ -38,7 +38,7 @@
38 38
39 ## Champs récupérés → schéma 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 | Champ (`events.*`) | Description | Complétude | Exemple réel | 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 | `address` — Adresse | adresse civique | 0 % | ∅ | 50 | `address` — Adresse | adresse civique | 0 % | ∅ |
51 | `city` — Ville | municipalité | 97 % | Montréal | 51 | `city` — Ville | municipalité | 97 % | Montréal |
52 | `region` — Région | région administrative | 94 % | Montréal | 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 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-19 | 54 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
55 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-19 | 55 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-08-19 |
56 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 9 % | 18:00 | 56 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 9 % | 18:00 |
57 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ | 57 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
58 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ | 58 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
59 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 28 % | ∅ | 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 | `price_label` — Libellé prix | étiquette tarifaire affichable | 28 % | ∅ | 61 | `price_label` — Libellé prix | étiquette tarifaire affichable | 28 % | ∅ |
62 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] | 62 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
63 | `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ | 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 ## Volumétrie & complétude live 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**) 81+- **Événements en base** : 162 (dont **152 actifs**)
82−- **GPS** : 94/151 actifs (62 %) 82+- **GPS** : 106/152 actifs (70 %)
83−- **Prix** : 56/151 actifs (37 %) 83+- **Prix** : 57/152 actifs (38 %)
84−- **Heure (start_time)** : 14/151 actifs (9 %) 84+- **Heure (start_time)** : 14/152 actifs (9 %)
85−- **Heure de fin** : 0/151 actifs (0 %) 85+- **Heure de fin** : 0/152 actifs (0 %)
86−- **Statut (annulé/reporté/complet)** : 0/151 actifs (0 %) 86+- **Statut (annulé/reporté/complet)** : 0/152 actifs (0 %)
87−- **Artistes** : 0/151 actifs (0 %) 87+- **Artistes** : 0/152 actifs (0 %)
88−- **Image** : 151/151 actifs (100 %) 88+- **Image** : 152/152 actifs (100 %)
89−- **Salle (venue)** : 151/151 actifs (100 %) 89+- **Salle (venue)** : 152/152 actifs (100 %)
90−- **Dernier sync** : 2026-08-19 01:16 — fetched 170, +0 ajoutés, ~160 mis à jour, -0 retirés 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) : 37 91+- **Syncs enregistrés** (sync_log) : 39
92 92
93 ## Erreurs & dépannage 93 ## Erreurs & dépannage
94 94
@@ -109,5 +109,6 @@ Aucune erreur dans `sync_log` pour cette source. ✅
109 109
110 Commits touchant `sortika/connectors/atuvu.py` : 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 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs 113 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
113 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec 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 # Bandsintown — dates de concerts par artiste (`bandsintown`) 1 # Bandsintown — dates de concerts par artiste (`bandsintown`)
2 2
3−> Fiche générée le 2026-08-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 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/bandsintown.py` 5 **Statut : actif** · Type : `agregateur` · Connecteur : `sortika/connectors/bandsintown.py`
6 6
@@ -43,12 +43,12 @@
43 43
44 ## Champs récupérés → schéma 44 ## Champs récupérés → schéma
45 45
46−Complétude mesurée sur les **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 | Champ (`events.*`) | Description | Complétude | Exemple réel | 48 | Champ (`events.*`) | Description | Complétude | Exemple réel |
49 |---|---|---|---| 49 |---|---|---|---|
50 | `title` — Titre | titre de l'événement | 100 % | Doug St-Louis & Dj Chuck / Ptit Gros Bison à Grenville en Fête | 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 | `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&… | 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 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique"] | 53 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["musique"] |
54 | `venue` — Salle (venue) | nom du lieu | 100 % | Doug St-Louis & Dj Chuck / Ptit Gros Bison à Grenville en Fête | 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 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ | 66 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 100 % | ["Doug St-Louis", "P'tit Gros Bison"] | 67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 100 % | ["Doug St-Louis", "P'tit Gros Bison"] |
68 | `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ | 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 | `website` — Site web | site officiel de l'événement | 0 % | ∅ | 70 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
71 71
72 ## Fréquence & budgets 72 ## Fréquence & budgets
@@ -82,19 +82,19 @@ Complétude mesurée sur les **370 événements actifs** de la source ; exemples
82 82
83 ## Volumétrie & complétude live 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**) 87+- **Événements en base** : 454 (dont **452 actifs**)
88−- **GPS** : 370/370 actifs (100 %) 88+- **GPS** : 452/452 actifs (100 %)
89−- **Prix** : 4/370 actifs (1 %) 89+- **Prix** : 4/452 actifs (1 %)
90−- **Heure (start_time)** : 369/370 actifs (100 %) 90+- **Heure (start_time)** : 451/452 actifs (100 %)
91−- **Heure de fin** : 0/370 actifs (0 %) 91+- **Heure de fin** : 0/452 actifs (0 %)
92−- **Statut (annulé/reporté/complet)** : 0/370 actifs (0 %) 92+- **Statut (annulé/reporté/complet)** : 0/452 actifs (0 %)
93−- **Artistes** : 370/370 actifs (100 %) 93+- **Artistes** : 452/452 actifs (100 %)
94−- **Image** : 27/370 actifs (7 %) 94+- **Image** : 42/452 actifs (9 %)
95−- **Salle (venue)** : 370/370 actifs (100 %) 95+- **Salle (venue)** : 452/452 actifs (100 %)
96−- **Dernier sync** : 2026-08-19 01:16 — fetched 371, +0 ajoutés, ~371 mis à jour, -0 retirés 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) : 23 97+- **Syncs enregistrés** (sync_log) : 24
98 98
99 ## Erreurs & dépannage 99 ## Erreurs & dépannage
100 100
@@ -115,4 +115,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
115 115
116 Commits touchant `sortika/connectors/bandsintown.py` : 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 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs 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 # Ville de Brossard — Calendrier des événements (`brossard`) 1 # Ville de Brossard — Calendrier des événements (`brossard`)
2 2
3−> Fiche générée le 2026-08-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 **Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/brossard.py` 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 ## Volumétrie & complétude live 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** : 264 (dont **150 actifs**) 86 - **Événements en base** : 264 (dont **150 actifs**)
87 - **GPS** : 141/150 actifs (94 %) 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 - **Artistes** : 0/150 actifs (0 %) 92 - **Artistes** : 0/150 actifs (0 %)
93 - **Image** : 150/150 actifs (100 %) 93 - **Image** : 150/150 actifs (100 %)
94 - **Salle (venue)** : 141/150 actifs (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 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) : 23 96+- **Syncs enregistrés** (sync_log) : 24
97 97
98 ## Erreurs & dépannage 98 ## Erreurs & dépannage
99 99
@@ -113,4 +113,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
113 113
114 Commits touchant `sortika/connectors/brossard.py` : 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 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs 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 # Tourisme Cantons-de-l'Est — calendrier officiel (ATR Estrie) (`cantonsdelest`) 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 **Statut : actif** · Type : `tourisme-regional` · Connecteur : `sortika/connectors/cantonsdelest.py` 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 ## Volumétrie & complétude live 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** : 23 (dont **11 actifs**) 84 - **Événements en base** : 23 (dont **11 actifs**)
85 - **GPS** : 10/11 actifs (91 %) 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 - **Artistes** : 0/11 actifs (0 %) 90 - **Artistes** : 0/11 actifs (0 %)
91 - **Image** : 11/11 actifs (100 %) 91 - **Image** : 11/11 actifs (100 %)
92 - **Salle (venue)** : 0/11 actifs (0 %) 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 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) : 20 94+- **Syncs enregistrés** (sync_log) : 21
95 95
96 ## Erreurs & dépannage 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 # evenko — grands concerts et festivals (`evenko`) 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 **Statut : actif** · Type : `promoteur` · Connecteur : `sortika/connectors/evenko.py` 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 | `address` — Adresse | adresse civique | 0 % | ∅ | 52 | `address` — Adresse | adresse civique | 0 % | ∅ |
53 | `city` — Ville | municipalité | 100 % | Montréal | 53 | `city` — Ville | municipalité | 100 % | Montréal |
54 | `region` — Région | région administrative | 100 % | Montréal | 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 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-17 | 56 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-17 |
57 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-17 | 57 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-17 |
58 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 99 % | 20:00 | 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 ## Volumétrie & complétude live 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 - **Événements en base** : 424 (dont **421 actifs**) 78 - **Événements en base** : 424 (dont **421 actifs**)
79−- **GPS** : 326/421 actifs (77 %) 79+- **GPS** : 408/421 actifs (97 %)
80 - **Prix** : 0/421 actifs (0 %) 80 - **Prix** : 0/421 actifs (0 %)
81 - **Heure (start_time)** : 418/421 actifs (99 %) 81 - **Heure (start_time)** : 418/421 actifs (99 %)
82 - **Heure de fin** : 0/421 actifs (0 %) 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 - **Artistes** : 418/421 actifs (99 %) 84 - **Artistes** : 418/421 actifs (99 %)
85 - **Image** : 421/421 actifs (100 %) 85 - **Image** : 421/421 actifs (100 %)
86 - **Salle (venue)** : 421/421 actifs (100 %) 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 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) : 39 88+- **Syncs enregistrés** (sync_log) : 40
89 89
90 ## Erreurs & dépannage 90 ## Erreurs & dépannage
91 91
@@ -105,6 +105,7 @@ Aucune erreur dans `sync_log` pour cette source. ✅
105 105
106 Commits touchant `sortika/connectors/evenko.py` : 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 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs 109 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
109 - `7d9d1b0` 2026-08-18 Enrichissement des connecteurs + géocodage des salles 110 - `7d9d1b0` 2026-08-18 Enrichissement des connecteurs + géocodage des salles
110 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec 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 # Eventbrite — billetterie libre-service (Québec) (`eventbrite`) 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 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/eventbrite.py` 5 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/eventbrite.py`
6 6
@@ -46,30 +46,30 @@
46 46
47 ## Champs récupérés → schéma 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 | Champ (`events.*`) | Description | Complétude | Exemple réel | 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 | 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 % | Thrash legends Artillery's Made In Hell North American Tour | 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.com/e/artillery-avec-drowning-in-blood-tickets-1992308860433 | 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 % | ["musique"] | 56+| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["conference"] |
57−| `venue` — Salle (venue) | nom du lieu | 100 % | Piranha Bar | 57+| `venue` — Salle (venue) | nom du lieu | 100 % | Hôtel Manoir D'Youville |
58−| `address` — Adresse | adresse civique | 100 % | 680 Rue Sainte-Catherine Ouest | 58+| `address` — Adresse | adresse civique | 100 % | 498 Boulevard D'Youville |
59−| `city` — Ville | municipalité | 100 % | Montréal | 59+| `city` — Ville | municipalité | 100 % | Châteauguay |
60−| `region` — Région | région administrative | 99 % | Montréal | 60+| `region` — Région | région administrative | 99 % | Montérégie |
61−| `lat` — GPS (lat/lng) | coordonnées géographiques | 100 % | 45.502852, -73.569942 | 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-09-15 | 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-09-15 | 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:00 | 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 % | 23:00 | 65+| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 100 % | 21:00 |
66 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ | 66 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
67−| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 88 % | 0 | 67+| `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 87 % | 0 |
68−| `price_min` — Prix min | tarif minimal réel ($) | 86 % | 32.99 | 68+| `price_min` — Prix min | tarif minimal réel ($) | 86 % | 60.79 |
69−| `price_label` — Libellé prix | étiquette tarifaire affichable | 88 % | 32.99 $ à 98.98 $ (Eventbrite) | 69+| `price_label` — Libellé prix | étiquette tarifaire affichable | 87 % | 60.79 $ (Eventbrite) |
70 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] | 70 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
71−| `organizer` — Organisateur | promoteur / organisme | 67 % | 13 Media Concerts | 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%2F1187347149%2F55053021303%2F1%2Forig… | 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 | `website` — Site web | site officiel de l'événement | 0 % | ∅ | 73 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
74 74
75 ## Fréquence & budgets 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 ## Volumétrie & complétude live 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**) 89+- **Événements en base** : 478 (dont **430 actifs**)
90−- **GPS** : 429/429 actifs (100 %) 90+- **GPS** : 430/430 actifs (100 %)
91−- **Prix** : 376/429 actifs (88 %) 91+- **Prix** : 376/430 actifs (87 %)
92−- **Heure (start_time)** : 429/429 actifs (100 %) 92+- **Heure (start_time)** : 430/430 actifs (100 %)
93−- **Heure de fin** : 429/429 actifs (100 %) 93+- **Heure de fin** : 430/430 actifs (100 %)
94−- **Statut (annulé/reporté/complet)** : 0/429 actifs (0 %) 94+- **Statut (annulé/reporté/complet)** : 0/430 actifs (0 %)
95−- **Artistes** : 0/429 actifs (0 %) 95+- **Artistes** : 0/430 actifs (0 %)
96−- **Image** : 421/429 actifs (98 %) 96+- **Image** : 422/430 actifs (98 %)
97−- **Salle (venue)** : 429/429 actifs (100 %) 97+- **Salle (venue)** : 430/430 actifs (100 %)
98−- **Dernier sync** : 2026-08-19 01:26 — fetched 426, +0 ajoutés, ~147 mis à jour, -3 retirés 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) : 21 99+- **Syncs enregistrés** (sync_log) : 22
100 100
101 ## Erreurs & dépannage 101 ## Erreurs & dépannage
102 102
@@ -116,4 +116,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
116 116
117 Commits touchant `sortika/connectors/eventbrite.py` : 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 - `86b1494` 2026-08-18 Vague 3 : Ticketmaster SANS clé + Eventbrite + Longueuil + Cantons-de-l'Est 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 # Ville de Gatineau — Événements (`gatineau`) 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 **Statut : abandonnee** · Type : `municipal` · Connecteur : *aucun (source sans connecteur runtime)* 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 # Ville de Laval — Calendrier des activités (`laval`) 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 **Statut : morte-a-la-source** · Type : `donnees-ouvertes` · Connecteur : `sortika/connectors/laval.py` 5 **Statut : morte-a-la-source** · Type : `donnees-ouvertes` · Connecteur : `sortika/connectors/laval.py`
6 6
@@ -9,6 +9,7 @@
9 - **Source** : [Ville de Laval — Calendrier des activités](https://www.donneesquebec.ca/recherche/dataset/calendrier-des-activites) 9 - **Source** : [Ville de Laval — Calendrier des activités](https://www.donneesquebec.ca/recherche/dataset/calendrier-des-activites)
10 - **Couverture** : Activités municipales, Laval 10 - **Couverture** : Activités municipales, Laval
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) 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 ## Accès 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 ## Volumétrie & complétude live 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 - **Événements en base** : 277 (dont **1 actifs**) 72 - **Événements en base** : 277 (dont **1 actifs**)
72 - **GPS** : 0/1 actifs (0 %) 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 - **Artistes** : 0/1 actifs (0 %) 78 - **Artistes** : 0/1 actifs (0 %)
78 - **Image** : 1/1 actifs (100 %) 79 - **Image** : 1/1 actifs (100 %)
79 - **Salle (venue)** : 0/1 actifs (0 %) 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+- **Dernier sync** : 2026-08-19 01:31 — fetched 293, +0 ajoutés, ~32 mis à jour, -0 retirés
81−- **Syncs enregistrés** (sync_log) : 42 82+- **Syncs enregistrés** (sync_log) : 43
82 83
83 ## Erreurs & dépannage 84 ## Erreurs & dépannage
84 85
@@ -100,5 +101,6 @@ Aucune erreur dans `sync_log` pour cette source. ✅
100 101
101 Commits touchant `sortika/connectors/laval.py` : 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 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs 105 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
104 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec 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 # La Vitrine culturelle (`lavitrine`) 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 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/lavitrine.py` 5 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/lavitrine.py`
6 6
@@ -43,22 +43,22 @@
43 43
44 ## Champs récupérés → schéma 44 ## Champs récupérés → schéma
45 45
46−Complétude mesurée sur les **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 | Champ (`events.*`) | Description | Complétude | Exemple réel | 48 | Champ (`events.*`) | Description | Complétude | Exemple réel |
49 |---|---|---|---| 49 |---|---|---|---|
50−| `title` — Titre | titre de l'événement | 100 % | Exterio | 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) | 51 % | C’est en 1992 que le groupe EXTERIO fait son apparition dans la banlieue montréalaise de l’Île-B… | 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/exterio/19959 | 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 | `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["autre"] | 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 | `address` — Adresse | adresse civique | 0 % | ∅ | 55 | `address` — Adresse | adresse civique | 0 % | ∅ |
56−| `city` — Ville | municipalité | 100 % | Québec | 56+| `city` — Ville | municipalité | 100 % | Brossard |
57−| `region` — Région | région administrative | 100 % | Capitale-Nationale | 57+| `region` — Région | région administrative | 100 % | Montérégie |
58−| `lat` — GPS (lat/lng) | coordonnées géographiques | 52 % | 46.8132333, -71.2279284 | 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-12-18 | 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-12-18 | 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) | 51 % | 20:00 | 61+| `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 71 % | 17:30 |
62 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ | 62 | `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 0 % | ∅ |
63 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ | 63 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
64 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ | 64 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 0 % | ∅ |
@@ -66,7 +66,7 @@ Complétude mesurée sur les **5087 événements actifs** de la source ; exemple
66 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ | 66 | `price_label` — Libellé prix | étiquette tarifaire affichable | 0 % | ∅ |
67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] | 67 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] |
68 | `organizer` — Organisateur | promoteur / organisme | 0 % | ∅ | 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 | `website` — Site web | site officiel de l'événement | 0 % | ∅ | 70 | `website` — Site web | site officiel de l'événement | 0 % | ∅ |
71 71
72 ## Fréquence & budgets 72 ## Fréquence & budgets
@@ -81,19 +81,19 @@ Complétude mesurée sur les **5087 événements actifs** de la source ; exemple
81 81
82 ## Volumétrie & complétude live 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**) 86+- **Événements en base** : 5145 (dont **5086 actifs**)
87−- **GPS** : 2660/5087 actifs (52 %) 87+- **GPS** : 3509/5086 actifs (69 %)
88−- **Prix** : 0/5087 actifs (0 %) 88+- **Prix** : 0/5086 actifs (0 %)
89−- **Heure (start_time)** : 2609/5087 actifs (51 %) 89+- **Heure (start_time)** : 3627/5086 actifs (71 %)
90−- **Heure de fin** : 0/5087 actifs (0 %) 90+- **Heure de fin** : 0/5086 actifs (0 %)
91−- **Statut (annulé/reporté/complet)** : 0/5087 actifs (0 %) 91+- **Statut (annulé/reporté/complet)** : 0/5086 actifs (0 %)
92−- **Artistes** : 0/5087 actifs (0 %) 92+- **Artistes** : 0/5086 actifs (0 %)
93−- **Image** : 5087/5087 actifs (100 %) 93+- **Image** : 5086/5086 actifs (100 %)
94−- **Salle (venue)** : 5085/5087 actifs (100 %) 94+- **Salle (venue)** : 5084/5086 actifs (100 %)
95−- **Dernier sync** : 2026-08-19 01:21 — fetched 5127, +1 ajoutés, ~1570 mis à jour, -0 retirés 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) : 33 96+- **Syncs enregistrés** (sync_log) : 34
97 97
98 ## Erreurs & dépannage 98 ## Erreurs & dépannage
99 99
@@ -114,4 +114,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
114 114
115 Commits touchant `sortika/connectors/lavitrine.py` : 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 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec 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 # Le point de vente — billetterie québécoise (`lepointdevente`) 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 **Statut : actif** · Type : `billetterie` · Connecteur : `sortika/connectors/lepointdevente.py` 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 | `address` — Adresse | adresse civique | 0 % | ∅ | 56 | `address` — Adresse | adresse civique | 0 % | ∅ |
57 | `city` — Ville | municipalité | 100 % | Fossambault-sur-le-Lac | 57 | `city` — Ville | municipalité | 100 % | Fossambault-sur-le-Lac |
58 | `region` — Région | région administrative | 98 % | Capitale-Nationale | 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 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-26 | 60 | `start_date` — Date début | date locale AAAA-MM-JJ | 100 % | 2026-09-26 |
61 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-26 | 61 | `end_date` — Date fin | date locale AAAA-MM-JJ | 100 % | 2026-09-26 |
62 | `start_time` — Heure (start_time) | heure locale HH:MM (Québec) | 94 % | 20:00 | 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 ## Volumétrie & complétude live 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** : 4237 (dont **1786 actifs**) 87 - **Événements en base** : 4237 (dont **1786 actifs**)
88−- **GPS** : 486/1786 actifs (27 %) 88+- **GPS** : 547/1786 actifs (31 %)
89 - **Prix** : 1647/1786 actifs (92 %) 89 - **Prix** : 1647/1786 actifs (92 %)
90 - **Heure (start_time)** : 1673/1786 actifs (94 %) 90 - **Heure (start_time)** : 1673/1786 actifs (94 %)
91 - **Heure de fin** : 0/1786 actifs (0 %) 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 - **Artistes** : 16/1786 actifs (1 %) 93 - **Artistes** : 16/1786 actifs (1 %)
94 - **Image** : 1786/1786 actifs (100 %) 94 - **Image** : 1786/1786 actifs (100 %)
95 - **Salle (venue)** : 1776/1786 actifs (99 %) 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 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) : 43 97+- **Syncs enregistrés** (sync_log) : 44
98 98
99 ## Erreurs & dépannage 99 ## Erreurs & dépannage
100 100
modified docs/connecteurs/levis.md +1 −1
@@ -1,6 +1,6 @@
1 # Ville de Lévis — Calendrier (`levis`) 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 **Statut : abandonnee** · Type : `municipal` · Connecteur : *aucun (source sans connecteur runtime)* 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 # Ville de Longueuil — Événements (nouveau portail) (`longueuil`) 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 **Statut : actif** · Type : `municipal` · Connecteur : `sortika/connectors/longueuil.py` 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 ## Volumétrie & complétude live 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** : 9 (dont **4 actifs**) 86 - **Événements en base** : 9 (dont **4 actifs**)
87 - **GPS** : 3/4 actifs (75 %) 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 - **Artistes** : 0/4 actifs (0 %) 92 - **Artistes** : 0/4 actifs (0 %)
93 - **Image** : 4/4 actifs (100 %) 93 - **Image** : 4/4 actifs (100 %)
94 - **Salle (venue)** : 0/4 actifs (0 %) 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 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) : 20 96+- **Syncs enregistrés** (sync_log) : 21
97 97
98 ## Erreurs & dépannage 98 ## Erreurs & dépannage
99 99
@@ -113,4 +113,5 @@ Aucune erreur dans `sync_log` pour cette source. ✅
113 113
114 Commits touchant `sortika/connectors/longueuil.py` : 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 - `86b1494` 2026-08-18 Vague 3 : Ticketmaster SANS clé + Eventbrite + Longueuil + Cantons-de-l'Est 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 # Ville de Montréal — Événements publics (`montreal`) 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 **Statut : actif** · Type : `donnees-ouvertes` · Connecteur : `sortika/connectors/montreal.py` 5 **Statut : actif** · Type : `donnees-ouvertes` · Connecteur : `sortika/connectors/montreal.py`
6 6
@@ -37,29 +37,29 @@
37 37
38 ## Champs récupérés → schéma 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 | Champ (`events.*`) | Description | Complétude | Exemple réel | 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 | 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 % | Participez à la vie démocratique de Ville-Marie et assistez au conseil d’arrondissement du 10 no… | 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/seance-du-conseil-darrondissement-de-ville-marie-de-novembre-3986… | 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 % | ["communautaire"] | 47+| `categories` — Catégories | taxonomie canonique Sorti-Ka (JSON) | 100 % | ["cinema"] |
48−| `venue` — Salle (venue) | nom du lieu | 5 % | Salle du conseil d'arrondissement | 48+| `venue` — Salle (venue) | nom du lieu | 5 % | Cinéma Beaubien |
49−| `address` — Adresse | adresse civique | 5 % | 800, boulevard De Maisonneuve Est, rez-de-chaussée | 49+| `address` — Adresse | adresse civique | 5 % | 2396 Rue Beaubien E |
50 | `city` — Ville | municipalité | 100 % | Montréal | 50 | `city` — Ville | municipalité | 100 % | Montréal |
51 | `region` — Région | région administrative | 100 % | Montréal | 51 | `region` — Région | région administrative | 100 % | Montréal |
52−| `lat` — GPS (lat/lng) | coordonnées géographiques | 99 % | 45.516518, -73.559733 | 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-11-10 | 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-11-10 | 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 % | 18:30 | 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) | 9 % | 18:30 | 56+| `end_time` — Heure de fin (end_time) | heure locale HH:MM (Québec) | 18 % | 11:05 |
57 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ | 57 | `status` — Statut | cancelled / postponed / soldout (NULL = prévu) | 0 % | ∅ |
58 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 100 % | 1 | 58 | `is_free` — Gratuité (is_free) | 1 gratuit / 0 payant / NULL inconnu | 100 % | 1 |
59 | `price_min` — Prix min | tarif minimal réel ($) | 0 % | ∅ | 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 | `artists` — Artistes | têtes d'affiche / lineup (JSON) | 0 % | [] | 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 | `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… | 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 | `website` — Site web | site officiel de l'événement | 0 % | ∅ | 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 ## Volumétrie & complétude live 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 - **Événements en base** : 5809 (dont **3291 actifs**) 80 - **Événements en base** : 5809 (dont **3291 actifs**)
81 - **GPS** : 3253/3291 actifs (99 %) 81 - **GPS** : 3253/3291 actifs (99 %)
82 - **Prix** : 3291/3291 actifs (100 %) 82 - **Prix** : 3291/3291 actifs (100 %)
83 - **Heure (start_time)** : 3277/3291 actifs (100 %) 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 - **Statut (annulé/reporté/complet)** : 0/3291 actifs (0 %) 85 - **Statut (annulé/reporté/complet)** : 0/3291 actifs (0 %)
86 - **Artistes** : 0/3291 actifs (0 %) 86 - **Artistes** : 0/3291 actifs (0 %)
87 - **Image** : 3291/3291 actifs (100 %) 87 - **Image** : 3291/3291 actifs (100 %)
88 - **Salle (venue)** : 160/3291 actifs (5 %) 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 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) : 43 90+- **Syncs enregistrés** (sync_log) : 44
91 91
92 ## Erreurs & dépannage 92 ## Erreurs & dépannage
93 93
@@ -114,6 +114,7 @@ Erreurs relevées dans `sync_log` :
114 114
115 Commits touchant `sortika/connectors/montreal.py` : 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 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs 118 - `65d2d33` 2026-08-18 Vague 2 d'enrichissement : heure précise, artistes, 3 nouveaux connecteurs
118 - `7d9d1b0` 2026-08-18 Enrichissement des connecteurs + géocodage des salles 119 - `7d9d1b0` 2026-08-18 Enrichissement des connecteurs + géocodage des salles
119 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec 120 - `9164456` 2026-08-17 Sorti·Ka v1 — agrégateur de sorties & événements du Québec
added docs/connecteurs/outaouais.md +106 −0
Large diff (106 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/placedesarts.md +113 −0
Large diff (113 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/quebecanimee.md +110 −0
Large diff (110 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/repentigny.md +1 −1
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/saguenay.md +3 −3
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/saguenaysorties.md +111 −0
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/sallesjsonld.md +112 −0
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/sherbrooke.md +5 −4
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/sitq.md +29 −28
Large diff (90 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/terrebonne.md +1 −1
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/ticketmaster.md +15 −14
Large diff (52 lines) is not loaded by default to keep the page fast.Load diff
modified docs/connecteurs/trois-rivieres.md +1 −1
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
added docs/connecteurs/tuxedobillet.md +46 −0
Large diff (46 lines) is not loaded by default to keep the page fast.Load diff
modified frontend/index.html +14 −3
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
modified sortika/seo.py +9 −0
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff
Menu

Theme