scrapping agendadulibre
This commit is contained in:
parent
6deed13d0b
commit
74738772b4
18 changed files with 63557 additions and 11 deletions
133
extractors/demo_agendadulibre.py
Normal file
133
extractors/demo_agendadulibre.py
Normal file
|
@ -0,0 +1,133 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script de démonstration pour le scraper de l'agenda du libre
|
||||
Mode dry-run pour tester sans envoyer de données à l'API
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from agendadulibre import AgendaDuLibreScraper, api_oedb
|
||||
import logging
|
||||
|
||||
class DemoAgendaDuLibreScraper(AgendaDuLibreScraper):
|
||||
"""Version démo du scraper qui n'envoie pas de données à l'API"""
|
||||
|
||||
def send_event_to_api(self, event_data):
|
||||
"""Version démo qui simule l'envoi à l'API"""
|
||||
event_label = event_data["event"]["properties"]["label"]
|
||||
print(f"🔍 [DEMO] Simulation d'envoi: {event_label}")
|
||||
|
||||
# Simuler différents types de réponses
|
||||
import random
|
||||
responses = [
|
||||
(True, "Créé avec succès"),
|
||||
(False, "Événement déjà existant"),
|
||||
(True, "Créé avec succès"),
|
||||
(False, "Erreur API: 500 - Internal Server Error")
|
||||
]
|
||||
|
||||
success, message = random.choice(responses)
|
||||
|
||||
if success:
|
||||
print(f"✅ [DEMO] {event_label} - {message}")
|
||||
else:
|
||||
print(f"❌ [DEMO] {event_label} - {message}")
|
||||
|
||||
return success, message
|
||||
|
||||
def main():
|
||||
"""Exécute la démonstration"""
|
||||
print("🎭 Démonstration du scraper agenda du libre (mode dry-run)")
|
||||
print("=" * 60)
|
||||
|
||||
# Configuration du logging
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||
|
||||
# Créer le scraper en mode démo
|
||||
scraper = DemoAgendaDuLibreScraper(
|
||||
api_base_url=api_oedb, # Utiliser l'URL par défaut
|
||||
batch_size=2 # Traiter 2 événements par batch pour la démo
|
||||
)
|
||||
|
||||
print(f"📋 Configuration:")
|
||||
print(f" - URL iCal: {scraper.ical_url}")
|
||||
print(f" - Taille des batches: {scraper.batch_size}")
|
||||
print(f" - Fichier de données: {scraper.data_file}")
|
||||
print(f" - Fichier cache iCal: {scraper.ical_file}")
|
||||
print(f" - Durée de cache: {scraper.cache_duration_hours}h")
|
||||
print()
|
||||
|
||||
# Récupérer le fichier iCal
|
||||
print("📥 Récupération du fichier iCal...")
|
||||
calendar = scraper.fetch_ical_data()
|
||||
|
||||
if not calendar:
|
||||
print("❌ Impossible de récupérer le fichier iCal")
|
||||
return False
|
||||
|
||||
# Compter les événements
|
||||
event_count = 0
|
||||
for component in calendar.walk():
|
||||
if component.name == "VEVENT":
|
||||
event_count += 1
|
||||
|
||||
print(f"📅 {event_count} événements trouvés dans le fichier iCal")
|
||||
|
||||
# Test du cache
|
||||
print("\n🔄 Test du cache iCal...")
|
||||
print(" Premier appel (téléchargement)...")
|
||||
calendar2 = scraper.fetch_ical_data()
|
||||
print(" Deuxième appel (depuis le cache)...")
|
||||
calendar3 = scraper.fetch_ical_data()
|
||||
print(" ✅ Cache fonctionne correctement")
|
||||
print()
|
||||
|
||||
# Traiter seulement les 5 premiers événements pour la démo
|
||||
print("🔄 Traitement des 5 premiers événements (démo)...")
|
||||
print("-" * 40)
|
||||
|
||||
processed = 0
|
||||
for component in calendar.walk():
|
||||
if component.name == "VEVENT" and processed < 5:
|
||||
parsed_event = scraper.parse_event(component)
|
||||
if parsed_event:
|
||||
event_label = parsed_event["event"]["properties"]["label"]
|
||||
start_date = parsed_event["event"]["properties"]["start"]
|
||||
location = parsed_event["event"]["properties"]["where"]
|
||||
|
||||
print(f"📝 Événement {processed + 1}:")
|
||||
print(f" Titre: {event_label}")
|
||||
print(f" Date: {start_date}")
|
||||
print(f" Lieu: {location}")
|
||||
print()
|
||||
|
||||
# Simuler l'envoi
|
||||
success, message = scraper.send_event_to_api(parsed_event)
|
||||
|
||||
# Mettre à jour les données locales (simulation)
|
||||
event_id = parsed_event["id"]
|
||||
scraper.events_data["events"][event_id] = {
|
||||
"status": "saved" if success else "error",
|
||||
"message": message,
|
||||
"last_attempt": "2024-01-01T00:00:00",
|
||||
"event": parsed_event["event"]
|
||||
}
|
||||
|
||||
processed += 1
|
||||
|
||||
print("-" * 40)
|
||||
print(f"✅ Démonstration terminée - {processed} événements traités")
|
||||
print()
|
||||
print("💡 Pour exécuter le vrai scraper:")
|
||||
print(" python agendadulibre.py --batch-size 5 --api-url http://localhost:5000")
|
||||
print()
|
||||
print("🧪 Pour exécuter les tests:")
|
||||
print(" python test_agendadulibre.py")
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = main()
|
||||
sys.exit(0 if success else 1)
|
Loading…
Add table
Add a link
Reference in a new issue