Technique

API REST & Données

Documentation des endpoints JSON, structure du projet et procédure de mise à jour.

Endpoints disponibles

Base URL : /api/trpc/declarations.search

Paramètres

marquestringMarque (recherche partielle)
siretstringNuméro SIRET exact ou partiel
pageintegerNumé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 frontend

Mise à 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