130 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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()
 | 
