Tester une API

Bonjour, je viens de découvrir les API je ne connaissais pas et je trouve ça très intérressant j'ai tester un peux mais sans succès j'ai essayer ça ça n'a rien donné juse le fichier html qui fonctionne

Voici le fichier cours.js
// Accès à la météo de Lyon avec la clé d'accès 50a65432f17cf542
ajaxGet("http://api.wunderground.com/api/50a65432f17cf542/conditions/q/France/Lyon.json", function (reponse) {
var meteo = JSON.parse(reponse);
// Récupération de certains résultats
var temperature = meteo.current_observation.temp_c;
var humidite = meteo.current_observation.relative_humidity;
var imageUrl = meteo.current_observation.icon_url;
// Affichage des résultats
var conditionsElt = document.createElement("div");
conditionsElt.textContent = "Il fait actuellement " + temperature +
"°C et l'humidité est de " + humidite;
var imageElt = document.createElement("img");
imageElt.src = imageUrl;
var meteoElt = document.getElementById("meteo");
meteoElt.appendChild(conditionsElt);
meteoElt.appendChild(imageElt);
});


Et le fichier cours.html
<!doctype html>
<html>

<head>
<meta charset="utf-8">
<title>Utiliser des API</title>
</head>

<body>
<h1>Derniers articles</h1>
<div id="articles">
</div>

<h1>Le Premier Ministre</h1>
<div id="premMin">
</div>

<h1>La météo à Lyon</h1>
<div id="meteo"></div>

<script src="../js/cours.js"></script>
</body>

</html>

J'ai suivis un peut ce tuto
https://openclassrooms.com/fr/courses/3306901-creez-des-pages-web-interactives-avec-javascript/3722361-utilisez-des-api-web

Merci d'avance :D
--
Veuillez indiquer présicément votre problème, nous faisons de notre mieux pour y répondre. Je répond à vos question de 19h à 23h la semaine :)

11 réponses

Résumé de la discussion

Plusieurs développeurs discutent de l'utilisation des API avec JavaScript et des difficultés liées au chargement des scripts, notamment l'inclusion correcte de ajax.js et le recours à des chemins relatifs. Les échanges montrent que la meilleure réponse consiste à corriger ce point en supprimant le préfixe ../js et en chargeant d'abord ajax.js puis cours.js pour lier les scripts. D'autres messages insistent sur l'importance des chemins relatifs et sur les erreurs communes liées aux références des fichiers, avec des conseils pratiques et des exemples concrets. En complément, certains évoquent l'utilisation d'API requérant des clés et des appels AJAX via XMLHttpRequest, en signalant des cas réels comme Weather Underground ou SNCF et les précautions liées à l'exposition des clés.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour,

    Si tu avais fait un copier/coller du tuto.. tu n'aurais pas oublié une ligne visiblement :-)
    <script src="../js/ajax.js"></script>
    


    Bien entendu.. tu as récupéré le fichier ajax.js que tu as mis dans le répertoire de ton site .... comme indiqué ici :

    Copiez le fichierajax.jsissu du chapitre précédent dans le répertoire


    1. Modérateur
      Le contenu du fichier ajax.js
      // Exécute un appel AJAX GET
      // Prend en paramètres l'URL cible et la fonction callback appelée en cas de succès
      function ajaxGet(url, callback) {
          var req = new XMLHttpRequest();
          req.open("GET", url);
          req.addEventListener("load", function () {
              if (req.status >= 200 && req.status < 400) {
                  // Appelle la fonction callback en lui passant la réponse de la requête
                  callback(req.responseText);
              } else {
                  console.error(req.status + " " + req.statusText + " " + url);
              }
          });
          req.addEventListener("error", function () {
              console.error("Erreur réseau avec l'URL " + url);
          });
          req.send(null);
      }
      
    2. @jordane45Tout d'abord merci pour votre réponse, alors j'ai donc trois fichier dans le même dossier que j'ai mis sur le bureau qui ce nomme "tes"
      j'ai donc "cours.html"
      <!doctype html>
      <html>

      <head>
      <meta charset="utf-8">
      <title>Utiliser des API</title>
      </head>

      <body>
      <h1>Derniers articles</h1>
      <div id="articles">
      </div>

      <h1>Le Premier Ministre</h1>
      <div id="premMin">
      </div>

      <h1>La météo à Lyon</h1>
      <div id="meteo"></div>

      <script src="../js/ajax.js"></script>
      <script src="../js/cours.js"></script>
      </body>

      </html>


      Ensuite j'ai "cours.js"
      var premMinElt = document.getElementById("premMin");
      // Accès aux informations publiques sur le Premier Ministre
      ajaxGet("https://www.data.gouv.fr/api/1/organizations/premier-ministre/", function (reponse) {
      var premierMinistre = JSON.parse(reponse);
      // Ajout de la description et du logo dans la page web
      var descriptionElt = document.createElement("p");
      descriptionElt.textContent = premierMinistre.description;
      var logoElt = document.createElement("img");
      logoElt.src = premierMinistre.logo;
      premMinElt.appendChild(descriptionElt);
      premMinElt.appendChild(logoElt);
      });


      et j'ai "ajax.js"
      // Exécute un appel AJAX GET
      // Prend en paramètres l'URL cible et la fonction callback appelée en cas de succès
      function ajaxGet(url, callback) {
      var req = new XMLHttpRequest();
      req.open("GET", url);
      req.addEventListener("load", function () {
      if (req.status >= 200 && req.status < 400) {
      // Appelle la fonction callback en lui passant la réponse de la requête
      callback(req.responseText);
      } else {
      console.error(req.status + " " + req.statusText + " " + url);
      }
      });
      req.addEventListener("error", function () {
      console.error("Erreur réseau avec l'URL " + url);
      });
      req.send(null);
      }
    3. Modérateur
      Tu dis :

      alors j'ai donc trois fichier dans le même dossier

      .... mais .. les fichiers js ... tu les as mis dans un sous-répertoire "js" comme indiqué dans le code que tu utilises ???
      <script src="../js/ajax.js"></script>
       <script src="../js/cours.js"></script>

      Ou alors tu modifies le code pour retirer le dossier js .. à toi de voir !
    4. Ah je ne savais pas ca je n'ai pas créer de sous répertoire js mais je préfère modifier mon code. J'ai créer un dossier sur mon bureau s'appelant test et dans ce dossier ce trouve les trois fichiers. Que dois-je mettre dans le code du coup ?
    5. Modérateur
      @team-offBen tout simplement la même chose .. mais sans le ../js
      C'est la base à connaitre ... les chemins relatifs !
      <script src="ajax.js"></script>
       <script src="cours.js"></script>
      
  2. J'ai fais les modifications et ça ne fonctionne toujours pas... ça me donne comme avant c'est à dire ça :




    Voici le code index.html
    <!doctype html>
    <html>

    <head>
    <meta charset="utf-8">
    <title>Utiliser des API</title>
    </head>

    <body>
    <h1>Derniers articles</h1>
    <div id="articles">
    </div>

    <h1>Le Premier Ministre</h1>
    <div id="premMin">
    </div>

    <h1>La météo à Lyon</h1>
    <div id="meteo"></div>

    <<script src="../js/ajax.js"></script>
    <script src="../js/cours.js"></script>
    </body>

    </html>


    Le code cours.js

    var premMinElt = document.getElementById("premMin");
    // Accès aux informations publiques sur le Premier Ministre
    ajaxGet("https://www.data.gouv.fr/api/1/organizations/premier-ministre/", function (reponse) {
    var premierMinistre = JSON.parse(reponse);
    // Ajout de la description et du logo dans la page web
    var descriptionElt = document.createElement("p");
    descriptionElt.textContent = premierMinistre.description;
    var logoElt = document.createElement("img");
    logoElt.src = premierMinistre.logo;
    premMinElt.appendChild(descriptionElt);
    premMinElt.appendChild(logoElt);
    });


    Et ajax.js

    // Exécute un appel AJAX GET
    // Prend en paramètres l'URL cible et la fonction callback appelée en cas de succès
    function ajaxGet(url, callback) {
    var req = new XMLHttpRequest();
    req.open("GET", url);
    req.addEventListener("load", function () {
    if (req.status >= 200 && req.status < 400) {
    // Appelle la fonction callback en lui passant la réponse de la requête
    callback(req.responseText);
    } else {
    console.error(req.status + " " + req.statusText + " " + url);
    }
    });
    req.addEventListener("error", function () {
    console.error("Erreur réseau avec l'URL " + url);
    });
    req.send(null);
    }

    1. Modérateur
      Relis ton code... tu as laisse les memes chemins...
  3. Ah oui j'ai oubliée ma cervelle aujourd'hui ça fonctionne merci mais par exemple la sncf publie des API aussi j'aurais voulu essayer mais impossible donc je récupère le code grâce à post man je récupère le code de ce lien "https://api.sncf.com/v1". Ensuite je crée un dossier qui ce trouve sur le bureau je le nomme test2 dans ce dossier je crée un fichier HTML ce nommant test.html

    <!doctype html>
    <html>

    <head>
    <meta charset="utf-8">
    <title>Utiliser des API</title>
    </head>

    <body>
    <h1>Derniers articles</h1>
    <div id="articles">
    </div>

    <h1>Le Premier Ministre</h1>
    <div id="premMin">
    </div>

    <h1>La météo à Lyon</h1>
    <div id="meteo"></div>

    <script src="teste.js"></script>

    </html>


    Et ça ne fonctionne pas :(

    Veuillez indiquer présicément votre problème, nous faisons de notre mieux pour y répondre. Je répond à vos question de 19h à 23h la semaine :)
    1. Modérateur
      Que contient ton fichier teste.js ?
    2. Alors voici les fichiers

      index.html (qui était avant test.html)

      <!doctype html>
      <html>

      <head>
      <meta charset="utf-8">
      <title>Utiliser des API</title>
      </head>

      <body>
      <h1>Derniers articles</h1>
      <div id="articles">
      </div>

      <h1>Le Premier Ministre</h1>
      <div id="premMin">
      </div>

      <h1>La météo à Lyon</h1>
      <div id="meteo"></div>

      <script src="cours.js"></script>

      </html>


      Et voici cours.js (qui était avant teste.js)

      {
      "links": [
      {
      "title": "Coverage of navitia",
      "href": "https://api.sncf.com/v1/coverage/",
      "type": "coverage",
      "rel": "coverage",
      "templated": false
      },
      {
      "title": "Inverted geocoding for a given coordinate",
      "href": "https://api.sncf.com/v1/coord/0.0%3B0.0/",
      "type": "coord",
      "rel": "coord",
      "templated": true
      },
      {
      "title": "Compute journeys",
      "href": "https://api.sncf.com/v1/journeys",
      "type": "journeys",
      "rel": "journeys",
      "templated": false
      },
      {
      "title": "Autocomplete api",
      "href": "https://api.sncf.com/v1/places",
      "type": "places",
      "rel": "places",
      "templated": false
      }
      ]
      }
    3. Modérateur
      @team-offle problème c'est que tu as remplacé du code ... par un objet json....
      Normal que ça ne marche pas.
      Il faut que tu remettes l'ancien fichier cours.js et que dedans .. tu changes juste l'url pour taper sur l'API (https://api.sncf.com/v1

      par exemple :
      //url de l'api ciblée
      var url_de_api = "https://api.sncf.com/v1";
      
      // Accès aux informations publiques sur le Premier Ministre
      var premMinElt = document.getElementById("premMin");
      
      ajaxGet(url_de_api, function (reponse) {
          var repJson = JSON.parse(reponse);
      
          // Ici .. tu peux mettre le code de traitement que tu veux pour cette reponse...
          // par exemple : affiche dans la CONSOLE du navigateur la réponse   
           console.log(repJson);
        
      });
      
  4. Alors j'ai copiè ce que vous m'avais donner je l'ai placer dans "cours.js" (pour essayer bien-sûr)

    cours.js

    //url de l'api ciblée
    var url_de_api = "https://api.sncf.com/v1";

    // Accès aux informations publiques sur le Premier Ministre
    var premMinElt = document.getElementById("premMin");

    ajaxGet(url_de_api, function (reponse) {
    var repJson = JSON.parse(reponse);

    // Ici .. tu peux mettre le code de traitement que tu veux pour cette reponse...
    // par exemple : affiche dans la CONSOLE du navigateur la réponse
    console.log(repJson);

    });


    index.html

    <!doctype html>
    <html>

    <head>
    <meta charset="utf-8">
    <title>Utiliser des API</title>
    </head>

    <body>
    <h1>Derniers articles</h1>
    <div id="articles">
    </div>

    <h1>Le Premier Ministre</h1>
    <div id="premMin">
    </div>

    <h1>La météo à Lyon</h1>
    <div id="meteo"></div>

    <script src="cours.js"></script>
    </html>


    Et ça ne fonctionne pas...
    1. Modérateur
      Comment tu sais que çà ne marche pas ?
      Que t'affiche la console de ton navigateur ??
  5. La console me dit ça :

    1. Modérateur
      Tu as bien inclus le fichier ajax.js ???
  6. Ah non je ne savais pas mais le "ajax.js" je le laisse tel quels ?
    1. Modérateur
      ..ben oui.
      Sais tu ce qu'est une FONCTION ?

      Dans ton fichier tu fais appel à une fonction ... la fonction ajaxGet .
      Cette fonction est écrite dans le fichier ajax.js .. sans ça .. normal que ça ne marche pas !

      Enfin bon.... sachant que ce fichier était présent dans ton premier exemple ... je ne comprend pas par quelle mystère tu as décidé de le retirer ....... (en pensant que ça ne changerait rien... Oo )
    2. @jordane45J'ai remis le fichier ajax.js dans le dossier et j'ai indiqué au fichier HTML que ajax.js était present mais ça ne fonctionne pas...
    3. Modérateur
      @team-offEt qu'est-ce qui s'affiche dans la console ?
  7. Alors j'ai exactement la même erreur que la dernière fois
    1. Modérateur
      Tu peux me montrer le code modifié que tu utilises ?
    2. Le code ajax.js ?
    3. Modérateur
      @team-offTOUS .... histoire d'être bien sûr.
  8. Voici index.html

    <!doctype html>
    <html>

    <head>
    <meta charset="utf-8">
    <title>Utiliser des API</title>
    </head>

    <body>
    <h1>Derniers articles</h1>
    <div id="articles">
    </div>

    <h1>Le Premier Ministre</h1>
    <div id="premMin">
    </div>

    <h1>La météo à Lyon</h1>
    <div id="meteo"></div>

    <script src="cours.js"></script>
    <script src="ajax.js"></script>
    </html>


    Voici cours.js

    var premMinElt = document.getElementById("premMin");
    // Accès aux informations publiques sur le Premier Ministre
    ajaxGet("https://api.sncf.com/v1", function (reponse) {
    var premierMinistre = JSON.parse(reponse);
    // Ajout de la description et du logo dans la page web
    var descriptionElt = document.createElement("p");
    descriptionElt.textContent = premierMinistre.description;
    var logoElt = document.createElement("img");
    logoElt.src = premierMinistre.logo;
    premMinElt.appendChild(descriptionElt);
    premMinElt.appendChild(logoElt);
    });


    Et voici ajax.js

    // Exécute un appel AJAX GET
    // Prend en paramètres l'URL cible et la fonction callback appelée en cas de succès
    function ajaxGet(url, callback) {
    var req = new XMLHttpRequest();
    req.open("GET", url);
    req.addEventListener("load", function () {
    if (req.status >= 200 && req.status < 400) {
    // Appelle la fonction callback en lui passant la réponse de la requête
    callback(req.responseText);
    } else {
    console.error(req.status + " " + req.statusText + " " + url);
    }
    });
    req.addEventListener("error", function () {
    console.error("Erreur réseau avec l'URL " + url);
    });
    req.send(null);
    }


    1. Modérateur
      Fais l'import d'ajax.js AVANT cours.js

      Puis dans cours.js remplace ton code par celui-ci
      //url de l'api ciblée
      var url_de_api = "https://api.sncf.com/v1";
      
      // Accès aux informations publiques sur le Premier Ministre
      var premMinElt = document.getElementById("premMin");
      
      ajaxGet(url_de_api, function (reponse) {
          var repJson = JSON.parse(reponse);
      
          // Ici .. tu peux mettre le code de traitement que tu veux pour cette reponse...
          // par exemple : affiche dans la CONSOLE du navigateur la réponse   
           console.log(repJson);
        
      });
      
    2. @jordane45Comment ça l'import d'ajax.js avant cours.js ?
    3. Modérateur
      @team-offBen .. au lieu de
      <script src="cours.js"></script>
      <script src="ajax.js"></script>
      

      tu inverses comme ceci :
      <script src="ajax.js"></script>
       <script src="cours.js"></script>
      
      
  9. Ça ne fonctionne toujours pas voici les fichiers :

    index.html
    <!doctype html>
    <html>

    <head>
    <meta charset="utf-8">
    <title>Utiliser des API</title>
    </head>

    <body>
    <h1>Derniers articles</h1>
    <div id="articles">
    </div>

    <h1>Le Premier Ministre</h1>
    <div id="premMin">
    </div>

    <h1>La météo à Lyon</h1>
    <div id="meteo"></div>

    <script src="ajax.js"></script>
    <script src="cours.js"></script>
    </html>


    cours.js
    //url de l'api ciblée
    var url_de_api = "https://api.sncf.com/v1";

    // Accès aux informations publiques sur le Premier Ministre
    var premMinElt = document.getElementById("premMin");

    ajaxGet(url_de_api, function (reponse) {
    var repJson = JSON.parse(reponse);

    // Ici .. tu peux mettre le code de traitement que tu veux pour cette reponse...
    // par exemple : affiche dans la CONSOLE du navigateur la réponse
    console.log(repJson);

    });


    et ajax.js
    // Exécute un appel AJAX GET
    // Prend en paramètres l'URL cible et la fonction callback appelée en cas de succès
    function ajaxGet(url, callback) {
    var req = new XMLHttpRequest();
    req.open("GET", url);
    req.addEventListener("load", function () {
    if (req.status >= 200 && req.status < 400) {
    // Appelle la fonction callback en lui passant la réponse de la requête
    callback(req.responseText);
    } else {
    console.error(req.status + " " + req.statusText + " " + url);
    }
    });
    req.addEventListener("error", function () {
    console.error("Erreur réseau avec l'URL " + url);
    });
    req.send(null);
    }


    1. Modérateur
      Quand tu dis : ça ne fonctionne pas ... c'est à dire ??? Tu as toujours le message d'erreur ? Tu as bien fais un CTRL + F5 dans ton navigateur pour rafraichir tout en vidant son cache ?
      Ou bien c'est juste que ça ne fait pas ce que tu veux ???

      Quoi qu'il en soit .. qu'est-ce qui apparait dans la console ?

      J'ai retesté de mon côté hier et n'ai eu aucun souci.....
  10. Alors j'ai toujours la même erreur c'est vraiment bisard et pour la console je fait touche "Ctrl"+flèche haut+"J"


    Veuillez indiquer présicément votre problème, nous faisons de notre mieux pour y répondre. Je répond à vos question de 19h à 23h la semaine :)
    1. Ca fonctionne super content !! Merci beaucoup mais je comprend pas quand je met une autre api qui demande un num d'uttilisateur que j'ai bien rentrèe ca fonctionne avec cette API "https://api.sncf.com/v1/coverage/sncf/places?q=Paris" ca ne fonctionne pas je dois bien rentrée ma clé mais je dois la mettre dans le code j'ai ça comme erreur avec cette API qui ne demande pas de code "https://api.sncf.com/v1/coverage/sncf/journeys?from=admin:fr:75056&to=admin:fr:69123&datetime=20170501T232424"