oedb-backend/extractors/test_api_connection.py
2025-10-04 19:26:00 +02:00

130 lines
4.8 KiB
Python
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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