308 lines
12 KiB
Markdown
308 lines
12 KiB
Markdown
![]() |
# 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-run` pour 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é `tags` dans 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
|
|||
|
|
|||
|
## Utilisation
|
|||
|
|
|||
|
### Commandes de Base
|
|||
|
|
|||
|
```bash
|
|||
|
# 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
|
|||
|
```
|
|||
|
|
|||
|
### 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 |
|
|||
|
|
|||
|
## Fichiers Générés
|
|||
|
|
|||
|
### Cache JSON (`agendadulibre_cache.json`)
|
|||
|
```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`)
|
|||
|
```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 :
|
|||
|
|
|||
|
```bash
|
|||
|
python test_agendadulibre_improvements.py
|
|||
|
```
|
|||
|
|
|||
|
## Avantages
|
|||
|
|
|||
|
1. **Sécurité** : Mode dry-run par défaut évite les insertions accidentelles
|
|||
|
2. **Performance** : Cache intelligent réduit les téléchargements inutiles
|
|||
|
3. **Contrôle** : Limitation du nombre d'événements pour les tests
|
|||
|
4. **Traçabilité** : Logs détaillés et fichiers de cache pour le suivi
|
|||
|
5. **Flexibilité** : Arguments pour personnaliser le comportement
|
|||
|
6. **Géolocalisation précise** : Géocodage automatique des lieux avec coordonnées réelles
|
|||
|
7. **Intelligence** : Détection et extraction automatique des adresses
|
|||
|
8. **Robustesse** : Fallback intelligent en cas d'échec de géocodage
|
|||
|
9. **Optimisation** : Évite les retraitements inutiles des événements déjà envoyés
|
|||
|
10. **Efficacité** : Skip automatique du géocodage pour les événements déjà traités
|
|||
|
11. **Enrichissement** : Extraction automatique des catégories comme tags
|
|||
|
12. **Classification** : Amélioration de la recherche et du filtrage des événements
|
|||
|
13. **Métadonnées complètes** : Extraction de toutes les propriétés iCal importantes
|
|||
|
14. **Traçabilité** : Organisateur, séquence et règles de répétition préservées
|
|||
|
15. **Flexibilité** : Support des descriptions HTML et des événements récurrents
|
|||
|
16. **Priorisation intelligente** : Traitement prioritaire des événements en attente
|
|||
|
17. **Robustesse** : Retry automatique des événements échoués
|
|||
|
18. **Efficacité** : Optimisation du traitement par priorité
|
|||
|
|
|||
|
## 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é.
|