Endpoints disponibles
Base URL : /api/trpc/declarations.search
Paramètres
marquestringMarque (recherche partielle)siretstringNuméro SIRET exact ou partielpageintegerNuméro de page (défaut : 1)per_pageintegerRésultats par page (10–100, défaut : 20)Exemple de requête
http
GET /api/trpc/declarations.search/api/search?marque=ARKOPHARMA&page=1&per_page=10
Réponse JSON
json
{
"total": 87,
"page": 1,
"per_page": 10,
"pages": 9,
"results": [
{
"id": 353447,
"nom_commercial": "Arkogélules Bronches Poumons",
"marque": "ARKOPHARMA",
"decision": "Autorisée",
"date_decision": "2026-02-02"
}
// ...
]
}Structure du projet
tree
complement-alimentaire/
├── app.py # Application Flask (backend + API REST)
├── declarations.db # Base SQLite (118 823 enregistrements)
├── declarations.csv # Données source (CSV officiel data.gouv.fr)
├── start.sh # Script de démarrage
├── README.md # Documentation
├── requirements.txt # Dépendances Python
├── templates/
│ └── index.html # Interface utilisateur (HTML/CSS/JS)
└── static/
├── css/style.css # Feuille de styles
└── js/app.js # Logique frontendMise à jour des données
Le jeu de données est publié régulièrement sur data.gouv.fr par la DGAL / DGCCRF. Exécutez ce script pour mettre à jour votre base locale :
bash
# 1. Télécharger le nouveau CSV depuis data.gouv.fr
curl -L -o declarations.csv \
"https://www.data.gouv.fr/api/1/datasets/r/f14dbbfa-e8fa-4037-b9af-81b9bf14caf5"
# 2. Recréer la base SQLite avec indexation
python3 -c "
import pandas as pd, sqlite3
df = pd.read_csv('declarations.csv', sep=';', encoding='utf-8-sig')
conn = sqlite3.connect('declarations.db')
df.to_sql('declarations', conn, if_exists='replace', index=False)
for col in ['nom_commercial','marque','responsable_mise_sur_marche','decision','id']:
conn.execute(f'CREATE INDEX IF NOT EXISTS idx_{col} ON declarations({col})')
conn.commit()
print(f'Mise à jour : {len(df)} déclarations')
"Base de données SQLite
118 823
Enregistrements
~25 Mo
Taille de la base
Fév. 2026
Dernière mise à jour