Spaces:
Sleeping
Sleeping
| 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=["*"], | |
| ) | |
| 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)} | |
| 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)} | |