- forum
- PowerShell
- Entraide pour les débutants
- savoir si un jour est férié grâce à l'api du gouvernement
Résolu
savoir si un jour est férié grâce à l'api du gouvernement
- gertrude
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 15
- Remerciements reçus 0

Aujourd'hui je souhaite savoir si une date est un jour férié ou non.
Je me suis donc rendue sur l'api de notre gouvernement : api , documentation
Sauf que c'est la première fois que je veux manipuler une api, et que je manipule un fichier au format json ! Du coup, c'est pas facile de comprendre ce que je fais...
Voici mon code qui n'est pas fonctionnel :
# définir l'URL de l'API
$url = "calendrier.api.gouv.fr/jours-feries/metropole.json"
# entrer la date à vérifier (au format AAAA-MM-JJ)
$date = "2024-05-01"
# effectuer une requête GET à l'API
$response = Invoke-RestMethod -Uri "$url$date" -Method Get
# vérifier si le jour est férié
if ($response.isHoliday) {
Write-Output "Le $date est un jour férié en France."
} else {
Write-Output "Le $date n'est pas un jour férié en France."
}
j'ai cette erreur en console :
Au caractère Ligne:8 : 13
+ $response = Invoke-RestMethod -Uri "$url$date" -Method Get
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Avez-vous des idées ?
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Tu me fais découvrir les API du Gouvernement, que je ne connaissais pas. Et ça c'est chouette .
Tout d'abord, il faut savoir que lorsque tu "consommes" (c'est le terme) une API REST, tu vas récupérer en retour soit du XML, soit du JSON. Les API récentes retournent en général du JSON car moins verbeux que le XML.
Toujours est-il que PowerShell sait gérer les 2, grâce aux commandes ConvertFrom-XML et ConvertFrom-Json.
Donc, dans ton cas il va falloir convertir le fichier JSON que tu récupères via l'API en objets PowerShell. Et ensuite nous pourrons les manipuler et faire la comparaison avec ta date.
L'idéal ici sera d'utiliser PowerShell 7 car dans cette version la commande ConvertFrom-Json a été améliorée et possède le paramètre -AsHashTable. Ce dernier sera très utilise, comme son nom l'indique afin de convertir le résultat sous forme de HashTable ou de tableau associatif en français .
Donc, on pourrait écrire le bout de code suivant :
$url = 'https://calendrier.api.gouv.fr/jours-feries/metropole.json'
$HashJoursFeries = (Invoke-WebRequest -Uri $url).content | ConvertFrom-Json -AsHashtable
# Date à vérifier (au format AAAA-MM-JJ)
$date = '2024-05-01'
if ($HashJoursFeries.keys -contains $date) {
Write-Output "La $date est un jour férié en France."
} else {
Write-Output "La $date n'est pas un jour férié en France."
}
Voilà, après l'idéal serait que tu en fasses une fonction où tu passerais une date et elle te retournerait $true ou $false en fonction qu'elle est fériée ou non .
Tu noteras au passage que j'ai préféré la commande Invoke-WebRequest à la commande Invoke-RestMethod car je voulais convertir moi-même le fichier Json pour avoir plus de contrôle. Invoke--RestMethod fait la conversion automatiquement mais pas en tant que HashTable. Cela dit, j'ai pas trop cherché. Il doit aussi y avoir un moyen d'y arriver avec Invoke-RestMethod.
Arnaud
MVP (Reconnect) et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- gertrude
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 15
- Remerciements reçus 0
C'est un plaisir de faire découvrir de nouvelles choses à la communauté ! Il y a des tas d'api gouvernementales !
Il y a un an, j'en avais utilisé une pour faire un jeu comme le juste prix : on rentrait le code postal d'une commune, s'il y en avait plusieurs on choisissait laquelle, puis on avait un certain nombre d'essais pour trouver le bon nombre d'habitants. J'avais fait ça en python, mais en powershell ce doit être tout autant possible.
Je relirai à tête reposée le reste de ton message, car je n'ai pas bien compris la notion de Hashtable : j'ai l'impression que ce sont les fameux tableaux dont je parle dans mes scripts.
Le code que tu proposes ne fonctionne pas sur windows powershell (5)
J'ai donc installé powershell 7, aussi appelé powershell core.
J'ai appris qu'il va remplacer windows powershell, aussi appelé powershell 5.
Le seul point négatif, c'est que je dois arrêter d'utiliser powershell ise : il a fallu que j'installe vscode. Ca contrarie le début d'habitudes que j'avais créées, mais apparemment il ne semble pas y avoir d'autre solution. J'espère que les autres scripts que j'ai écrits sont compatibles avec cette nouvelle version 7 !
Connexion ou Créer un compte pour participer à la conversation.
- ericlm128
- Hors Ligne
- Membre elite
-
- Messages : 178
- Remerciements reçus 37
$url = 'https://calendrier.api.gouv.fr/jours-feries/metropole.json'
$JoursFeries = Invoke-RestMethod -Uri $url
$date = '2024-05-01'
if ($JoursFeries.$date)
{
Write-Output "Jour férié :)"
}
else
{
Write-Output "On travail :("
}
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Pas mal cette solution en effet .
Comme quoi, il y a toujours plein de façons différentes de traiter une problématique.
Arnaud
MVP (Reconnect) et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Effectivement PowerShell 7 va remplacer à terme Windows PowerShell (comprendre les versions de PS 5.1 et antérieures). Microsoft ne fera plus évoluer PS 5.1.
Il est donc préférable de petit à petit passer à PowerShell 7. Même si la version 5.1 aura la peau dure car elle est encore nativement installée sur les serveurs Windows Server 2022; et donc sera supportée jusqu'en 2032 !

Et oui, Visual Studio Code est lui aussi l'avenir. Il remplace PowerShell ISE, qui lui non plus n'évoluera plus. Il faut donc faire la bascule dès maintenant, c'est préférable.
Arnaud
MVP (Reconnect) et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- forum
- PowerShell
- Entraide pour les débutants
- savoir si un jour est férié grâce à l'api du gouvernement
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- savoir si un jour est férié grâce à l'api du gouvernement