4ème année
API pour la 4ème
Module 12 — Recherche d'information
Première API · Open-Meteo
Demander la météo à un serveur, et comprendre sa réponse
Une API permet à deux programmes de se parler. Dans ce cours, tu interroges un vrai service météo gratuit, Open-Meteo, et tu apprends à lire ce qu'il te renvoie : du JSON.
- Expliquer ce qu'est une API avec tes propres mots
- Lire et construire l'adresse d'une requête (endpoint + paramètres)
- Lire un document JSON et aller chercher une valeur précise
- Écrire un petit programme qui affiche la météo de Dinant
Matériel : un navigateur (Firefox ou Chrome) et un éditeur de code. Pas d'inscription, pas de clé API.
GET https://api.open-meteo.com/v1/forecast ?latitude=50.26&longitude=4.91 ¤t=temperature_2m
{ "latitude": 50.26, "longitude": 4.92, "current_units": { "temperature_2m": "°C" }, "current": { "time": "2026-10-16T10:00", "temperature_2m": 11.8 } }
1C'est quoi une API ?
API veut dire Application Programming Interface, en français « interface de programmation ». C'est une porte d'entrée qu'un programme ouvre pour que d'autres programmes puissent lui demander des choses, en respectant des règles précises.
Quand l'appli météo de ton téléphone affiche 12 °C, ton téléphone n'a pas de thermomètre ni de station météo. L'appli a envoyé une question à une API, sur un serveur quelque part, et elle a reçu la réponse en quelques millisecondes. Ton programme, c'est le client. Celui qui répond, c'est le serveur.
GET /v1/forecast?latitude=50.26&…
200 OK { "temperature_2m": 11.8 }
L'API expliquée avec une friterie
Tu ne rentres pas dans la cuisine de la friterie pour te servir. Tu commandes au comptoir, avec les mots du menu, et on te rend un cornet. Une API fonctionne exactement comme ça.
| À la friterie | Avec une API |
|---|---|
| Le menu affiché au-dessus du comptoir | La documentation : la liste de ce qu'on peut demander et comment |
| Le comptoir où tu passes commande | L'endpoint : l'adresse précise où envoyer ta demande |
| « Une moyenne frite, sauce andalouse » | La requête avec ses paramètres |
| La cuisine, que tu ne vois pas | Le serveur et ses données |
| Le cornet, toujours emballé de la même façon | La réponse, toujours au même format : le JSON |
| « Désolé, la sauce pistache, ça n'existe pas » | Une erreur : la requête demande quelque chose d'inconnu (code 400) |
À retenir
Une API, c'est un contrat : « si tu me demandes ça, de cette façon, je te réponds ça, dans ce format ». Le client n'a pas besoin de savoir comment le serveur fonctionne à l'intérieur.
2Le vocabulaire
Ces mots reviennent dans toutes les documentations d'API. Apprends-les, tu les retrouveras partout.
- Client
- Le programme qui pose la question (ta page web, ton script).
- Serveur
- L'ordinateur, sur Internet, qui reçoit la question et répond.
- Requête (request)
- Le message envoyé par le client : une adresse, une méthode, des paramètres.
- Réponse (response)
- Le message renvoyé par le serveur : un code de statut et des données.
- Endpoint
- Une adresse précise de l'API, qui correspond à un service. Ici :
/v1/forecastpour les prévisions. - Paramètre
- Une précision ajoutée à la requête, sous la forme
nom=valeur. Exemple :latitude=50.26. - Méthode HTTP
GETpour demander des données (ce qu'on fait dans ce cours).POSTpour en envoyer, par exemple un formulaire.- Code de statut
- Un nombre qui dit si tout s'est bien passé.
200= OK. Voir le tableau ci-dessous. - Documentation
- Le mode d'emploi de l'API. On la lit avant d'écrire du code.
- Clé API
- Un code secret qui identifie ton programme. Beaucoup d'API en exigent une. Open-Meteo n'en demande pas pour un usage non commercial : c'est pour ça qu'on l'utilise en classe.
| Code | Signification | Exemple avec l'API météo |
|---|---|---|
| 200 | OK, voici les données | Tout s'est bien passé, le JSON arrive. |
| 400 | Requête mal formée | Tu as écrit temperature_2 au lieu de temperature_2m. |
| 404 | Adresse introuvable | Faute dans l'endpoint, par exemple /v1/forcast. |
| 429 | Trop de requêtes | Ton programme interroge le serveur beaucoup trop souvent. |
| 500 | Erreur du serveur | Le problème vient du serveur, pas de toi. On réessaie plus tard. |
3Anatomie d'une requête
Avec Open-Meteo, toute la requête tient dans une adresse web. Chaque morceau a un rôle. Les couleurs sont les mêmes partout dans ce cours.
- https://Le protocole. Le s veut dire que la connexion est chiffrée (sécurisée).
- api.open-meteo.comLe nom du serveur (le domaine). C'est « l'adresse de la friterie ».
- /v1/forecastL'endpoint.
forecast= prévisions.v1= version 1 de l'API : si l'API change un jour, ton programme continue de marcher sur la v1. - ?Le point d'interrogation annonce le début des paramètres.
- latitude=50.26Un paramètre : un nom, le signe
=, une valeur. La latitude donne la position nord-sud. Attention : un point décimal, jamais une virgule. - &Le « et commercial » sépare deux paramètres.
- longitude=4.91La position est-ouest. Dinant se trouve à 50,26° nord et 4,91° est.
- current=temperature_2m,wind_speed_10mLes mesures « en ce moment » qu'on veut recevoir, séparées par des virgules.
temperature_2m= la température de l'air à 2 mètres du sol.
4Construis ta requête et envoie-la
Choisis un lieu et les informations voulues. L'adresse se construit toute seule. Ouvre-la : ton navigateur devient le client, et tu vois la réponse brute du serveur.
Ton URL de requête
Le lien s'ouvre dans un nouvel onglet. Firefox affiche le JSON dans un explorateur (avec un onglet pour voir les données brutes). Chrome l'affiche en texte, parfois avec une case pour le mettre en forme.
Ce que dit chaque paramètre
Ensuite : rapporte la réponse ici
- Dans l'onglet de la réponse, sélectionne tout le texte (Ctrl + A, ou l'onglet « données brutes » dans Firefox).
- Copie-le (Ctrl + C).
- Colle-le dans le Labo 2, plus bas (Ctrl + V). Il sera analysé tout de suite.
Bonus : une autre API te donne les coordonnées
Tu ne connais pas la latitude de ton village ? Open-Meteo propose une deuxième API, de géocodage : tu envoies un nom de lieu, elle renvoie ses coordonnées… en JSON. Colle ensuite la réponse dans le Labo 2 : un bouton te permettra de reprendre les coordonnées ici.
5Le JSON, la langue commune des API
JSON veut dire JavaScript Object Notation. C'est du texte tout simple, organisé avec quelques symboles. Un humain peut le lire, et surtout n'importe quel langage (JavaScript, Python, PHP, Java…) sait le transformer en données utilisables.
C'est pour ça que les API répondent en JSON plutôt qu'avec une page web : pas de couleurs, pas de mise en page, seulement les données, rangées de façon prévisible.
{Objet : il commence par une accolade…"ville": "Dinant",Clé : valeur. Ici la valeur est un texte, entre guillemets.
"temperature": 11.8,Nombre : sans guillemets, avec un point décimal.
"jour": true,Booléen :
true (vrai) ou false (faux), sans guillemets."maximums": [14.6, 13.1, 15.2],Tableau : une liste entre crochets. Le premier élément porte le numéro 0.
"vent": {Un objet dans un objet : on peut imbriquer autant qu'on veut.
"vitesse": 9.4,
"direction": "SO"Dernière paire : pas de virgule après.
}}…et se termine par l'accolade fermante.Les 5 règles d'or
- Les clés sont toujours entre guillemets doubles :
"ville", jamaisvilleni'ville'. - Les paires sont séparées par des virgules, mais pas de virgule après la dernière.
- Le texte est entre guillemets doubles. Les nombres et
true/false/nulln'en ont pas. { }pour un objet (des clés et des valeurs),[ ]pour un tableau (une liste).- Chaque accolade ou crochet ouvert doit être refermé.
Aller chercher une valeur : le chemin
Une fois le JSON chargé dans une variable (on l'appelle souvent data), on descend dans la structure clé par clé, avec un point. Pour un tableau, on donne le numéro entre crochets.
data.ville→"Dinant"data.vent.vitesse→9.4data.maximums[0]→14.6le premier élémentdata.maximums[2]→15.2le troisième6Lis la réponse de l'API
Colle ici le JSON reçu au Labo 1. La page vérifie qu'il est valide, le déplie en arbre, et en fait une carte météo. Clique sur une valeur dans l'arbre pour voir le chemin qui y mène.
Essaie de casser le JSON : enlève une virgule ou un guillemet, et regarde le message d'erreur.
L'arbre du JSON
Chemin de la valeur sélectionnée
Clique sur une valeur dans l'arbre.
7Fais l'appel avec du code
Jusqu'ici, c'est toi qui copiais-collais. Un programme fait la même chose tout seul : il envoie la requête, reçoit le texte JSON, le transforme en objet et va chercher les valeurs avec leur chemin. Trois façons de le faire, de la plus rapide à la plus complète.
- Ouvre ta requête du Labo 1 dans un onglet (bouton « Ouvrir la réponse »).
- Dans cet onglet, ouvre les outils de développement avec F12, puis l'onglet Console.
- Tape les lignes ci-dessous.
location.hrefcontient l'adresse de l'onglet, donc ta requête.
Chrome peut bloquer le collage dans la console la première fois : lis son message et tape la phrase demandée. Ou tape le code à la main, c'est encore mieux pour apprendre.
Crée un fichier meteo.html, colle ce code, enregistre et ouvre le fichier dans ton navigateur. Les commentaires suivent les 5 étapes d'un appel d'API.
fetch(url)envoie la requête au serveur.awaitfait attendre le programme : la réponse met quelques millisecondes à arriver.reponse.json()transforme le texte JSON en objet JavaScript.data.current.temperature_2mva chercher la valeur, avec le même chemin que dans l'arbre du Labo 2.- On écrit le résultat dans la page. Ouvre la console (F12) pour voir l'objet complet.
En Python, la bibliothèque requests fait l'appel. Installe-la une fois avec pip install requests. Remarque : les paramètres sont rangés dans un dictionnaire, et requests construit l'URL avec ? et & à ta place.
En Python, le JSON devient un dictionnaire : le chemin s'écrit avec des crochets, data["current"]["temperature_2m"]. Le Labo 2 affiche aussi cette version du chemin.
8Défis
Du plus simple au plus costaud. Note dans ton cahier l'URL que tu as utilisée pour chaque défi.
La météo chez toi
- Avec le bonus du Labo 1 (géocodage), trouve la latitude et la longitude de ton village.
- Construis la requête météo pour ce lieu et ouvre-la.
- Dans le JSON, trouve la température et son unité. Où se trouve l'unité ?
Provoque une erreur
Dans ton URL, remplace temperature_2m par temperature_2 et ouvre-la. Quel code de statut reçois-tu ? Le serveur répond quand même en JSON : que contient la clé reason ? Colle cette réponse dans le Labo 2 pour voir.
Plus d'infos sur ta page
Dans meteo.html, ajoute relative_humidity_2m et weather_code au paramètre current. Affiche l'humidité. Pour le code météo, l'API ne renvoie qu'un nombre (par exemple 3) : crée un objet JavaScript qui traduit les codes en français (0 = ciel dégagé, 3 = couvert, 61 = pluie faible…). La table complète est dans la documentation.
Les 3 prochains jours
Demande daily=temperature_2m_max,temperature_2m_min. Les valeurs arrivent dans des tableaux : data.daily.time[0] est aujourd'hui, [1] demain… Utilise une boucle for pour afficher une ligne par jour.
La météo sur l'écran de l'école
Pour un écran de digital signage (Raspberry Pi), la page doit se mettre à jour toute seule. Appelle chargerMeteo() toutes les 15 minutes avec setInterval(chargerMeteo, 15 * 60 * 1000). Pourquoi pas toutes les secondes ? Regarde la valeur de current.interval dans le JSON (900 secondes), et pense au code 429.
9Vérifie tes acquis
Réponds dans ta tête ou sur papier, puis ouvre la réponse.
Avec tes mots : à quoi sert une API ?
À permettre à un programme (le client) de demander des données ou un service à un autre programme (le serveur), en suivant des règles décrites dans la documentation, sans avoir besoin de savoir comment le serveur fonctionne à l'intérieur.
Dans https://api.open-meteo.com/v1/forecast?latitude=50.26&longitude=4.91, quel est l'endpoint ? Combien y a-t-il de paramètres ?
L'endpoint est /v1/forecast. Il y a 2 paramètres, latitude et longitude. Le ? ouvre la liste des paramètres et le & les sépare.
Dans l'exemple du Labo 2, quel chemin donne la température maximale de demain ?
data.daily.temperature_2m_max[1]. L'index [0] correspond à aujourd'hui, donc demain est [1].
Pourquoi l'API renvoie "weather_code": 3 et pas « Couvert » ?
Un code numérique est le même dans toutes les langues et facile à traiter par un programme. C'est le client qui le traduit pour l'afficher, en français, en anglais ou avec une icône.
Ce JSON est-il valide ? { "ville": "Dinant", "temp": 11.8, }
Non : il y a une virgule après la dernière paire. Colle-le dans le Labo 2 pour voir le message d'erreur.
Pourquoi les API répondent-elles en JSON plutôt qu'avec une page HTML ?
Parce que le JSON ne contient que les données, rangées de façon structurée et prévisible. Il est léger, lisible par un humain, et tous les langages de programmation savent le lire. Une page HTML mélange les données avec la mise en page.