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. 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"


    1. 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. Ç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.....
      2. 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>
          
          
      3. 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.
      4. 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 ?
      5. La console me dit ça :

        1. Modérateur
          Tu as bien inclus le fichier ajax.js ???
      6. 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 ??
      7. 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);
            
          });
          
      8. 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...
      9. 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>