#!/usr/bin/env python3 """ Script de test de connexion à l'API OEDB pour le scraper agenda du libre """ import requests import sys import json from datetime import datetime # Configuration par défaut api_oedb = "https://api.openeventdatabase.org" def test_api_connection(api_url: str = api_oedb): """Test la connexion à l'API OEDB""" print(f"🔍 Test de connexion à l'API OEDB: {api_url}") print("=" * 50) # Test 1: Endpoint de base print("1️⃣ Test de l'endpoint de base...") try: response = requests.get(f"{api_url}/", timeout=10) if response.status_code == 200: print("✅ Endpoint de base accessible") else: print(f"⚠️ Endpoint de base répond avec le code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"❌ Erreur de connexion à l'endpoint de base: {e}") return False # Test 2: Endpoint des événements print("\n2️⃣ Test de l'endpoint des événements...") try: response = requests.get(f"{api_url}/events", timeout=10) if response.status_code == 200: print("✅ Endpoint des événements accessible") try: data = response.json() if 'features' in data: print(f" 📊 {len(data['features'])} événements trouvés dans l'API") else: print(" ⚠️ Format de réponse inattendu") except json.JSONDecodeError: print(" ⚠️ Réponse non-JSON reçue") else: print(f"❌ Endpoint des événements répond avec le code: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"❌ Erreur de connexion à l'endpoint des événements: {e}") return False # Test 3: Test d'envoi d'un événement de test print("\n3️⃣ Test d'envoi d'un événement de test...") test_event = { "type": "Feature", "properties": { "label": f"Test API Connection - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", "description": "Événement de test pour vérifier la connexion API", "type": "scheduled", "what": "community", "where": "Test Location", "start": datetime.now().isoformat(), "stop": (datetime.now().timestamp() + 3600).isoformat(), "source:name": "Test API Connection", "last_modified_by": "test_script" }, "geometry": { "type": "Point", "coordinates": [0, 0] } } try: response = requests.post( f"{api_url}/event", json=test_event, headers={"Content-Type": "application/json"}, timeout=10 ) if response.status_code == 201: print("✅ Événement de test créé avec succès") try: created_event = response.json() event_id = created_event.get('id', 'inconnu') print(f" 📝 ID de l'événement créé: {event_id}") except json.JSONDecodeError: print(" ⚠️ Réponse de création non-JSON") elif response.status_code == 409: print("⚠️ Événement de test déjà existant (conflit)") else: print(f"❌ Erreur lors de la création de l'événement de test: {response.status_code}") print(f" Réponse: {response.text}") return False except requests.exceptions.RequestException as e: print(f"❌ Erreur lors de l'envoi de l'événement de test: {e}") return False print("\n✅ Tous les tests de connexion sont passés!") return True def main(): """Fonction principale""" import argparse parser = argparse.ArgumentParser(description="Test de connexion à l'API OEDB") parser.add_argument("--api-url", default=api_oedb, help="URL de l'API OEDB à tester") args = parser.parse_args() success = test_api_connection(args.api_url) if success: print("\n🎉 L'API OEDB est prête pour le scraper agenda du libre!") print("\n💡 Commandes utiles:") print(" - Test complet: python3 test_agendadulibre.py") print(" - Démonstration: python3 demo_agendadulibre.py") print(" - Scraping réel: python3 agendadulibre.py --api-url " + args.api_url) else: print("\n❌ L'API OEDB n'est pas accessible ou ne fonctionne pas correctement.") print("\n🔧 Vérifications à effectuer:") print(" - L'API OEDB est-elle démarrée?") print(" - L'URL est-elle correcte?") print(" - Y a-t-il des erreurs dans les logs de l'API?") sys.exit(0 if success else 1) if __name__ == "__main__": main()