diff --git a/docs/NOUVEAUTES_BODIES.md b/docs/NOUVEAUTES_BODIES.md new file mode 100644 index 0000000..e4a75f9 --- /dev/null +++ b/docs/NOUVEAUTES_BODIES.md @@ -0,0 +1,66 @@ +# 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"

", "\n", body)) + body = re.sub(r"<[^>]+>", "", body) + print("=====", p["title"], "|", p["date"]) + print(body.strip()) +``` diff --git a/docs/endpoints.md b/docs/endpoints.md index e4fa2bf..ca48de1 100644 --- a/docs/endpoints.md +++ b/docs/endpoints.md @@ -17,7 +17,7 @@ https://boti.education/p/greenwood/botiapi/. | admin_demande_eleve | get, post | 1514.js, 9714.js, 9964.js | | admin_discipline_eleve | get, post | 1172.js, 9964.js | | admin_fiche_eleve | get | 9964.js | -| admin_nouveautes | get | 6154.js | +| admin_nouveautes | get | 6154.js | (renvoie TOUT l'historique avec le corps `description`, ~19 Mo Greenwood ; voir docs/NOUVEAUTES_BODIES.md) | admin_search_eleve | get | 6996.js | | admin_suivi_eleve | get, post | 3555.js, 9964.js | | album_photo | get | 6124.js, 6925.js |