13 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			13 KiB
		
	
	
	
	
	
	
	
Améliorations du Scraper Agenda du Libre
Nouvelles Fonctionnalités
1. Cache JSON Intelligent
- Fichier de cache : agendadulibre_cache.json
- Détection de changements : Le script détecte si le contenu iCal a changé via un hash MD5
- Évite les re-téléchargements : Si le contenu est identique, utilise le cache existant
- Suivi des événements traités : Mémorise les événements déjà traités pour éviter les doublons
2. Limitation du Nombre d'Événements
- Argument --max-events: Limite le nombre d'événements à traiter
- Utile pour les tests : Permet de tester avec un petit nombre d'événements
- Statistiques : Affiche le nombre d'événements ignorés à cause de la limite
3. Mode Dry-Run par Défaut
- Sécurité : Par défaut, aucun événement n'est envoyé à l'API
- Simulation : Affiche ce qui serait envoyé sans faire d'appels API réels
- Override : Utilisez --no-dry-runpour l'envoi réel
4. Logs Détaillés des Événements
- Informations complètes : Affiche tous les détails de l'événement avant insertion
- Traçabilité : ID, titre, description, dates, lieu, URL, source, etc.
- Debugging : Facilite le diagnostic des problèmes d'insertion
- Audit : Permet de vérifier les données avant envoi à l'API
5. Géocodage Automatique Intelligent
- Priorité GEO : Extrait d'abord les coordonnées du champ GEO:dans l'iCal
- Détection d'adresses : Extrait automatiquement les adresses après la première virgule
- Géocodage Nominatim : Utilise l'API Nominatim pour obtenir les coordonnées réelles
- Nettoyage intelligent : Détecte les numéros d'adresse pour améliorer la précision
- Fallback robuste : Utilise le lieu complet si pas d'adresse détectée
- Respect des limites : Pause d'1 seconde entre les requêtes Nominatim
- Optimisation : Évite le géocodage sur les événements déjà traités avec succès
6. Extraction des Catégories
- Champ CATEGORIES : Extrait automatiquement les catégories du champ CATEGORIES:de l'iCal
- Tags multiples : Support des catégories multiples par événement
- Intégration OEDB : Ajoute les catégories comme propriété tagsdans l'événement
- Logs informatifs : Affiche les catégories trouvées dans les logs détaillés
7. Extraction des Propriétés Étendues
- ORGANIZER : Extrait l'organisateur de l'événement (email/contact)
- X-ALT-DESC : Extrait la description alternative HTML si disponible
- SUMMARY : Utilise le résumé comme description courte
- SEQUENCE : Extrait le numéro de séquence de l'événement
- RRULE : Extrait les règles de répétition pour les événements récurrents
- Enrichissement complet : Toutes les métadonnées iCal sont préservées
8. Priorisation des Événements
- Événements en attente : Priorité haute pour les événements avec status pending,failed,api_error
- Cache intelligent : Vérification dans les données locales et le cache
- Tri automatique : Les événements en attente sont traités en premier
- Logs informatifs : Indication claire des événements prioritaires avec emoji 🔄
- Robustesse : Retry automatique des événements échoués
9. 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
- Performance : Amélioration significative pour les gros volumes d'événements
Utilisation
Commandes de Base
# Mode dry-run par défaut (sécurisé)
python agendadulibre.py
# Limiter à 5 événements en mode dry-run
python agendadulibre.py --max-events 5
# Mode réel avec limite de 10 événements
python agendadulibre.py --no-dry-run --max-events 10
# Mode verbeux pour voir les détails
python agendadulibre.py --max-events 3 --verbose
# Forcer le rechargement du fichier iCal
python agendadulibre.py --force-refresh --max-events 5
# Traitement parallèle pour gros volumes
python agendadulibre.py --max-events 50 --parallel --max-workers 8 --no-dry-run
# Traitement parallèle en mode dry-run
python agendadulibre.py --max-events 100 --parallel --max-workers 4
Arguments Disponibles
| Argument | Description | Défaut | 
|---|---|---|
| --max-events N | Limite le nombre d'événements à traiter | Aucune limite | 
| --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 iCal | - | 
| --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 (agendadulibre_cache.json)
{
  "processed_events": {
    "event_id_1": {
      "processed_at": "2024-01-01T12:00:00",
      "status": "saved",
      "event_label": "Nom de l'événement"
    }
  },
  "last_ical_fetch": "2024-01-01T12:00:00",
  "ical_content_hash": "md5_hash_du_contenu"
}
Données d'Événements (agendadulibre_events.json)
{
  "events": {
    "event_id": {
      "status": "saved",
      "message": "Créé avec succès",
      "last_attempt": "2024-01-01T12:00:00",
      "event": { /* données de l'événement */ }
    }
  },
  "last_update": "2024-01-01T12:00:00"
}
Exemples de Sortie
Mode Dry-Run avec Logs Détaillés
🚀 Démarrage du scraping de l'agenda du libre
Configuration: batch_size=1, api_url=https://api.openeventdatabase.org
Mode dry-run: OUI
Limite d'événements: 5
Cache iCal: valide pendant 1h
Mode DRY-RUN activé - aucun événement ne sera envoyé à l'API
📝 Détails de l'événement à insérer:
   ID: 6a575f6a82922f4501854431fc3f831c
   Titre: Conférence Python
   Description: Présentation sur Python
   Type: scheduled
   Catégorie: culture.floss
   Lieu: Paris, France
   Début: 2024-12-01T10:00:00
   Fin: 2024-12-01T12:00:00
   URL: https://example.com/event1
   Source: Agenda du Libre
   Coordonnées: [0, 0]
   Modifié par: agendadulibre_scraper
[DRY-RUN] Simulation d'envoi de l'événement: Conférence Python
✅ Conférence Python - Simulé (dry-run)
Mode Réel avec Propriétés Complètes
🚀 Démarrage du scraping de l'agenda du libre
Configuration: batch_size=1, api_url=https://api.openeventdatabase.org
Mode dry-run: NON
Limite d'événements: 3
📍 Coordonnées GEO trouvées: 45.756, 4.84773
🏷️ Catégories trouvées: entraide, aldil, epn-des-rancy, linux
👤 Organisateur trouvé: mailto:contact@aldil.org
📝 Description courte trouvée: Entraide et Bidouille
🔢 Séquence trouvée: 3
✅ Coordonnées utilisées depuis le champ GEO: [4.84773, 45.756]
📝 Détails de l'événement à insérer:
   ID: 6a575f6a82922f4501854431fc3f831c
   Titre: Entraide et Bidouille
   Description: Atelier d'entraide informatique
   Type: scheduled
   Catégorie: culture.floss
   Lieu: Maison pour tous / salle des Rancy, 249 rue Vendôme, Lyon, France
   Début: 2024-12-01T10:00:00
   Fin: 2024-12-01T12:00:00
   URL: https://example.com/event1
   Source: Agenda du Libre
   Coordonnées: [4.84773, 45.756]
   Tags: entraide, aldil, epn-des-rancy, linux
   Organisateur: mailto:contact@aldil.org
   Description courte: Entraide et Bidouille
   Séquence: 3
   Règles de répétition: N/A
   Description HTML: N/A
   Modifié par: agendadulibre_scraper
🌐 Envoi à l'API: https://api.openeventdatabase.org/event
✅ Événement créé avec succès dans l'API
✅ Entraide et Bidouille - Créé avec succès
Mode Réel avec Géocodage Nominatim
🚀 Démarrage du scraping de l'agenda du libre
Configuration: batch_size=1, api_url=https://api.openeventdatabase.org
Mode dry-run: NON
Limite d'événements: 3
📍 Adresse potentielle trouvée: 15 rue de la Paix, Paris, France
🌍 Géocodage avec Nominatim: 15 rue de la Paix, Paris, France
✅ Géocodage réussi: 15 rue de la Paix, Paris, France -> (48.8566, 2.3522)
   Adresse trouvée: 15 Rue de la Paix, 75001 Paris, France
🎯 Coordonnées mises à jour par géocodage: [0, 0] -> [2.3522, 48.8566]
📝 Détails de l'événement à insérer:
   ID: 6a575f6a82922f4501854431fc3f831c
   Titre: Conférence Python
   Description: Présentation sur Python
   Type: scheduled
   Catégorie: culture.floss
   Lieu: Centre de conférences, 15 rue de la Paix, Paris, France
   Début: 2024-12-01T10:00:00
   Fin: 2024-12-01T12:00:00
   URL: https://example.com/event1
   Source: Agenda du Libre
   Coordonnées: [2.3522, 48.8566]
   Modifié par: agendadulibre_scraper
🌐 Envoi à l'API: https://api.openeventdatabase.org/event
✅ Événement créé avec succès dans l'API
✅ Conférence Python - Créé avec succès
Mode Optimisé - Événements Déjà Traités
🚀 Démarrage du scraping de l'agenda du libre
Configuration: batch_size=1, api_url=https://api.openeventdatabase.org
Mode dry-run: NON
⏭️ Événement ignoré: Conférence Python - déjà traité (status: saved)
⏭️ Événement ignoré: Atelier Linux - déjà dans le cache (status: saved)
ℹ️ Géocodage ignoré pour Formation Git - déjà traité
ℹ️ Géocodage ignoré - événement déjà traité
📝 Détails de l'événement à insérer:
   ID: dd0850de6ed7a6b4d482a7dc5201d09c
   Titre: Formation Git
   Description: Maîtriser Git
   Type: scheduled
   Catégorie: culture.floss
   Lieu: Espace formation, 42 avenue du Général de Gaulle, Marseille, France
   Début: 2024-12-03T09:00:00
   Fin: 2024-12-03T11:00:00
   URL: https://example.com/event3
   Source: Agenda du Libre
   Coordonnées: [5.3698, 43.2965]
   Modifié par: agendadulibre_scraper
🌐 Envoi à l'API: https://api.openeventdatabase.org/event
⚠️ Événement déjà existant dans l'API
✅ Formation Git - Événement déjà existant
Mode Prioritaire - Événements en Attente
🚀 Démarrage du scraping de l'agenda du libre
Configuration: batch_size=1, api_url=https://api.openeventdatabase.org
Mode dry-run: NON
🔄 Événement en attente prioritaire: Atelier Linux (status: failed)
🔄 Événement en attente du cache: Formation Git (status: pending)
📋 Événements à traiter: 2 (dont 2 en attente)
🔄 Traitement prioritaire: Atelier Linux
📝 Détails de l'événement à insérer:
   ID: 5ac96f4ae72cd28d164489580e97daca
   Titre: Atelier Linux
   Description: Apprendre Linux
   Type: scheduled
   Catégorie: culture.floss
   Lieu: Lyon, France
   Début: 2024-12-02T14:00:00
   Fin: 2024-12-02T16:00:00
   URL: https://example.com/event2
   Source: Agenda du Libre
   Coordonnées: [4.8357, 45.764]
   Modifié par: agendadulibre_scraper
🌐 Envoi à l'API: https://api.openeventdatabase.org/event
✅ Événement créé avec succès dans l'API
✅ Atelier Linux - Créé avec succès
Tests
Exécutez le script de test pour vérifier les fonctionnalités :
python test_agendadulibre_improvements.py
Avantages
- Sécurité : Mode dry-run par défaut évite les insertions accidentelles
- Performance : Cache intelligent réduit les téléchargements inutiles
- Contrôle : Limitation du nombre d'événements pour les tests
- Traçabilité : Logs détaillés et fichiers de cache pour le suivi
- Flexibilité : Arguments pour personnaliser le comportement
- Géolocalisation précise : Géocodage automatique des lieux avec coordonnées réelles
- Intelligence : Détection et extraction automatique des adresses
- Robustesse : Fallback intelligent en cas d'échec de géocodage
- Optimisation : Évite les retraitements inutiles des événements déjà envoyés
- Efficacité : Skip automatique du géocodage pour les événements déjà traités
- Enrichissement : Extraction automatique des catégories comme tags
- Classification : Amélioration de la recherche et du filtrage des événements
- Métadonnées complètes : Extraction de toutes les propriétés iCal importantes
- Traçabilité : Organisateur, séquence et règles de répétition préservées
- Flexibilité : Support des descriptions HTML et des événements récurrents
- Priorisation intelligente : Traitement prioritaire des événements en attente
- Robustesse : Retry automatique des événements échoués
- Efficacité : Optimisation du traitement par priorité
- Parallélisation : Traitement simultané pour les gros volumes d'événements
- Performance : Amélioration significative avec --parallelet--max-workers
Migration
Les anciens scripts continuent de fonctionner, mais il est recommandé d'utiliser les nouveaux arguments pour plus de contrôle et de sécurité.
