oedb-backend/extractors/README_ccpl_agenda.md
2025-10-09 23:35:12 +02:00

8.3 KiB

Scraper CCPL Agenda

Script de scraping pour l'agenda de la CCPL (Communauté de Communes du Pays de Limours) - https://www.cc-paysdelimours.fr/agenda

Fonctionnalités

🚀 Scraping HTML Intelligent

  • Parsing HTML : Extraction des événements depuis la structure HTML de l'agenda CCPL
  • Détection automatique : Identification des liens d'événements avec classes spécifiques
  • Extraction complète : Titre, date, URL, image, lieu
  • Détails enrichis : Récupération des informations depuis les pages individuelles des événements
  • Fallback robuste : Méthodes alternatives si la structure change

💾 Cache JSON Intelligent

  • Détection de changements : Hash MD5 du contenu HTML pour éviter les re-traitements
  • Cache persistant : Sauvegarde des événements traités dans ccpl_agenda_events.json
  • Cache de contenu : Sauvegarde du hash dans ccpl_agenda_cache.json
  • Optimisation : Évite les re-téléchargements inutiles

⚙️ Paramètres Configurables

  • Limite d'événements : --max-events N (défaut: 1)
  • Mode dry-run : Simulation par défaut, --no-dry-run pour l'envoi réel
  • Traitement parallèle : --parallel pour plus de 10 événements
  • Workers : --max-workers N pour le traitement parallèle
  • Cache : --cache-duration N heures de validité

🔄 Traitement Parallèle

  • Activation automatique : Se déclenche pour plus de 10 événements avec --parallel
  • ThreadPoolExecutor : Utilise concurrent.futures pour la parallélisation
  • Workers configurables : Nombre de workers ajustable avec --max-workers
  • Thread-safe : Méthode process_single_event() sécurisée pour les threads

Utilisation

Commandes de Base

# Mode dry-run par défaut (sécurisé)
python ccpl_agenda.py

# Limiter à 1 événement en mode dry-run
python ccpl_agenda.py --max-events 1

# Mode réel avec limite de 5 événements
python ccpl_agenda.py --no-dry-run --max-events 5

# Mode verbeux pour voir les détails
python ccpl_agenda.py --max-events 3 --verbose

# Forcer le rechargement de l'agenda
python ccpl_agenda.py --force-refresh --max-events 3

# Traitement parallèle pour gros volumes
python ccpl_agenda.py --max-events 20 --parallel --max-workers 4 --no-dry-run

# Traitement parallèle en mode dry-run
python ccpl_agenda.py --max-events 50 --parallel --max-workers 8

Arguments Disponibles

Argument Description Défaut
--max-events N Limite le nombre d'événements à traiter 1
--dry-run Mode simulation (par défaut) Activé
--no-dry-run Désactive le mode dry-run -
--verbose Mode verbeux -
--force-refresh Force le rechargement de l'agenda -
--cache-duration N Durée de validité du cache (heures) 1
--batch-size N Taille des batches 1
--api-url URL URL de l'API OEDB https://api.openeventdatabase.org
--parallel Activer le traitement parallèle pour plus de 10 événements False
--max-workers N Nombre maximum de workers pour le traitement parallèle 4

Fichiers Générés

Cache JSON (ccpl_agenda_cache.json)

{
  "processed_events": {
    "event_id": {
      "processed_at": "2024-01-01T12:00:00",
      "status": "saved",
      "event_label": "Titre de l'événement"
    }
  },
  "last_fetch": "2024-01-01T12:00:00",
  "content_hash": "abc123..."
}

Événements JSON (ccpl_agenda_events.json)

{
  "events": {
    "event_id": {
      "status": "saved",
      "message": "Créé avec succès",
      "last_attempt": "2024-01-01T12:00:00",
      "event": {
        "properties": {
          "label": "Titre de l'événement",
          "description": "Description...",
          "type": "scheduled",
          "what": "culture.community",
          "where": "Pays de Limours, France",
          "start": "2024-01-01T10:00:00",
          "stop": "2024-01-01T12:00:00",
          "url": "https://www.cc-paysdelimours.fr/agenda/event",
          "source:name": "CCPL Agenda",
          "source:url": "https://www.cc-paysdelimours.fr/agenda",
          "last_modified_by": "ccpl_agenda_scraper",
          "tags": ["ccpl", "pays-de-limours", "événement-communal"],
          "image": "https://www.cc-paysdelimours.fr/image.jpg"
        },
        "geometry": {
          "type": "Point",
          "coordinates": [2.0644, 48.5917]
        }
      }
    }
  },
  "last_update": "2024-01-01T12:00:00"
}

Structure des Événements

Propriétés Extraites

  • Titre : Extrait depuis <p class="agenda-title">
  • Date : Extrait depuis <span class="number"> et <span class="small">
  • URL : Lien vers la page détaillée de l'événement
  • Image : Image de l'événement si disponible
  • Lieu : Adresse détaillée extraite depuis la page de l'événement
  • Coordonnées : Coordonnées depuis la carte Leaflet ou par défaut du Pays de Limours
  • Contact : Téléphone, email et site web extraits depuis la page de l'événement
  • Description : Description complète de l'événement
  • Horaires : Informations d'ouverture et de tarifs

Format OEDB

Les événements sont formatés selon le standard GeoJSON attendu par l'API OEDB :

  • Type : scheduled (événement programmé)
  • Catégorie : culture.community (événement communautaire)
  • Tags : ["ccpl", "pays-de-limours", "événement-communal"]
  • Source : CCPL Agenda avec URL de référence
  • Contact : contact:phone, contact:email, contact:website si disponibles

Exemples de Sortie

Mode Dry-Run

🚀 Démarrage du scraping de l'agenda CCPL
Configuration: batch_size=1, api_url=https://api.openeventdatabase.org
Mode dry-run: OUI
Limite d'événements: 3
============================================================
🌐 Récupération de l'agenda CCPL: https://www.cc-paysdelimours.fr/agenda
🔄 Nouveau contenu détecté, mise à jour du cache
🔗 30 liens d'événements trouvés
📅 3 événements extraits au total
Traitement de 3 événements
Mode DRY-RUN activé - aucun événement ne sera envoyé à l'API
📝 Détails de l'événement à insérer:
   ID: a650b1026dbfe0ae8a8832906591af4d
   Titre: Kylen... entre le rêve et la création
   Description: Événement organisé par la CCPL - Kylen... entre le rêve et la création
   Type: scheduled
   Catégorie: culture.community
   Lieu: Pays de Limours, France
   Début: 2025-09-30T00:00:00
   Fin: 2025-09-30T02:00:00
   URL: https://www.cc-paysdelimours.fr/agenda/kylen...-entre-le-reve-et-la-creation
   Source: CCPL Agenda
   Coordonnées: [2.0644, 48.5917]
   Tags: ccpl, pays-de-limours, événement-communal
   Modifié par: ccpl_agenda_scraper
   📞 Téléphone: 0164911908
   📧 Email: bibliotheque@mairie-limours.fr
   🌐 Site web: https://x.com/CCPAYSDELIMOURS
   🖼️ Image: https://www.cc-paysdelimours.fr/isens_thumb.php?image=...
[DRY-RUN] Simulation d'envoi de l'événement: Kylen... entre le rêve et la création
✅ Kylen... entre le rêve et la création - Simulé (dry-run)
📊 Statistiques finales:
   total_events: 3
   new_events: 3
   already_saved: 0
   api_errors: 0
   parse_errors: 0
   sent_this_run: 3
   skipped_due_to_limit: 0
✅ Scraping terminé avec succès

Mode Parallèle

🚀 Traitement parallèle de 20 événements avec 4 workers
Limite d'événements: 20
Mode DRY-RUN activé - aucun événement ne sera envoyé à l'API
✅ Événement 1 - Simulé (dry-run)
✅ Événement 2 - Simulé (dry-run)
...
📊 Statistiques finales:
   total_events: 20
   new_events: 20
   sent_this_run: 20

Avantages

  1. Sécurité : Mode dry-run par défaut
  2. Performance : Cache intelligent et traitement parallèle
  3. Robustesse : Gestion d'erreurs et fallbacks
  4. Flexibilité : Paramètres configurables
  5. Traçabilité : Logs détaillés et sauvegarde des états
  6. Efficacité : Évite les re-traitements inutiles
  7. Parallélisation : Traitement simultané pour les gros volumes
  8. Extraction complète : Toutes les métadonnées disponibles

Dépendances

pip install -r requirements_ccpl.txt
  • requests>=2.25.0 : Requêtes HTTP
  • beautifulsoup4>=4.9.0 : Parsing HTML
  • lxml>=4.6.0 : Parser XML/HTML rapide

Migration

Le script est compatible avec la même structure que le scraper agenda du libre, permettant une utilisation cohérente dans l'écosystème OEDB.