Files
greenwood-school-re/docs/NOUVEAUTES_BODIES.md
T

2.8 KiB

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

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())