8.3 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			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-runpour l'envoi réel
- Traitement parallèle : --parallelpour plus de 10 événements
- Workers : --max-workers Npour le traitement parallèle
- Cache : --cache-duration Nheures de validité
🔄 Traitement Parallèle
- Activation automatique : Se déclenche pour plus de 10 événements avec --parallel
- ThreadPoolExecutor : Utilise concurrent.futurespour 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 Agendaavec URL de référence
- Contact : contact:phone,contact:email,contact:websitesi 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
- Sécurité : Mode dry-run par défaut
- Performance : Cache intelligent et traitement parallèle
- Robustesse : Gestion d'erreurs et fallbacks
- Flexibilité : Paramètres configurables
- Traçabilité : Logs détaillés et sauvegarde des états
- Efficacité : Évite les re-traitements inutiles
- Parallélisation : Traitement simultané pour les gros volumes
- 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.
