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