#!/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)