# Nouveautés : corps des annonces et endpoint admin_nouveautes Constat du 13-14 septembre 2026, vérifié en production avec les identifiants parent (aucune donnée personnelle stockée ici). ## Le piège : la liste `nouveautes` ne contient pas les corps Le endpoint `nouveautes` (GET) renvoie la liste des 10 derniers posts avec seulement : id, title, categorie, date, intro, files, image. L'intro ne contient que le badge "Vu le ..." et éventuellement rien du tout. Les vrais corps ("Chers parents, ...") n'y figurent PAS. Beaucoup d'annonces n'ont pas de texte du tout côté liste : elles semblent vides alors qu'elles ont un `description` complet côté admin. ## Où sont les corps : `admin_nouveautes` `GET https://boti.education/p/greenwood/botiapi/admin_nouveautes` avec les params standard (user_id, parent_id, eleve_id, key) renvoie TOUTES les annonces de l'école depuis 2021, avec le champ `description` complet (HTML) et les fichiers joints. Attention : - **~19 Mo de JSON** pour Greenwood. Ne pas le poller en boucle, c'est le genre de requête qui finit sur une liste de blocage. - C'est un endpoint "admin" côté nom mais il répond très bien au compte parent standard. Probablement l'endpoint utilisé par la vue détaillée d'un post dans l'app. Les posts récents y apparaissent PARFOIS avant d'être visibles dans la liste parent `nouveautes` (constaté : note "Emploi du temps" du 14/09 16:37 visible dans admin_nouveautes, absente de nouveautes). ## Fichiers joints - `files[].link` sont des URLs media.boti.education/view/... signées, DOUBLE-encodées comme d'habitude : décoder exactement une fois avec parse_qs, garder %2B/%2F/%3D littéraux (server.viewer_to_real()). - Expiration ~15-20 min : télécharger dans la même exécution du script. - Beaucoup d'annonces n'ont pas de PDF : le contenu est uniquement dans `description` (HTML avec emojis,
).
## Historique des emplois du temps
L'école publie les EDT classe par classe via des notes "Emploi du temps"
dans les nouveautés (PDF joints), généralement la 1re quinzaine de
septembre. Le grille `cours_v2` reste vide en parallèle jusqu'à
renseignement par l'admin. 2026 : publiés du 07/09 (maternelle GS/MS) au
14/09 (TPS/PS) ; lycée/TC pas encore paru au 14/09.
## Script de récupération des corps
```python
import sys, html, re
sys.path.insert(0, "/home/iliasmouhcine/dev/boti-client")
import server
c = server.BotiClient()
if not c.key: c.login()
d = server.http_get("admin_nouveautes", {"user_id": c.user_id,
"parent_id": c.parent_id, "eleve_id": c.eleve_id, "key": c.key})
for p in d["data"][:10]:
body = html.unescape(p.get("description") or "")
body = re.sub(r"
", "\n", re.sub(r"