Aller au contenu principal

API avec Python

Consommer une API REST, en Python, avec la bibliothèque requests (sans interface graphique pour commencer simplement).

Mission : Créer un petit programme Python qui affiche les prochains jours fériés en France.

Nous allons utiliser la même API publique que dans notre tuto API avec JavaScript qui fournit des informations sur les jours fériés :

Endpoint de l'API : https://date.nager.at/api/v3/publicholidays/{année}/{code-pays}

Par exemple : https://date.nager.at/api/v3/publicholidays/2026/FR


TP pour réfléchir et résoudre des problèmes

Étapes

  1. Ouvrir un terminal et exécuter les commandes suivantes pour créer le dossier et y accéder :
mkdir tp-api-rest-python
cd tp-api-rest-python
  1. Créer un environnement virtuel Python et l’activer :
python -m venv venv
source venv/bin/activate # Sur Windows : venv\Scripts\activate
info

Sous MacOS, ne pas utiliser Fish mais Bash ou Zsh pour activer l’environnement virtuel.

  1. Créer le fichier jours_feries.py, puis installer les bibliothèques nécessaires :
touch jours_feries.py
pip install requests
astuce

Vous pouvez utiliser VSCode pour éditer les fichiers jours_feries.py et .env.

  1. Ouvrir jours_feries.py avec Visual Studio Code et écrire le code pour importer les bibliothèques nécessaires
import requests
from datetime import datetime
  • requests est une bibliothèque Python très utilisée pour envoyer des requêtes HTTP (comme fetch en JavaScript).
  • datetime permet d’obtenir l’année actuelle automatiquement (utile pour ne pas coder une année en dur).
  1. Définir une fonction pour récupérer les jours fériés
def afficher_jours_feries(annee, pays="FR"):
url = f"https://date.nager.at/api/v3/publicholidays/{annee}/{pays}"
  • On construit l’URL de l’API en insérant l’année et le code du pays (par défaut : "FR" pour la France).
  • Cette fonction sera appelée pour afficher les jours fériés d’une année donnée.
  1. Envoyer la requête et traiter la réponse
    try:
reponse = requests.get(url)
reponse.raise_for_status() # Déclenche une erreur si l’API renvoie un code 4xx ou 5xx
jours = reponse.json()
  • requests.get() envoie une requête GET à l’API.
  • raise_for_status() permet de détecter les erreurs HTTP (ex : 404 ou 500).
  • .json() transforme la réponse JSON en types de données natifs Python (comme un dictionnaire ou une liste, selon la structure du JSON).
  1. Afficher les résultats
        for jour in jours:
date = jour["date"]
nom = jour["localName"]
nom_officiel = jour["name"]
print(f"{date}{nom:30} ({nom_officiel})")
  • Pour chaque jour férié, on récupère sa date, son localName (nom dans la langue locale) et son name (nom international).
  • :30 aligne les textes pour un affichage plus lisible.
  1. Gérer les erreurs
    except requests.exceptions.HTTPError as errh:
print(f"Erreur HTTP : {errh}")
except requests.exceptions.ConnectionError:
print("Erreur de connexion – vérifiez votre connexion internet")
except requests.exceptions.Timeout:
print("La requête a pris trop de temps")
except Exception as e:
print(f"Erreur inattendue : {e}")

try / except → permet de gérer proprement les erreurs (site inaccessible, mauvaise année, etc.)

C’est l’équivalent en PHP de try {}/catch {} et en JavaScript de .catch().

  1. Créer la fonction principale du programme
if __name__ == "__main__":
annee_actuelle = datetime.now().year
print("Programme des jours fériés en France (API date.nager.at)\n")

for annee in [annee_actuelle, annee_actuelle + 1]:
afficher_jours_feries(annee)
  • if __name__ == "__main__" permet d’exécuter ce code uniquement si le fichier est lancé directement (et non importé ailleurs).
  • On affiche les jours fériés de l’année actuelle et de l’année suivante.

Corrigé

Une solution

Lancer le programme

Pour exécuter le programme, il suffit de saisir dans le Terminal :

python jours_feries_gui.py

ou

python3 jours_feries_gui.py

ou

py jours_feries_gui.py

On devrait voir quelque chose comme :

Programme des jours fériés en France (API date.nager.at)

Jours fériés en France pour l'année 2026 :

--------------------------------------------------
2026-01-01 → Jour de l'An (New Year's Day)
2026-04-06 → Lundi de Pâques (Easter Monday)
2026-05-01 → Fête du Travail (Labour Day)
...
Si l'erreur ModuleNotFoundError: No module named 'requests's'affiche

Pour résoudre l'erreur ModuleNotFoundError: No module named 'requests', il suffit d'installer le module requests dans votre environnement Python, avec la commande :

pip install requests