File size: 2,183 Bytes
698ce3e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"""
Configuration du serveur FastAPI.
"""
import os
import logging
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from dotenv import load_dotenv

from app import __version__
from app.api.routes import router

# Chargement des variables d'environnement
load_dotenv()

# Configuration
API_HOST = os.getenv("API_HOST", "0.0.0.0")
API_PORT = int(os.getenv("API_PORT", 8000))

# Création de l'application FastAPI
app = FastAPI(
    title="Web Scraper et Convertisseur Markdown API",
    description="""
    API pour scraper des sites web, nettoyer le contenu et le convertir en Markdown.
    Idéal pour préparer des données pour les systèmes d'IA.
    """,
    version=__version__,
    docs_url="/docs",
    redoc_url="/redoc",
)

# Configuration CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Pour la production, limitez aux domaines autorisés
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Enregistrement des routes
app.include_router(router, prefix="/api")

# Gestionnaire d'exceptions
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
    """Gestionnaire global des exceptions."""
    logging.error(f"Exception non gérée: {str(exc)}")
    return JSONResponse(
        status_code=500,
        content={"detail": f"Erreur interne du serveur: {str(exc)}"}
    )

# Route racine
@app.get("/", tags=["Informations"])
async def root():
    """Page d'accueil de l'API."""
    return {
        "name": "Web Scraper et Convertisseur Markdown API",
        "version": __version__,
        "docs": "/docs",
        "redoc": "/redoc"
    }

# Vérification de la santé de l'API
@app.get("/health", tags=["Informations"])
async def health_check():
    """Vérification de la santé de l'API."""
    return {"status": "ok", "version": __version__}


def start():
    """Démarrage du serveur avec uvicorn."""
    import uvicorn
    uvicorn.run(
        "app.api.server:app",
        host=API_HOST,
        port=API_PORT,
        reload=True
    )


if __name__ == "__main__":
    start()