Files

67 lines
2.8 KiB
Markdown

# 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, <p style="text-align: justify">).
## 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"<br\s*/?>", "\n", re.sub(r"</p>", "\n", body))
body = re.sub(r"<[^>]+>", "", body)
print("=====", p["title"], "|", p["date"])
print(body.strip())
```