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()
|