Table of Contents
- Guide-Pronote
- Obtenir l'URL iCal (PRONOTE_ICAL_URL)
- Obtenir l'URL de connexion (PRONOTE_URL)
- Type de compte (PRONOTE_ACCOUNT_TYPE)
- Identifiants (PRONOTE_USERNAME et PRONOTE_PASSWORD)
- ENT (PRONOTE_ENT)
- Authentification par QR code / token (PRONOTE_AUTH_MODE=qr_token)
- Enrôlement initial (premier login)
- Exécutions suivantes (token persisté)
- Ré-enrôlement manuel (rotation échouée)
- Sécurité
- Exemple de configuration complet (mode qr_token)
- Choix des sources (PRONOTE_AGENDA_SOURCE, PRONOTE_HOMEWORK_SOURCE, PRONOTE_MESSAGES_SOURCE)
- Exemple sans iCal (pronotepy uniquement)
- Exemple avec iCal et pronotepy (mode auto)
- Tester la configuration
Guide-Pronote
Ce guide pratique explique comment configurer les variables spécifiques à Pronote pour le pipeline pronote-sync.
Pour un tableau complet des variables disponibles, consultez la page Configuration.
Obtenir l'URL iCal (PRONOTE_ICAL_URL)
L'URL iCal est le flux d'export du calendrier Pronote. Elle contient un token icalsecurise sensible et doit être traitée comme un mot de passe.
Étapes pour obtenir l'URL iCal :
- Se connecter à l'espace parent Pronote.
- Aller dans la vue Emploi du temps (souvent accessible via Vie scolaire ou le widget calendrier).
- Chercher l'icône d'export agenda / synchronisation calendrier (généralement en haut à droite de l'emploi du temps, libellée « Exporter » ou « Synchroniser avec un agenda »).
- Une fenêtre modale affiche l'URL d'abonnement iCal.
Format attendu :
https://<instance>.index-education.net/pronote/ical/Edt_Prenom.ics?icalsecurise=<token>&version=2024
Avertissements :
- Le token
icalsecuriseest sensible : il est stocké enSecretStret masqué dans les logs. - Certaines instances Pronote ne proposent pas d'export iCal. Si la page d'agenda ne montre que les options « Personnaliser » et « Générer un PDF pour impression », l'iCal n'est pas disponible. Dans ce cas, laissez
PRONOTE_ICAL_URLvide et utilisezpronotepycomme source unique.
Obtenir l'URL de connexion (PRONOTE_URL)
PRONOTE_URL est l'URL de la page Pronote utilisée par pronotepy pour la connexion API.
Contraintes :
- C'est l'URL visible dans le navigateur sur la page de connexion Pronote, sans paramètres de requête.
- Format :
https://<instance>.index-education.net/pronote/parent.html - Retirez tout paramètre de query string (ex.
?identifiant=...).pronotepyne supporte pas les paramètres de requête dans cette URL.
Note importante :
PRONOTE_URL et PRONOTE_ICAL_URL sont deux contrats distincts : l'un ne doit jamais être déduit de l'autre.
Type de compte (PRONOTE_ACCOUNT_TYPE)
- Valeur par défaut :
parent. - Le projet utilise :
pronotepy.ParentClientpour un compte parent.pronotepy.Clientpour un compte élève.
- Pour un compte parent, conservez la valeur par défaut.
Identifiants (PRONOTE_USERNAME et PRONOTE_PASSWORD)
PRONOTE_USERNAME: Identifiant de connexion à l'espace parent Pronote.PRONOTE_PASSWORD: Mot de passe associé.- Le mot de passe est stocké en
SecretStret masqué dans les logs et les erreurs.
- Le mot de passe est stocké en
ENT (PRONOTE_ENT)
Si votre collège utilise un ENT (Espace Numérique de Travail) pour la connexion à Pronote, renseignez le slug correspondant.
Fonctionnement :
- Le projet résout ce slug vers une fonction de
pronotepy.entvia une liste fermée. - Si la connexion est directe (pas de redirection ENT), laissez
PRONOTE_ENTvide ou absent.
Quand l'ENT est obligatoire
De nombreuses instances Pronote délèguent l'authentification à un fournisseur d'identité externe (EduConnect, HubEduConnect, SSO SAML). Dans ce cas, pronotepy ne peut pas s'authentifier directement avec uniquement un nom d'utilisateur et un mot de passe : il a besoin du résolveur ENT pour gérer le flux d'authentification et fournir les cookies de session nécessaires.
Comment savoir si votre instance nécessite un ENT :
- Si vous obtenez l'erreur
Page html is different than expected. Be sure that pronote_url is the direct url to your pronote page., cela signifie presque certainement que votre instance Pronote redirige vers un portail d'authentification (EduConnect/HubEduConnect) et que vous devez configurerPRONOTE_ENT. - Essayez d'ouvrir votre
PRONOTE_URLdans un navigateur en mode navigation privée/incognito. Si vous êtes redirigé vers une page de connexion EduConnect ou ENT, vous devez configurer l'ENT.
Académie de Bordeaux (HubEduConnect) :
- L'académie de Bordeaux utilise HubEduConnect (via EduConnect) pour l'authentification.
- Configuration :
PRONOTE_ENT=bordeaux - Le résolveur
bordeauxgère le flux HubEduConnect surhubeduconnect.index-education.net.
Autres instances EduConnect :
- De nombreuses académies utilisent EduConnect. Si votre instance redirige vers
educonnect.education.gouv.frouhubeduconnect.index-education.net, recherchez le slug correspondant dans le tableau ci-dessous. - Si votre académie n'est pas listée, la connexion peut ne pas être supportée par
pronotepypour le moment.
Note
: Si l'authentification via ENT échoue (en raison de CAPTCHA, de MFA ou d'un flux d'authentification modifié),
pronotepyprend également en charge la connexion par code QR / token comme alternative. Voir la section Authentification par QR code / token ci-dessous.
Slugs ENT supportés :
| Slug | ENT |
|---|---|
monbureaunumerique |
Mon Bureau Numérique |
ent_elyco |
ENT Elyco |
bordeaux |
ENT Bordeaux |
ent_creuse |
ENT Creuse |
occitanie_montpellier |
Occitanie Montpellier |
paris_classe_numerique |
Paris Classe Numérique |
ile_de_france |
Île-de-France |
ent_hdf |
ENT Hauts-de-France |
ac_orleans_tours |
Académie Orléans-Tours |
ac_poitiers |
Académie Poitiers |
ac_rennens |
Académie Rennes |
laclasse_educonnect |
LaClasse (EduConnect) |
ent77 |
ENT 77 |
ent_ecollege78 |
eCollège 78 |
ent_essonne |
ENT Essonne |
val_doise |
Val d'Oise |
val_de_marne |
Val de Marne |
ent_var |
ENT Var |
atrium_sud |
Atrium Sud |
laclasse_lyon |
LaClasse Lyon |
eclat_bfc |
ÉCLAT Bourgogne-Franche-Comté |
cas_arsene76 |
CAS Arsène 76 |
cas_ent27 |
CAS ENT 27 |
cas_kosmos |
CAS Kosmos |
ent_creuse_educonnect |
ENT Creuse (EduConnect) |
ent_mayotte |
ENT Mayotte |
ent_somme |
ENT Somme |
ent_94 |
ENT 94 |
extranet_colleges_somme |
Extranet Collèges Somme |
ac_reunion |
Académie Réunion |
Authentification par QR code / token (PRONOTE_AUTH_MODE=qr_token)
Pour les instances Pronote utilisant HubEduConnect/EduConnect où l'authentification par mot de passe échoue (CAPTCHA, MFA, flux SAML modifié), le pipeline supporte l'authentification par QR code puis token persistant.
Ce mode est sélectionné via la variable PRONOTE_AUTH_MODE=qr_token (le mode par défaut reste password).
Enrôlement initial (premier login)
-
Générer un QR code depuis l'application mobile Pronote (Android/iOS) :
- Ouvrir l'application Pronote → se connecter → aller dans les paramètres → « Exporter un QR code » (ou similaire).
- Le QR code est exporté sous forme de fichier JSON (ex. :
qr_code.json). - ⚠️ Le QR code expire environ 10 minutes après génération — soyez rapide.
-
Configurer les variables dans votre fichier
.env:PRONOTE_AUTH_MODE=qr_token PRONOTE_QR_CODE_FILE=/chemin/vers/qr_code.json PRONOTE_QR_PIN=1234 -
Lancer le pipeline (ex. :
pronote-sync --dry-runpour tester). Au premier login :pronotepy.qrcode_login(qr_code, pin, uuid)est appelé avec le contenu du JSON et le PIN.- Les credentials exportées par
pronotepy.export_credentials()sont persistées dans.pronote_auth_state.json(permissions0600). - Le QR code et le PIN ne sont plus nécessaires pour les exécutions suivantes.
Exécutions suivantes (token persisté)
- Le pipeline charge le token depuis
.pronote_auth_state.jsonet utilisepronotepy.token_login(**credentials). - Le token rotate à chaque session — le fichier
.pronote_auth_state.jsonest mis à jour automatiquement après chaque login réussi. - Aucune action manuelle requise tant que le token reste valide.
Ré-enrôlement manuel (rotation échouée)
Si le token expire ou devient invalide (ex. : session révoquée côté serveur, fichier corrompu), une erreur PronoteAuthRotationError est levée.
Le pipeline :
- journalise l'erreur (expurgée, sans token ni PIN) ;
- envoie une notification XMPP actionnable si le canal est configuré et que
dry_runest inactif ; - retourne un résultat dégradé.
Pour ré-enrôler :
- Supprimer le fichier
.pronote_auth_state.json. - Générer un nouveau QR code depuis l'application mobile Pronote.
- Mettre à jour
PRONOTE_QR_CODE_FILEetPRONOTE_QR_PINsi nécessaire. - Relancer le pipeline — l'enrôlement initial se déclenche automatiquement.
Sécurité
- Le fichier
.pronote_auth_state.jsoncontient un token d'authentification vivant :- Il est créé avec les permissions
0600(lecture/écriture uniquement par le propriétaire). - Il ne doit jamais être committé (couvert par
.gitignore). - Son contenu (token, URL, identifiant) ne doit jamais apparaître dans les logs, les messages d'erreur ou les notifications XMPP.
- Il est créé avec les permissions
- Le PIN (
PRONOTE_QR_PIN) est stocké enSecretStret masqué dans tous les logs.
Exemple de configuration complet (mode qr_token)
PRONOTE_AUTH_MODE=qr_token
PRONOTE_URL=https://0640036s.index-education.net/pronote/parent.html
PRONOTE_ACCOUNT_TYPE=parent
PRONOTE_QR_CODE_FILE=/path/to/qr_code.json
PRONOTE_QR_PIN=1234
# Sources (pronotepy uniquement — pas d'iCal sur cette instance)
PRONOTE_AGENDA_SOURCE=pronotepy
PRONOTE_HOMEWORK_SOURCE=pronotepy
PRONOTE_MESSAGES_SOURCE=pronotepy
Choix des sources (PRONOTE_AGENDA_SOURCE, PRONOTE_HOMEWORK_SOURCE, PRONOTE_MESSAGES_SOURCE)
Le pipeline propose trois modes pour récupérer les données Pronote :
Modes disponibles :
auto(par défaut) : Essaye d'abord iCal, puis bascule verspronotepyuniquement si iCal lève une exception.ical: Utilise uniquement iCal, sans bascule silencieuse. RequiertPRONOTE_ICAL_URL.pronotepy: Utilise uniquementpronotepy, sans bascule silencieuse. RequiertPRONOTE_URL,PRONOTE_USERNAME,PRONOTE_PASSWORD, etPRONOTE_ENT(si applicable).
Comportements :
- En mode
auto, si iCal etpronotepyéchouent → erreur critique explicite. - Une liste vide est un succès valide : elle ne doit pas être assimilée à une panne.
- Les messages ne sont disponibles que via
pronotepy(absents du flux iCal).PRONOTE_MESSAGES_SOURCEest toujourspronotepy.
Exemple sans iCal (pronotepy uniquement)
Si votre instance Pronote ne propose pas d'export iCal, utilisez pronotepy comme source unique :
PRONOTE_URL=https://0640036s.index-education.net/pronote/parent.html
PRONOTE_ACCOUNT_TYPE=parent
PRONOTE_USERNAME=parent.dupont
PRONOTE_PASSWORD=ton_mot_de_passe
PRONOTE_ENT=bordeaux
# Sources : pronotepy uniquement (pas de repli iCal)
PRONOTE_AGENDA_SOURCE=pronotepy
PRONOTE_HOMEWORK_SOURCE=pronotepy
PRONOTE_MESSAGES_SOURCE=pronotepy
Exemple avec iCal et pronotepy (mode auto)
Si votre instance Pronote propose l'export iCal, vous pouvez utiliser le mode auto pour basculer automatiquement entre les sources :
PRONOTE_ICAL_URL=https://<instance>.index-education.net/pronote/ical/Edt_Prenom.ics?icalsecurise=<token>&version=2024
PRONOTE_URL=https://<instance>.index-education.net/pronote/parent.html
PRONOTE_ACCOUNT_TYPE=parent
PRONOTE_USERNAME=parent.dupont
PRONOTE_PASSWORD=ton_mot_de_passe
PRONOTE_ENT=bordeaux
PRONOTE_AGENDA_SOURCE=auto
PRONOTE_HOMEWORK_SOURCE=auto
PRONOTE_MESSAGES_SOURCE=pronotepy
Tester la configuration
Pour valider votre configuration Pronote, exécutez le pipeline en mode simulation :
pronote-sync --dry-run --log-level DEBUG
- Le mode
--dry-runvalide la connexion et le pipeline sans écrire dans CalDAV/XMPP. - Le niveau de log
DEBUGaffiche les étapes détaillées pour diagnostiquer d'éventuels problèmes.
→ Configuration — tableau des variables → Sécurité — gestion des secrets