EduWireApps / ecoledirecte-api-docs

70 stars 15 forks source link

Télécharger un document depuis l'API ? #6

Closed RetroAndDev closed 1 year ago

RetroAndDev commented 1 year ago

Bonjour, Déjà merci pour cette doc. Elle est complète et simple à comprendre.

Mais je souhaiterais savoir comment télécharger un document. J'ai déjà trouvé l'URL : https://api.ecoledirecte.com/v3/telechargement.awp?verbe=get&fichierId=&leTypeDeFichier=Doc&archive=false&anneeArchive=&v=4.25.0 Le truc, c'est que le fichier ne se télécharge pas. J'obtiens juste une chaine de caractères assez bizarre : JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhmci1GUikgL1N0cnVjdFRyZWVSb290IDQyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMjkxIDAgUi9WaWV3ZXJQcmVmZXJlbmNlcyAyOTIgMCBSPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvVHlwZS9QYWdlcy9Db3VudCAxL0tpZHNbIDQgMCBSXSA+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9BdXRob3IoU29waGllIFNQLiBQRVRSSSkgL0NyZWF0aW9uRGF0ZShEOjIwMjIxMjEyMDgzMTAxKzAxJz etc.... (elle n'est pas complète).

On dirait du Base 64 et en effet, je trouve quelque chose en la décodant avec un site (https://www.base64decode.org/) : %PDF-1.7 %µµµµ 1 0 obj <</Type/Catalog/Pages 2 0 R/Lang(fr-FR) /StructTreeRoot 42 0 R/MarkInfo<</Marked true>>/Metadata 291 0 R/ViewerPreferences 292 0 R>> endobj 2 0 obj <</Type/Pages/Count 1/Kids[ 4 0 R] >> endobj 3 0 obj

Mais le truc, c'est que le fichier n'est pas téléchargé. Voici les headers de la requête / réponse (extrait avec les outils de dev de Firefox) : https://pastebin.com/NrTwsSTB

Mon but étant d'implémenter le téléchargement de documents (devoirs/doc eleves) depuis un client C# (Windows) et Swift (macOS). Mais quand je mets les données téléchargées dans un fichier, celui-ci n'est pas reconnu par Word ou Firefox (PDF) (Mon client EcoleDirecte : AltDirecte)

Je pensais alors ouvrir le navigateur pour faire télécharger le fichier, mais impossible de lui fournir le X-Token en headers, alors existe-t-il un autre moyen de lui passer le X-Token ou de faire télécharger le fichier ?

Exemple avec un fichier Word téléchargé depuis le cahier de texte exemple word.txt

kekaaafm commented 1 year ago

Bonjour,

Je suis désolé mais je ne me suis pas penché sur la question du téléchargement des documents et d'autres projets personnels / professionnels ont pris le dessus. Je n'ai, à ce jour, plus accès a un compte ED et ce projet de documentation n'est plus sur ma liste de priorité. Cependant tu peux toujours regarder comment yNotes téléchargeait les documents (car il me semble que c'était possible) => https://github.com/EduWireApps/ynotes

Je laisse l'issue ouverte pour quelques jours encore si jamais tu as d'autres questions :)

azgaresncf commented 10 months ago

Bonjour, Déjà merci pour cette doc. Elle est complète et simple à comprendre.

Mais je souhaiterais savoir comment télécharger un document. J'ai déjà trouvé l'URL : https://api.ecoledirecte.com/v3/telechargement.awp?verbe=get&fichierId=&leTypeDeFichier=Doc&archive=false&anneeArchive=&v=4.25.0 Le truc, c'est que le fichier ne se télécharge pas. J'obtiens juste une chaine de caractères assez bizarre : JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhmci1GUikgL1N0cnVjdFRyZWVSb290IDQyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMjkxIDAgUi9WaWV3ZXJQcmVmZXJlbmNlcyAyOTIgMCBSPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvVHlwZS9QYWdlcy9Db3VudCAxL0tpZHNbIDQgMCBSXSA+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9BdXRob3IoU29waGllIFNQLiBQRVRSSSkgL0NyZWF0aW9uRGF0ZShEOjIwMjIxMjEyMDgzMTAxKzAxJz etc.... (elle n'est pas complète).

On dirait du Base 64 et en effet, je trouve quelque chose en la décodant avec un site (https://www.base64decode.org/) : %PDF-1.7 %µµµµ 1 0 obj <</Type/Catalog/Pages 2 0 R/Lang(fr-FR) /StructTreeRoot 42 0 R/MarkInfo<</Marked true>>/Metadata 291 0 R/ViewerPreferences 292 0 R>> endobj 2 0 obj <</Type/Pages/Count 1/Kids[ 4 0 R] >> endobj 3 0 obj

Mais le truc, c'est que le fichier n'est pas téléchargé. Voici les headers de la requête / réponse (extrait avec les outils de dev de Firefox) : https://pastebin.com/NrTwsSTB

Mon but étant d'implémenter le téléchargement de documents (devoirs/doc eleves) depuis un client C# (Windows) et Swift (macOS). Mais quand je mets les données téléchargées dans un fichier, celui-ci n'est pas reconnu par Word ou Firefox (PDF) (Mon client EcoleDirecte : AltDirecte)

Je pensais alors ouvrir le navigateur pour faire télécharger le fichier, mais impossible de lui fournir le X-Token en headers, alors existe-t-il un autre moyen de lui passer le X-Token ou de faire télécharger le fichier ?

Exemple avec un fichier Word téléchargé depuis le cahier de texte exemple word.txt

Oui, Firefox encrypte automatiquement en Base64 les réponses faites à des API (je ne comprends pas même l'intérêt qu'il fasse ça au passage 🤷🏻‍♂️).

Pour expliquer, la requête https://api.ecoledirecte.com/v3/telechargement.awp est faite en POST, et n'est initialement faite pour télécharger des documents, mais pour les AFFICHER depuis ED.

Comme marqué dans la documentation depuis : La réponse est le contenu du document.

Il suffit alors de transposer la réponse complète de la requête directement sur un fichier en .pdf.

RetroAndDev commented 10 months ago

👌 Parfait. J'essayerais quand je ferais la v2 de mon App Question sais tu comment marche aussi le téléchargement depuis les espaces de travail ?

azgaresncf commented 10 months ago

👌 Parfait. J'essayerais quand je ferais la v2 de mon App Question sais tu comment marche aussi le téléchargement depuis les espaces de travail ?

Tout dépend de si le document que tu souhaites télécharger est publiée sur ED ou sur un site externe. Si il est interne (publié sur ED), il suffit de faire une requête basique à https://api.ecoledirecte.com/v3/telechargement.awp?verbe=get&fichierId=(chemin vers le fichier en question)&leTypeDeFichier=CLOUD&idEntity=(ID de l'espace de travail)&typeEntity=W.

Je vais essayer de me renseigner vite fait concernant les documents externes.

azgaresncf commented 10 months ago

👌 Parfait. J'essayerais quand je ferais la v2 de mon App Question sais tu comment marche aussi le téléchargement depuis les espaces de travail ?

N'hésite pas à m'envoyer un message sur Discord, j'essayerais de t'aider à intégrer l'API si jamais tu as besoin.

RetroAndDev commented 10 months ago

Okay je ferais un test "demain" avec Postman. En parlant de doc externe, quand on ouvre un manuel cela fait une redirection via api.ecoledirecte.com mais je n'arrive pas à lui fournir le Token saurais tu comment lui fournir ? (J'ai essayé via l'URL, les header mais il dit toujours que le token a expiré alors que non)

azgaresncf commented 10 months ago

Okay je ferais un test "demain" avec Postman. En parlant de doc externe, quand on ouvre un manuel cela fait une redirection via api.ecoledirecte.com mais je n'arrive pas à lui fournir le Token saurais tu comment lui fournir ? (J'ai essayé via l'URL, les header mais il dit toujours que le token a expiré alors que non)

Un manuel ? Si tu parles de manuel scolaire, je n'ai malheureusement accès à aucun d'entre eux.

RetroAndDev commented 10 months ago

👌 Parfait. J'essayerais quand je ferais la v2 de mon App Question sais tu comment marche aussi le téléchargement depuis les espaces de travail ?

N'hésite pas à m'envoyer un message sur Discord, j'essayerais de t'aider à intégrer l'API si jamais tu as besoin.

Okay je fait cela

RetroAndDev commented 10 months ago

Okay je ferais un test "demain" avec Postman. En parlant de doc externe, quand on ouvre un manuel cela fait une redirection via api.ecoledirecte.com mais je n'arrive pas à lui fournir le Token saurais tu comment lui fournir ? (J'ai essayé via l'URL, les header mais il dit toujours que le token a expiré alors que non)

Un manuel ?

Si tu parles de manuel scolaire, je n'ai malheureusement accès à aucun d'entre eux.

Ah okay, peut être via les cookies. J'essayerais

azgaresncf commented 10 months ago

Okay je ferais un test "demain" avec Postman. En parlant de doc externe, quand on ouvre un manuel cela fait une redirection via api.ecoledirecte.com mais je n'arrive pas à lui fournir le Token saurais tu comment lui fournir ? (J'ai essayé via l'URL, les header mais il dit toujours que le token a expiré alors que non)

Un manuel ? Si tu parles de manuel scolaire, je n'ai malheureusement accès à aucun d'entre eux.

Néanmoins, je peux essayer de voir son fonctionnement avec les fichiers javascript d'ED, mais ça risque de prendre juste un peu plus de temps.

Aurais-tu des endpoints que ED utilise pour ouvrir ces dits-manuels afin d'affiner mes recherches ?

RetroAndDev commented 10 months ago

Oui je peux te les donner "demain" enfin tout à l'heure. J'ai pas accès à mon mac pour le momen

azgaresncf commented 10 months ago

Oui je peux te les donner "demain" enfin tout à l'heure. J'ai pas accès à mon mac pour le momen

Aucun souci 👌🏻

azgaresncf commented 10 months ago

image Ma piste de recherche va commencer à partir de cet endpoint

RetroAndDev commented 10 months ago

Oui, cela donne une Array des manuels. Mais après c'est pour l'ouvrir le problème.

azgaresncf commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

RetroAndDev commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

Bonne question, je crois que c'est l'URL qui redirige vers le service du manuel.

azgaresncf commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

Bonne question, je crois que c'est l'URL qui redirige vers le service du manuel.

Tout dépend de quel service il s'agit (LeLivreScolaire ? Un CAS externe ?)

azgaresncf commented 10 months ago

(PS: si tu ne souhaites communiquer certaines données, je t'invite plutôt de le faire à partir de discord (@azgaresncf))

RetroAndDev commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

Bonne question, je crois que c'est l'URL qui redirige vers le service du manuel.

Tout dépend de quel service il s'agit (LeLivreScolaire ? Un CAS externe ?)

Oui c'est cela. Si le manuel est sur BiblioManuels ou Educadhoc par exemple cela va rediriger sur le site du service pour consulter ou télécharger le manuel

azgaresncf commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

Bonne question, je crois que c'est l'URL qui redirige vers le service du manuel.

Tout dépend de quel service il s'agit (LeLivreScolaire ? Un CAS externe ?)

Oui c'est cela. Si le manuel est sur BiblioManuels ou Educadhoc par exemple cela va rediriger sur le site du service pour consulter ou télécharger le manuel

Quel enfer :')

RetroAndDev commented 10 months ago

(PS: si tu ne souhaites communiquer certaines données, je t'invite plutôt de le faire à partir de discord (@azgaresncf))

Okay, de toute façon je vais allez me coucher je pourrais continuer a voir demain et à aider pour la doc (D'ailleurs la doc est bien mieux j'avais pas vu les dernières modifications bravo à vous)

azgaresncf commented 10 months ago

(PS: si tu ne souhaites communiquer certaines données, je t'invite plutôt de le faire à partir de discord (@azgaresncf))

Okay, de toute façon je vais allez me coucher je pourrais continuer a voir demain et à aider pour la doc (D'ailleurs la doc est bien mieux j'avais pas vu les dernières modifications bravo à vous)

Aucun souci 👌🏻 Bonne nuit à toi !

RetroAndDev commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

Bonne question, je crois que c'est l'URL qui redirige vers le service du manuel.

Tout dépend de quel service il s'agit (LeLivreScolaire ? Un CAS externe ?)

Oui c'est cela. Si le manuel est sur BiblioManuels ou Educadhoc par exemple cela va rediriger sur le site du service pour consulter ou télécharger le manuel

Quel enfer :')

Oui l'api de ED est vraiment mal foutue. Je me demande comment ils font...

azgaresncf commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

Bonne question, je crois que c'est l'URL qui redirige vers le service du manuel.

Tout dépend de quel service il s'agit (LeLivreScolaire ? Un CAS externe ?)

Oui c'est cela. Si le manuel est sur BiblioManuels ou Educadhoc par exemple cela va rediriger sur le site du service pour consulter ou télécharger le manuel

Quel enfer :')

Oui l'api de ED est vraiment mal foutue. Je me demande comment ils font...

Mieux vaut ça que PRONOTE... (je te laisse aller lire le protocole de leur API (en Anglais), où Index-Education essaye de faire en sorte que l'API soit tout simplement incompréhensible par les utilisateurs pour notamment éviter une utilisation tierce de leurs services (=autre que par leur site).

Pour te faire simple, c'est un mélange de web-scraping et de requêtes "chiffrées" et trackées à la moindre action. Si tu fais un oubli même d'une simple requête, tu te fais automatiquement rejeter par l'API.

azgaresncf commented 10 months ago

Qu'affiche-t-il comme d'exemple d'urlTelechargement ?

Bonne question, je crois que c'est l'URL qui redirige vers le service du manuel.

Tout dépend de quel service il s'agit (LeLivreScolaire ? Un CAS externe ?)

Oui c'est cela. Si le manuel est sur BiblioManuels ou Educadhoc par exemple cela va rediriger sur le site du service pour consulter ou télécharger le manuel

Quel enfer :')

Oui l'api de ED est vraiment mal foutue. Je me demande comment ils font...

Mieux vaut ça que PRONOTE... (je te laisse aller lire le protocole de leur API (en Anglais), où Index-Education essaye de faire en sorte que l'API soit tout simplement incompréhensible par les utilisateurs pour notamment éviter une utilisation tierce de leurs services (=autre que par leur site).

Pour te faire simple, c'est un mélange de web-scraping et de requêtes "chiffrées" et trackées à la moindre action. Si tu fais un oubli même d'une simple requête, tu te fais automatiquement rejeter par l'API.

Au passage, IE fait automatiquement pression sur certains projets (plus d'actualité normalement), dont je ne comprends pas la motivation (les raisons de pourquoi ils souhaitent mettre la pression sur ces projets paraissent juste vagues et totalement dénuées de sens).

EcoleDirecte quant à lui, ne dispose d'aucune interdiction précisée concernant l'utilisation tierce de leur API, même si il fait gaffe au moindre formatage de requête par exemple.

EDIT: Index-Education interdit bien l'utilisation de client-tiers :

En tant qu'utilisateur de nos sites internet, vous vous interdisez : [...] d'y accéder ou de les utiliser par le biais de technologies autres que celles prévues par INDEX ÉDUCATION, [...] de procéder à toute modification, adaptation, traduction, rétro-ingénierie, décompilation ou désassemblage, sauf dans les cas expressément autorisés par la législation en vigueur, [...] d'utiliser tout dispositif manuel ou automatique permettant toute récupération de donnée sans notre autorisation expresse écrite.

Pour autant, ils n'ont pas l'air de se rendre compte que la document de leur API prend de plus en plus d'ampleur, à tel point qu'ils en ont plus rien à faire.