Code Monkey home page Code Monkey logo

pronote-api's Introduction

Pronote API - Post-mortem

A compter du 30 Avril 2021, le projet "pronote-api" est malheureusement arrêté à la demande d'Index Éducation. Le dépôt GitHub a été vidé de son historique, et le paquet NPM supprimé.

Je me doute bien que cela décevra beaucoup de monde, mais la simple publication de l'API relève de la mise à disposition d'un programme informatique conçu pour permettre un accès frauduleux à un système de traitement automatisé de données (STAD), ce qui est interdit par la loi.

Ce projet m'aura apporté beaucoup de choses et j'espère que ça aura été le cas pour beaucoup de monde, je ne remercierai jamais assez toutes les personnes qui m'ont aidé dans cette géniale aventure.

Malheureusement, la fête est finie.

pronote-api's People

Contributors

litarvan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pronote-api's Issues

Teacher support

Hi,

I really need teacher support on this lib, do you need help ? What needs to be done ?

Thanks for this work !

Comment Logout une session

Bonjour !
Je vous pose cette question car je n'ai pas trouvé comment fermer une session... Est-ce que quelqu'un peut me dire quelle fonction utiliser ( <Session>.logout() ne fonctionne pas :( )
Merci d'avance !

Add readme on next branch

We don't really know where to start because of the new "next" branch.
There is indeed a README on master, but we're not on this branch by default anymore.

"error": "Cannot read property 'V' of undefined"

Salut, soucis lors du fetch des infos :
image
Lors d'un simple login, 0 soucis, mais lors de fetch impossible de lire la valeur de "V" car non définie... ( deuxième issue sur ce problème d'ailleurs ). Pour préciser, j'utilise une config CAS privée.

Problème connexion

Bonjour, je voudrais savoir si une solution est possible, afin de se connecter sans identifiants (cookie ou autres).
Car mon établissement utilise un service externe pour la connexion à pronote, merci d'avance.

Erreur SSL

Bonjour,
Essayant actuellement d'utiliser cette API en Python (tout en ayant exécuté pronote-api-server avec Node.js).
Je me heurte cependant à un problème : le certificat SSL du site Pronote de mon établissement étant expiré (se connecter à Pronote par Internet affiche ce joli message d'erreur avec Firefox par exemple ^^)... Ainsi, quand je me tente de me connecter à l'API avec ce code en Python :

import requests, json

url = 'http://127.0.0.1:21727/auth/login'
request = {"url": "https://pronote.larmand.fr/pronote", "username": "nom_d_utilisateur", "password": "mot_de_passe"}
headers = {"Content-Type": "application/json"}
request = json.dumps(request)
x = requests.post(url, data = request, headers=headers)
print(x.text)

j'obtiens ce message d'erreur :

{"message":"write EPROTO 4368:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:c:\\ws\\deps\\o
penssl\\openssl\\ssl\\statem\\statem_lib.c:1942:\n","name":"Error","stack":"Error: write EPROTO 4368:error:1425F102:SSL
routines:ssl_choose_client_version:unsupported protocol:c:\\ws\\deps\\openssl\\openssl\\ssl\\statem\\statem_lib.c:1942:\
n\n    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:92:16)","config":{"url":"https://pr
onote.larmand.fr/pronote/eleve.html?login=true","method":"get","headers":{"Accept":"application/json, text/plain, */*","
User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0","Content-Type":"","Cookie":""},"trans
formRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"maxRedirects":0},"code":"EPROTO"}

La console Node.js m'affiche ceci :

Error during request handling :
Error: write EPROTO 4692:error:1425F102:SSL routines:ssl_choose_client_version:u
nsupported protocol:c:\ws\deps\openssl\openssl\ssl\statem\statem_lib.c:1942:

    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.j
s:92:16) {
  errno: 'EPROTO',
  code: 'EPROTO',
  syscall: 'write',
  config: {
    url: 'https://pronote.larmand.fr/pronote/eleve.html?login=true',
    method: 'get',
    headers: {
      Accept: 'application/json, text/plain, */*',
      'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Fir
efox/59.0',
      'Content-Type': '',
      Cookie: ''
    },
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    adapter: [Function: httpAdapter],
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    validateStatus: [Function: validateStatus],
    maxRedirects: 0,
    data: undefined
  },
  request: ClientRequest {
    _events: [Object: null prototype] {
      response: [Function],
      error: [Function: handleRequestError]
    },
    _eventsCount: 2,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    useChunkedEncodingByDefault: false,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: false,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: true,
      _SNICallback: null,
      servername: null,
      alpnProtocol: null,
      authorized: false,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: true,
      _parent: null,
      _host: 'pronote.larmand.fr',
      _readableState: [ReadableState],
      readable: false,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: false,
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: null,
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [Circular],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: false,
      [Symbol(pendingSession)]: null,
      [Symbol(asyncId)]: 25,
      [Symbol(kHandle)]: null,
      [Symbol(kSetNoDelay)]: false,
      [Symbol(lastWriteQueueSize)]: 243,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 243,
      [Symbol(connect-options)]: [Object]
    },
    connection: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: false,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: true,
      _SNICallback: null,
      servername: null,
      alpnProtocol: null,
      authorized: false,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: true,
      _parent: null,
      _host: 'pronote.larmand.fr',
      _readableState: [ReadableState],
      readable: false,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: false,
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: null,
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [Circular],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: false,
      [Symbol(pendingSession)]: null,
      [Symbol(asyncId)]: 25,
      [Symbol(kHandle)]: null,
      [Symbol(kSetNoDelay)]: false,
      [Symbol(lastWriteQueueSize)]: 243,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 243,
      [Symbol(connect-options)]: [Object]
    },
    _header: 'GET /pronote/eleve.html?login=true HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firef
ox/59.0\r\n' +
      'Content-Type: \r\n' +
      'Cookie: \r\n' +
      'Host: pronote.larmand.fr\r\n' +
      'Connection: close\r\n' +
      '\r\n',
    _onPendingData: [Function: noopPendingOutput],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object],
      requests: {},
      sockets: [Object],
      freeSockets: {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      [Symbol(kCapture)]: false
    },
    socketPath: undefined,
    method: 'GET',
    insecureHTTPParser: undefined,
    path: '/pronote/eleve.html?login=true',
    _ended: false,
    res: null,
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    [Symbol(kCapture)]: false,
    [Symbol(kNeedDrain)]: false,
    [Symbol(corked)]: 0,
    [Symbol(kOutHeaders)]: [Object: null prototype] {
      accept: [Array],
      'user-agent': [Array],
      'content-type': [Array],
      cookie: [Array],
      host: [Array]
    }
  },
  response: undefined,
  isAxiosError: true,
  toJSON: [Function]
}

Merci d'avance pour votre aide.

{"error":"{}"}

So, {"error":"{}"} is the content of r after my request :

import requests
payload = {
    "type": "fetch",
    "username": "me",
    "password": "mypassword",
    "url": "https://0920145h.index-education.net/pronote/",
    "cas": "iledefrance"
}

r = requests.post("http://127.0.0.1:21727/", data=payload)
print(r.text)

In Windows PowerShell, i have :

SyntaxError: Unexpected token y in JSON at position 1
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (C:\Users\Aubin\pronote-api-master\index.js:28:31)
    at IncomingMessage.emit (events.js:323:22)
    at endReadableNT (_stream_readable.js:1204:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)

CAS qui ne fonctionne pas

Probleme de CAS avec ac-grenoble
J'utilise ce commit directement dans mon node_modules et voici l'erreur:

TypeError: Cannot read property 'urlSiteIndexEducation' of undefined at getParams (c:\Users\Jadou\Desktop\Projets Pronote\PronoteBot\node_modules\pronote-api\src\fetch\pronote\params.js:28:46) at processTicksAndRejections (<node_internals>/internal/process/task_queues.js:97:5) at async Object.login (c:\Users\Jadou\Desktop\Projets Pronote\PronoteBot\node_modules\pronote-api\src\auth.js:29:22) at async main (c:\Users\Jadou\Desktop\Projets Pronote\PronoteBot\commands\pronote\menu.js:41:29) {stack: 'TypeError: Cannot read property 'urlSiteIndex…te\PronoteBot\commands\pronote\menu.js:41:29)', message: 'Cannot read property 'urlSiteIndexEducation' of undefined'}

Ajout des messages

Salut !
Serait-il possible d'ajouter les messages reçus dans cette api ?
Très beau travail à part ça !
Bonne journée

Fix error handling

Connection errors are not correctly handled in "Ile de France". Indeed, if the password is incorrect the error Unknown CAS is raised.
Furthermore, errors are not in a correct JSON format:

{
"error": ""Unknown CAS""
}

Should should remove one " from each side.

Cas qui ne fonctionne pas

Bonjours ou bonsoir, voici mon problème quand je met 'none' dans le cas je reçois l'erreur ci dessous :

{ code: 1,
message: 'Unknown CAS 'none' (use 'none' for no CAS)' }

et le code :
const pronote = require('pronote-api');

// Exemple
const url = '';
const username = '';
const password = '';
const cas = 'none';

async function main()
{
const session = await pronote.login(url, username, password, cas);

console.log(session.user.name); // Affiche le nom de l'élève
console.log(session.user.studentClass.name); // Affiche la classe de l'élève

const timetable = await session.timetable(); // Récupérer l'emploi du temps d'aujourd'hui
const marks = await session.marks(); // Récupérer les notes du trimestre

console.log(`L'élève a ${timetable.length} cours aujourd'hui`); 
console.log(`et a pour l'instant une moyenne de ${marks.averages.student} ce trimestre.`);

// etc. les fonctions utilisables sont 'timetable', 'marks', 'contents', 'evaluations', 'absences',
// 'infos', et 'menu', sans oublier les champs 'user' et 'params' qui regorgent d'informations.

}

main().catch(err => {
if (err.code === pronote.errors.WRONG_CREDENTIALS.code) {
console.error('Mauvais identifiants');
} else {
console.error(err);
}
});

Notez qu'il y a normalement les bonnes information dans const url, const username et const password (je les ai enlever pour ne pas révéler ma position).

Erreur lors du retour de l'EDT sur le serveur GraphQL

Je suis en train de découvrir votre superbe API mais un problème survient

En souhaitant recevoir l'EDT avec la query

{
    timetable(from: "2020-09-01") {
        room   
    }
}

le serveur renvoie

{
    "data": {
        "timetable": [
            {
                "room": null
            },
            {
                "room": null
            },
            {
                "room": null
            },
            {
                "room": null
            },
            {
                "room": null
            }
        ]
    }
}

mais avec le bon nombre de cours

PS : J'utilise le site de démo

GQL: 400 Bad Request

Bonjour !

J'ai installé le serveur GQL sur mon serveur en utilisant comme bind-adress 0.0.0.0 (au lieu de 127.0.0.1) dû aux problèmes de connexion liés à l'utilisation de Pterodactyl (qui utilise des containers Docker, ce qui me rend impossible de me connecter en utilisant l'IP 127.0.0.1 [puisqu'elle référerait au container courant et non pas au serveur] ni en utilisant l'IP de l'interface réseau de Pterodactyl [puisque le serveur est bind sur 127.0.0.1 par défaut]).
Le serveur se lance bien, je peux y accéder correctement via mon navigateur, mais lorsque j'effectue une requête sur l'endpoint /auth/login en utilisant Jsoup, j'obtiens une erreur 400 Bad Request.

Je n'ai aucune information supplémentaire puisqu'aucun log n'est présent mis à part le "Listening on 0.0.0.0:21727" lors du lancement du serveur GQL, que faire ?

Error when Fetching information ( TypeError: Cannot read property 'V' of undefined )

Hi, i just tested your API and i made a request like the template in "README.md" 👍
According to

Logging in 'thomas4' for 'https://0330028b.index-education.net/pronote/' using regular login Logged in 'thomas4' Successfully logged user 'thomas4' in 4.108s
The connection worked.

Request :
{ "type": "fetch", "username": "thomas4", "password": "PASSWORD", "url": "https://0330028b.index-education.net/pronote/" }
Error
TypeError: Cannot read property 'V' of undefined at result.absences.push.absences.absences.donnees.listeAbsences.V.map.absence (/home/charlotte/Téléchargements/pronote-api-master/src/pronote.js:404:56) at Array.map (<anonymous>) at Object.fetch (/home/charlotte/Téléchargements/pronote-api-master/src/pronote.js:403:56) at <anonymous> at process._tickCallback (internal/process/next_tick.js:188:7)
I used Postman to call the API, I run the API on local on my computer on a fresh install of node ( Ubuntu 18.04 64 bit, kernel 5.0.0-37 )
I will test with another account if i can find a friend.
Sorry, i'm not very familiar with JS/node.
Charlotte.

Erreur "cannot read property map"

J'utilise l'api pronote pour essayer si cela marche avec mes codes.
Voici mon code :

async function main()
{
    const session = await pronote.login(url, username, password, cas);
    
    console.log(session.user.name); // Affiche le nom de l'élève
    console.log(session.user.studentClass.name); // Affiche la classe de l'élève
    
    const timetable = await session.timetable(); // Récupérer l'emploi du temps d'aujourd'hui
    const marks = await session.marks(); // Récupérer les notes du trimestre
    
    console.log(`L'élève a ${timetable.length} cours aujourd'hui`); 
    console.log(`et a pour l'instant une moyenne de ${marks.averages.student} ce trimestre.`);
    
    // etc. les fonctions utilisables sont 'timetable', 'marks', 'contents', 'evaluations', 'absences',
    // 'infos', et 'menu', sans oublier les champs 'user' et 'params' qui regorgent d'informations.
}

main().catch(err => {
    if (err.code === pronote.errors.WRONG_CREDENTIALS.code) {
        console.error('Mauvais identifiants');
    } else {
        console.error(err);
    }
}); 

je vous mets pas mes codes ni mon cas. et j'ai ça comme erreur après qu'on me récupère mon nom et ma classe :

TypeError: Cannot read property 'map' of undefined
    at getTimetable (C:\Users\jevouslditpas\node_modules\pronote-api\src\fetch\pronote\timetable.js:40:39)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async timetable (C:\Users\jevouslditpas\node_modules\pronote-api\src\fetch\timetable.js:26:27)
    at async main (C:\Users\jevouslditpas\Documents\pronote.js:16:23)

Une idée ?

Académie de Rennes non compatible

Bonjour, j'ai essayer de me connecter à Pronote depuis le NPM package pronote-lib qui utilise votre API mais je n'ai pas réussi à me connecter depuis l'Académie de Rennes. J'ai aussi essayer "toutatice" mais ça na pas fonctionné... Pourriez-vous m'aider ?

Unknown CAS 'ac-nancy-metz

Il y a une erreur lors de l'authentification : "Unknown CAS 'ac-nancy-metz". De plus, dans votre code, jai lu que vous vous connectiez à pronote en utilisant kdecole, hors, nous nous connectons (peut-être pas tous les lycées) avec téléservices (https://teleservices.ac-nancy-metz.fr/). L'erreur est peut-être due à cela, peut-être pas.

Erreur 404 lors de l'usage du CAS "hdf"

Hello!
Lors de l'usage du cas "hdf", la bibliothèque essaye quand même d'appeler POST /auth/login (qui retourne un 404 en cas d'usage d'un CAS).

Je me demande si c'est pas lié au fait que mes accès sont bloqués. (j'utilise pour la première fois l'API pour monitorer Pronote, donc j'appelle toutes les 15 secondes).

Je vérifierai lorsque mes accès seront rétablis si c'est seulement un problème permissif quand même !

Unknown CAS "tous"

Salut ! merci pour cette api très utile, j'ai un petit soucis avec mon "cas"

J'essaie ton api avec un pote, lui code sous python et moi sous nodejs, lui n'as aucun problème avec l'api mais moi, sur W10 (comme lui) ou raspbian 9, peut importe node ou python, j'ai toujours la même erreur : "Unknown CAS 'nomducas'

j'ai essayer avec le mien (ac-rouen) ainsi que 'none', avec les login de mon pote et les miens j'ai cette erreur :

    at init (/home/pi/pronote/pronote-api/src/pronote.js:816:38)
    at login (/home/pi/pronote/pronote-api/src/pronote.js:24:24)
    at Object.fetch (/home/pi/pronote/pronote-api/src/pronote.js:197:15)
    at IncomingMessage.req.on (/home/pi/pronote/pronote-api/index.js:30:33)
    at emitNone (events.js:106:13)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
Unknown CAS 'none'

j'ai regardé les anciennes issues et ait trouvé l'ajout de "console.log(body)" en ligne 28 qui me log :

  "type": "fetch",
  "username": "NOMDUCOMPTE", !
  "password": "PASSWORD", !
  "url": "http://lyc-client.ac-rouen.fr:81/", !
  "cas": "none" // ou ac-rouen selon ce que je mets
}

évidemment les entrées finissant par "!" sont censurés

une idée d'où viendrais le problème ?

Récupérer le travail à faire

En appelant session.homeworks, cela renvoie le contenu des cours et non les devoirs à faire, comment faire pour récupérer le travail à faire ?

Proposition

Pouvoir se connecter avec une url plutôt qu'un code car pour certains établissements, pronote n'est pas hébergé chez index education donc le nom de domaine n'est pas le meme.

Problème avec la property 'endwith'

Bonjour:

J'ai tenté d’exécuter le script d'exemple avec quelques modifications

require('dotenv').config({ path: 'dotenv' });

const pronote = require('pronote-api');

const url = process.env.pronoteurl;
const username = process.env.pronoteid;
const password = process.env.pronotepassword;

async function main()
{
    const session = await pronote.login(url, username, password/*, cas*/);
    
    console.log(session.user.name); // Affiche le nom de l'élève
    console.log(session.user.studentClass.name); // Affiche la classe de l'élève
    
    const timetable = await session.timetable(); // Récupérer l'emploi du temps d'aujourd'hui
    const marks = await session.marks(); // Récupérer les notes du trimestre
    
    console.log(`L'élève a ${timetable.length} cours aujourd'hui`); 
    console.log(`et a pour l'instant une moyenne de ${marks.averages.student} ce trimestre.`);
    
    // etc. les fonctions utilisables sont 'timetable', 'marks', 'contents', 'evaluations', 'absences',
    // 'infos', et 'menu', sans oublier les champs 'user' et 'params' qui regorgent d'informations.
}

main().catch(err => {
    if (err.code === pronote.errors.WRONG_CREDENTIALS.code) {
        console.error('Mauvais identifiants');    
    } else {
        console.error(err);
    }
});

Sauf que j'ai un message d'erreur qui apparaît soudainement qui provient du fichier "/src/auth.js" avec une erreur par rapport à la property 'endsWith'

TypeError: Cannot read property 'endsWith' of undefined at getServer (C:\Users\enzoz\Desktop\Apps\Dev\themio-pronote\node_modules\pronote-api\src\auth.js:44:13) at Object.login (C:\Users\enzoz\Desktop\Apps\Dev\themio-pronote\node_modules\pronote-api\src\auth.js:16:20) at main (C:\Users\enzoz\Desktop\Apps\Dev\themio-pronote\index.js:11:35) at Object.<anonymous> (C:\Users\enzoz\Desktop\Apps\Dev\themio-pronote\index.js:26:1) at Module._compile (internal/modules/cjs/loader.js:1076:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10) at Module.load (internal/modules/cjs/loader.js:941:32) at Function.Module._load (internal/modules/cjs/loader.js:782:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47

Je sais pas si vous avez une idée :/

EDIT: J'ai l'impression que ce n'est pas compatible avec dotenv 🤔

SyntaxError: Unexpected token y in JSON at position 1

Error when trying to use the API :
SyntaxError: Unexpected token y in JSON at position 1 at JSON.parse (<anonymous>) at IncomingMessage.<anonymous> (...\pronote-api\index.js:28:31) at IncomingMessage.emit (events.js:215:7) at endReadableNT (_stream_readable.js:1184:12) at processTicksAndRejections (internal/process/task_queues.js:80:21)

Using the POST method with this content :

{
            "type": "fetch",
            "username": pronote[0],
            "password": pronote[1],
            "url": "https://HIDDEN.index-education.net/pronote/",
            "cas": "none"
}

Probleme CAS Bordeaux

Bonjour j'ai un petit problème qui vient peut etre de moi mais mon lycée on eu la bonne idée d'utiliser le cas de ma region ( ac de bordeaux ) donc j'essaye en donnant l'url qui redirige vers le pronote mais ça marche pas si on peut m'aider je prends

erreur server

TypeError: Cannot read property 'V' of undefined
at timetable.donnees.ListeCours.forEach.lesson (/root/nodejs/pronote/src/pro note.js:600:38)
at Array.forEach ()
at readWeek (/root/nodejs/pronote/src/pronote.js:579:38)
at process._tickCallback (internal/process/next_tick.js:68:7)

UNABLE_TO_VERIFY_LEAF_SIGNATURE

Bonjour, bonsoir. Il y'a quelque moment de cela j'ai rencontré un problème avec "pronote-api"

Error: unable to verify the first certificate at TLSSocket.onConnectSecure (_tls_wrap.js:1058:34) at TLSSocket.emit (events.js:198:13) at TLSSocket._finishInit (_tls_wrap.js:636:8)

Pour plus de précision j'utilise le client java fourni pas Litarvan et mes identifiants sont tous correct et je n'utilise pas de CAS. Dites moi si vous voulez le code java :D

PS: Petite précision il me dit 'Unknown CAS none"

Erreur au niveau de cipher.

Bonjour, quand je fais une requête vers mon serveur api pronote, celui-ci me retourne une erreur:

{"error":"Invalid IV length; got 0 bytes and expected 16 bytes."}

Je ne comprend pas pourquoi cela ne marche pas, et pourtant mon code fonctionne dans le localhost d'un ami. Voici également l'erreur que le js me retourne:

image

SyntaxError: Unexpected token

Hi! Can U help me solving this? I can't start index.js
Sorry if seems a stupid problem or question, but i never used npm or any kind of js framework or library... many thanks in advance.

Console output:
Starting...
[directory_path]/src/pronote.js:587
} catch {
^

SyntaxError: Unexpected token {
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object. ([directory_path]/index.js:4:17)

Add a license

Currently we can't use your code for other project, there isn't any licence so it's a big problem for any one would like to use it in official project 👎.

Prb Lycée connecter

Re Bonjour,
Dsl si je spam mais j'ai encore une erreur.
voici le code de l'erreur
{ Error: Cannot find module './generics/openent' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Module.require (internal/modules/cjs/loader.js:692:17) at require (internal/modules/cjs/helpers.js:25:18) at Object.<anonymous> (/home/julien/node_modules/pronote-api/src/cas/lyceeconnecte.js:1:17) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) code: 'MODULE_NOT_FOUND' }
je ne comprend toujours pas si c moi l'erreur ou si ça vienne de lycée connecter

CAS: hdf Erreur

Salut,

la derniere fois tu avais mis a jour le CAS: hdf,
je ne pouvais pas réellement me logué ... effectivement le site était en maintenance (un peu trop souvent d'ailleur...)

actuellement, il est debout? mais j'ai cette erreur, je me permet de t'en faire part:

TypeError: Cannot destructure property `N` of 'undefined' or 'null'.
    at fromPronote (/home/bugs/MagicMirror/node_modules/pronote-api/src/data/objects.js:1:21)
    at getUser (/home/bugs/MagicMirror/node_modules/pronote-api/src/fetch/pronote/user.js:25:24)
    at process._tickCallback (internal/process/next_tick.js:68:7)

peux être un bug ou un oubli de a part ? (lol ... ça m'arrive aussi, je te rassure !)

Tous les devoirs ne sont pas retournés

Bonjour,

Premièrement merci pour cette librairie très utile. J'ai réussi à me connecter mais quand je regarde l'output et plus précisément la partie "homework", je ne vois que 5 sections pour les devoirs alors que lorsque je regarde pronote, il y a beaucoup plus de devoirs (fait ou non).
Avez-vous une idée ? Je dois avouer ne pas avoir regarder le fichier pronote.js pour voir si un critère de date ou autre est la raison de mon problème.

Merci :)

<Response [404]> Not Found

Bonjour,
Ma rêquete renvoie une erreur : <Response [404]> Not Found
Voici la rêquete en question : r = requests.post("http://127.0.0.1:21727/", data=json.dumps(data), headers={"Content-Type": "application/json"})
Bien sur http://127.0.0.1:21727/ et avec comme data :

data = {
    "url": "https://0920145h.index-education.net/pronote/eleve.html",
    "username": "<mon identifiant ENT>",
    "password": "<mon mdp ENT>",
    "cas": "iledefrance"
}

Je passe par l'ENT Région Ile de France ( monlycee.net )

Voila, j'ai pas plus d'infos sur l'erreur, merci beaucoup 🙏

Liste des devoirs et gestion multi élèves

Bonjour,

Je réouvre une issue car j'ai toujours un problème avec la récupération des devoirs. Dans l'output suivant il y a un devoir donné le 15 pour le 22 (avec éventuellement un décalage : UTC vs CET) mais lorsque je regarde la démo, il y a bien un devoir mais le contenu est different:

{
"description": "Choisir un artiste du courant impressionniste et rechercher sa biographie et ses oeuvres célèbres",
"htmlDescription": "

Choisir un artiste du courant impressionniste et rechercher sa biographie et ses oeuvres célèbres
",
"subject": "ARTS PLASTIQUES",
"givenAt": "2020-09-15T22:00:00.000Z",
"for": "2020-09-22T22:00:00.000Z",
"done": false,
"color": "#173ED9",
"files": []
}

image

C'est pareil pour tous les devoirs que j'ai vérifié. Est-ce qu'il y a quelque chose que je ne comprend pas dans la logique?

Aussi, la démo référence 2 élèves (Fanny et Manon) mais "session" semble ne contenir que les informations de Fanny. Est-ce que cette API ne supporte qu'un seul élève? (j'aurais peut-être du ouvrir une autre issue pour ça).

Merci

Add a new server system

The current server system is very dirty. They're no compression, configuration of the request...
You should add in the JSON a field named fields which is an array of string.
So if you only want the homework and grades you could do:

["homework","grades"]

Ajout des modes prof, direction ou viescolaire

Bonjour, et bravo pour ce travail !
En tant que développeur de SambaEdu, je m'intérroge sur la possibilité d'utiliser l'api pour récupérer directement les données de pronote pour synchroniser les comptes utilisateur, et éventuellement les emplois du temps pour permettre l'allumage programmé des ordinateurs. Le mode viescolaire serait idéal pour cela car il donne accès à l'ensemble des données.

Y a-t-il quelque part des explications sur la structure des données, ou doit-on procéder en reverse engineering par analyse des communications entre le navigateur et le serveur ?

Incohérences des heures (timetable)

Dans les données reçues de l'emploi du temps, les cours n'ont pas les bonnes heures, et je n'arrive pas à trouver un motif ou quelque chose pour comprendre:

  • Par exemple, mon premier cours commence à 8h et se termine à 11h. D'après l'API, les timestamp étant respectivement de 1578290400000 à 1578312000000; soit avec la méthode toISOString(), on obtient respectivement 2020-01-06T06:00:00.000Z, et 2020-01-06T12:00:00.000Z; donc d'après l'API mon cours commencerait à 6h et se terminerait à 12h.

J'avais plusieurs hypothèses, d'abord peut-être que les timestamp commencent toujours à 6h mais il faut regarder que l'écart entre les deux dates (from/to), parce que sur mon emploi du temps Pronote même si on à pas de cours à ces heures-ci l'emploi du temps affiche les cours de 6 heures à 22 heures; mais dans ce cas-là pourquoi jusqu'à midi?

De plus mon cours dure trois heures, pas quatre. Encore plus étrange. Ce qui disqualifie aussi une autre hypothèse que j'avais; les heures d'été/d'hiver ou quoi.

Le même problème apparaît aussi par exemple dans le cours d'après, selon l'API le cours commence à 9h et se terminerait à 11h, alors qu'il commence à 11h et se termine à midi.

image

J'utilise le CAS ac-toulouse. En espérant que vous ayez une idée. Merci d'avance!

TypeError: Cannot read property 'L' of undefined

I get this error with an almost-empty account.

Here is the complete trace outputed by node:

TypeError: Cannot read property 'L' of undefined
    at /home/busybox/dev/probote-v2/node_modules/pronote-api/src/fetch/pronote/user.js:46:51
    at fromPronote (/home/busybox/dev/probote-v2/node_modules/pronote-api/src/data/objects.js:21:18)
    at /home/busybox/dev/probote-v2/node_modules/pronote-api/src/data/types.js:73:57
    at Array.map (<anonymous>)
    at Array.value.pronoteMap (/home/busybox/dev/probote-v2/node_modules/pronote-api/src/data/types.js:73:48)
    at getUser (/home/busybox/dev/probote-v2/node_modules/pronote-api/src/fetch/pronote/user.js:42:58)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async Object.login (/home/busybox/dev/probote-v2/node_modules/pronote-api/src/auth.js:37:20)
    at async Object.logIn (/home/busybox/dev/probote-v2/pronote/index.js:8:15)

Modifier des données ?

Bonjour, avec cette API, je suis en train de développer un Logiciel qui récupère les devoirs régulièrement afin d'envoyer des notifications dès l'apparition d'un nouveau devoir.

J'aimerais cependant pouvoir Valider des devoirs (et encore mieux Uploader des fichiers).

Ajout d'une fonction getCas()

Il serait utile d'ajouter une fonction getCas() qui prendrait en paramètre une URL Pronote et qui retournerait un nom de CAS (possible avec un follow redirects pour voir sur quelle URL on est redirigé pour la connexion). (j'en ai parlé avec @Litarvan mais j'ouvre quand même cette issue pour qu'on puisse en discuter ici)

Ajout d'une fonction geo()

Bonjour, j'aimerai pouvoir obtenir la liste des établissement à proximité (comme sur l'application officielle de Pronote). Le fork de wow0000 permet déjà ça, et même si je peux moi-même maintenir ma propre fonction dans mon code, ce serait plus simple qu'elle soit intégrée dans ce module. On pourrait créer un fichier geo.js et l'exporter, ce serait utile et assez simple.
Je peux me charger de faire une PR, mais je voulais d'abord avoir votre avis sur l'intégration de cette fonctionnalité à la lib

Add cas

Salut je suis désolé de te demander ça mais je galère en JS et j'aimerais savoir si tu peux rajouter pour mon académie : http://netocentre.fr/
Merci

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.