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