Bonjour,
J'utilise l'API de VisuGPX pour automatiquement modifier le GPX d'une trace (tel que documenté sous https://www.visugpx.com/api/documentation_api.php).
Avec la requête POST /api/modify/{id}, tout semble fonctionner mais ma trace n'est pas mise à jour.
Voici ma requête (en Node.JS) :
const exportTraceId = 'fKvc5LPbla';
let ret = await fetch(`https://www.visugpx.com/api/modify/${exportTraceId}`, {
method: 'POST',
headers: {
cle: VisuCle,
},
gpx: xml,
});
let txt = await ret.text();
avec la variable xml qui est une chaîne de caractère contenant le contenu d'un GPX licite
Quand je l'éxécute, j'ai un retour avec
ret.status=200
et txt='{"modified": fKvc5LPbla}'
Pourtant ma trace sous https://www.visugpx.com/fKvc5LPbla n'a pas été mise à jour.
Merci d'avance.
Bonsoir, effectivement ! C'est corrigé. Je file, la dinde brûle !
Bonnes fêtes
Bonsoir,
Joyeux Noël.
Je suis désolé mais je n'y arrive toujours pas.
J'ai toujours un retour {"modified": fKvc5LPbla}
mais sans modification quand je rafraîchis https://www.visugpx.com/fKvc5LPbla
J'ai essayé plusieurs modifications.
Notamment passer l'argument en JSON, mais rien n'y fait :
async function metMultitraceSurVisuGpx(gpx) {
let body = JSON.stringify({ gpx: gpx.toXml() });
// const params = new URLSearchParams();
// params.append('gpx', gpx.toXml());
let ret = await fetch(`https://www.visugpx.com/api/modify/${exportTraceId}`, {
method: 'POST',
headers: {
cle: VisuCle,
'Content-Type': 'application/json',
},
body,
});
let txt = await ret.text();
console.log(`Terminé : Mise à jour de la trace ${exportTraceId} avec retour : `, txt);
return ret;
}
Merci d'avance.
Bonjour, je vous ai relu et je comprend.
En fait le fichier devait être envoyé comme une donnée de formulaire (formData), pas comme une chaine de caractère. Je viens de modifier l'API pour autoriser les 2, ça doit être mieux, merci de confirmer. Veillez juste à ce que votre fichier soit correctement url-encodé avant de l'envoyer, je ne sais pas si Node?js gère ça en natif.
Cdlt
Bonjour,
Désolé mais je n'y arrive toujours pas.
Si je passe en données de formulaire plutôt qu'en encodage JSON, voici le début de la chaîne de caractères que mon programme envoie dans le body de la requête POST.
gpx=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22+standalone%3D%22no%22+%3F%3E%3Cgpx+xmlns%3D%22http%3A%2F%2Fwww.topografix.com%2FGPX%2F1%2F1%22+xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance%22+xsi%3AschemaLocation%3D%22http%3A%2F%2Fwww.topografix.com%2FGPX%2F1%2F1+http%3A%2F%2Fwww.topografix.com%2FGPX%2F1%2F1%2Fgpx.xsd%22+version%3D%221.1%22+creator%3D%22tourmagne.bike%22%3E%3Cmetadata%3E%3Cname%3ETourmagne+v20231226%3C%2Fname%3E%3C%2Fmetadata%3E%3Cwpt+lat%3D%2747.97532%27+lon%3D%272.77147%27%3E%3Cele%3E115.6%3C%2Fele%3E%3Ctype%3E%3C%21%5BCDATA%5Bboulangerie%5D
et ça continue sur un gros flux GPX URL-encodé.
Ça devrait marcher ainsi, non ?
Est-il possible d'avoir plus de verbiage dans la chaîne de caractères de retour plutôt que {"modified": fKvc5LPbla}, ça m'aiderait à comprendre où ça échoue ?
D'avance merci.
Bonjour,
L'envoi du fichier est facultatif car il est possible de modifier uniquement les données liées à la fiche (titre, description, ...). Le verbiage de la chaine de retour signifie que tout s'est bien passé... car le serveur ne reçoit pas la donnée gpx (sinon, soit elle serait traitée, soit ça retournerait une erreur).
Les données attendues sont de type formulaire web, l'entête correspondant est soit "application/x-www-form-urlencoded" si la variable gpx est de type text (contenu du fichier GPX encodé), soit "multiform/part-data" si elle est de type type file.
Essayez de tester avec https://chromewebstore.google.com/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm
Deux exemples
1. Avec application/x-www-form-urlencoded et erreur
2. Avec multiform/part-data et sucess