5.4 KiB
5.4 KiB
Scraper Agenda du Libre
Script de scraping pour récupérer les événements de l'agenda du libre (https://www.agendadulibre.org/) et les envoyer à l'API OEDB.
Fonctionnalités
- 📥 Récupération automatique du fichier iCal depuis l'agenda du libre
- 🔄 Traitement par batch configurable
- 💾 Sauvegarde locale de l'état des événements (JSON)
- 🚫 Évite les doublons (ne renvoie pas les événements déjà traités)
- 📊 Statistiques détaillées et logging
- 🧪 Mode démo et tests inclus
Installation
- Installer les dépendances Python :
pip install -r requirements_agendadulibre.txt
- Rendre les scripts exécutables :
chmod +x agendadulibre.py
chmod +x test_agendadulibre.py
chmod +x demo_agendadulibre.py
Utilisation
Scraping complet
# Utilisation basique (1 événement par batch)
python agendadulibre.py
# Avec options personnalisées
python agendadulibre.py --api-url https://api.openeventdatabase.org --batch-size 5 --verbose
Options disponibles
--api-url
: URL de base de l'API OEDB (défaut: https://api.openeventdatabase.org)--batch-size
: Nombre d'événements à traiter par batch (défaut: 1)--verbose
: Mode verbeux pour plus de détails--force-refresh
: Forcer le rechargement du fichier iCal (ignorer le cache)--cache-duration
: Durée de validité du cache en heures (défaut: 1)
Démonstration
# Mode démo (ne fait pas d'appels API réels)
python demo_agendadulibre.py
Tests
# Exécuter les tests
python test_agendadulibre.py
Fichiers générés
agendadulibre_events.json
: Base de données locale des événements traitésagendadulibre_events.ics
: Cache local du fichier iCal (valide 1h)agendadulibre_scraper.log
: Logs détaillés du scraper
Système de cache iCal
Le script utilise un système de cache intelligent pour éviter de télécharger le fichier iCal à chaque exécution :
- Cache valide : Le fichier iCal est mis en cache localement pendant 1 heure par défaut
- Rechargement automatique : Si le cache est expiré, le fichier est automatiquement rechargé
- Fallback : En cas d'erreur de téléchargement, le script utilise le cache même s'il est expiré
- Force refresh : Option
--force-refresh
pour ignorer le cache et forcer le rechargement
Avantages du cache
- ⚡ Performance : Évite les téléchargements inutiles
- 🔄 Fiabilité : Fonctionne même si l'API iCal est temporairement indisponible
- 📊 Efficacité : Réduit la charge sur le serveur de l'agenda du libre
Format des événements
Les événements sont convertis au format OEDB avec les propriétés suivantes :
{
"properties": {
"label": "Titre de l'événement",
"description": "Description de l'événement",
"what": "culture.geek",
"where": "Lieu de l'événement",
"start": "2024-01-01T10:00:00",
"stop": "2024-01-01T12:00:00",
"url": "https://www.agendadulibre.org/event/123",
"source": "agendadulibre.org",
"last_modified_by": "agendadulibre_scraper"
},
"geometry": {
"type": "Point",
"coordinates": [0, 0]
}
}
Gestion des doublons
Le script utilise un système de suivi local pour éviter les doublons :
- Chaque événement reçoit un ID unique basé sur son contenu
- Les événements déjà traités avec succès ne sont pas renvoyés
- Les événements en erreur peuvent être retentés
- Les événements déjà existants (réponse 409) sont marqués comme traités
Statuts des événements
saved
: Événement envoyé avec succès à l'APIalready_exists
: Événement déjà existant dans l'API (réponse 409)error
: Erreur lors de l'envoi à l'API
Exemple de sortie
2024-01-01 10:00:00 - INFO - 🚀 Démarrage du scraping de l'agenda du libre
2024-01-01 10:00:01 - INFO - Récupération du fichier iCal depuis https://www.agendadulibre.org/events.ics
2024-01-01 10:00:02 - INFO - Fichier iCal récupéré avec succès
2024-01-01 10:00:03 - INFO - Traitement de 15 nouveaux événements par batch de 1
2024-01-01 10:00:04 - INFO - Envoi de l'événement: Conférence Python
2024-01-01 10:00:05 - INFO - ✅ Conférence Python - Créé avec succès
...
2024-01-01 10:00:30 - INFO - 📊 Statistiques finales:
2024-01-01 10:00:30 - INFO - Total d'événements trouvés: 25
2024-01-01 10:00:30 - INFO - Nouveaux événements envoyés: 12
2024-01-01 10:00:30 - INFO - Événements déjà existants: 8
2024-01-01 10:00:30 - INFO - Erreurs d'API: 2
2024-01-01 10:00:30 - INFO - Erreurs de parsing: 3
2024-01-01 10:00:30 - INFO - Événements envoyés cette fois: 12
2024-01-01 10:00:30 - INFO - ✅ Scraping terminé avec succès
Planification
Pour automatiser le scraping, vous pouvez utiliser cron :
# Exécuter toutes les heures
0 * * * * cd /path/to/extractors && python agendadulibre.py --batch-size 5
# Exécuter tous les jours à 6h
0 6 * * * cd /path/to/extractors && python agendadulibre.py --batch-size 10
Dépannage
Erreur de connexion à l'API
- Vérifiez que l'API OEDB est démarrée
- Vérifiez l'URL de l'API avec
--api-url
Erreur de parsing iCal
- Vérifiez la connectivité internet
- Vérifiez que l'URL iCal est accessible
Événements non géocodés
- Les événements sont créés avec des coordonnées par défaut [0, 0]
- Un processus de géocodage séparé peut être ajouté si nécessaire