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