Spaces:
Sleeping
Sleeping
File size: 3,511 Bytes
585d753 01a35a9 585d753 01a35a9 585d753 01a35a9 585d753 01a35a9 585d753 01a35a9 |
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 86 87 88 89 90 91 92 |
from fastapi import FastAPI, Query
from typing import List
from app import database
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI(
title="Articles API",
description="API pour récupérer articles et tags depuis SQLite",
version="1.0"
)
# CORS pour permettre l'accès depuis le navigateur
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # autorise toutes les origines
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/get_tags")
def get_tags():
"""
Récupère la liste de tous les tags disponibles via l'API.
Returns:
Dict: Un dictionnaire contenant soit la liste des tags, soit les informations d'erreur.
- Si succès :
{
"tags": List[str] # Liste des noms de tags triés par ordre alphabétique
}
- En cas d'erreur :
{
"status": "error",
"code": str, # Nom de l'exception
"message": str # Message de l'exception
}
Notes:
- L'appel de cet endpoint effectue un accès à la base de données via la fonction `fetch_tags`.
- En cas de problème avec la base de données, un message d'erreur détaillé est retourné.
"""
try:
dict_result = database.fetch_tags()
if dict_result["status"] == "ok":
return {"tags": dict_result["result"]}
else:
return dict_result
except Exception as e:
return {"status": "error", "code": type(e).__name__, "message": str(e)}
@app.get("/get_articles_with_tags")
def get_articles_with_tags(tags: List[str] = Query(..., description="Liste des tags à filtrer")):
"""
Récupère les articles associés à une ou plusieurs tags spécifiés.
Args:
tags (List[str]): Liste des noms de tags utilisés pour filtrer les articles.
Doit contenir au moins un tag.
Returns:
Dict: Un dictionnaire contenant soit les articles correspondants, soit les informations d'erreur.
- Si succès :
{
"tags": List[str], # Tags utilisés pour filtrer
"articles": List[Dict] # Liste des articles correspondants
}
Chaque article est un dictionnaire contenant :
- 'article_id': int, ID de l'article
- 'article_title': str, Titre de l'article
- 'article_url': str, URL de l'article
- En cas d'erreur :
{
"status": "error",
"code": str, # Code d'erreur ou nom de l'exception
"message": str # Message d'erreur
}
Notes:
- Si la liste `tags` est vide, la fonction retourne une erreur avec le code "no_tags".
- L'appel de cet endpoint utilise la fonction `fetch_articles_by_tags` pour récupérer les articles.
"""
try:
dict_result = database.fetch_articles_by_tags(tags)
if dict_result["status"] == "ok":
return {"tags": tags,
"articles": dict_result["result"]}
else:
return dict_result
except Exception as e:
return {"status": "error", "code": type(e).__name__, "message": str(e)}
|