Interrogation de data.gouv.fr via son API
16/11/2016
Petite expérimentation des possbilités offertes par l'API de la plateforme Open Data, data.gouv.fr.
Dans le billet Analyse des données Finess publiées en Open Data, j’indiquais que le service de notification des mises à jour n’avait jamais fonctionné (pour moi en tout cas). Je suis pourtant identifié comme “suiveur”, mais le résultat est qu’aucun mail ne m’est jamais parvenu pour m’annoncer la mise à disposition d’une nouvelle version des données publiées.
Cependant, le site data.gouv.fr met à disposition une API pour accéder aux jeux de données (datasets). Les “datasets” sont donc utilisables de façon programmable ! Merci à l’équipe Etalab pour cette mise en place qui ouvre des nombreuses possibilités.
Pour développer un service de téléchargement automatique si une version nouvelle est disponible (en accompagnant ce téléchargement d'une notification par exemple), façon DIY, un simple script shell, avec un peu de curl ou de HTTPie pour faire les requêtes HTTP et l'utilitaire jq pour analyser le JSON, est simple à mettre en oeuvre.
Sur le site data.gouv.fr, à la page du jeu de données,
en affichant les détails, l'ID du jeu de données devient accessible : 53699569a3a729239d2046eb
Analyse du fichier JSON de l'API
En suivant la documentation de l’API, la requête
# http https://www.data.gouv.fr/api/1/datasets/53699569a3a729239d2046eb/
permet d’obtenir les données JSON du jeu de valeurs JSON.
Pour extraire les URL de ce jeu de données
# URL=https://www.data.gouv.fr/api/1/datasets/53699569a3a729239d2046eb/ # http $URL | jq '.resources[].url'
On obtient
"https://www.data.gouv.fr/s/resources/extraction-du-fichier-national-des-etablissements-sanitaires-et-sociaux-finess-par-etablissements/20151222-100753/etalab_cs1100502.pdf" "https://www.data.gouv.fr/s/resources/extraction-du-fichier-national-des-etablissements-sanitaires-et-sociaux-finess-par-etablissements/20160404-105326/etalab_cs1100507.pdf" "https://www.data.gouv.fr/s/resources/extraction-du-fichier-national-des-etablissements-sanitaires-et-sociaux-finess-par-etablissements/20160920-110218/etalab_cs1100502_stock_20160920-0445.csv" "https://www.data.gouv.fr/s/resources/extraction-du-fichier-national-des-etablissements-sanitaires-et-sociaux-finess-par-etablissements/20160920-110448/etalab_cs1100507_stock_20160920-0440.csv" "https://www.data.gouv.fr/s/resources/extraction-du-fichier-national-des-etablissements-sanitaires-et-sociaux-finess-par-etablissements/20160323-130907/etalab_stock_et_historique_2004-2015.zip"
Pour connaître les dates de mise à jour, il suffit de filtrer les données des blocs resources et de ne garder que les ID et les dates de dernière modification :
# http $URL | jq '.resources[] | .id + " : " + .last_modified'
Programme de téléchargement
Il est alors possible de faire un programme shell, permettant de comparer la date de dernière mise à jour des données publiées sur le site data.gouv.fr avec une date donnée en paramètre (par exemple la date de la veille).
Ainsi en lançant le programme suivant
# sh down_finess.sh `date -v-1d +"%Y-%m-%d"`
Le programme shell enchaîne :
- la récupération des données liées au jeu de données (informations au format JSON) ;
- la récupération de l’URL du fichier en fonction de l’élément désiré ;
- la comparaison de la date de référence avec celle de la dernière mise à jour du jeu de données ;
- si la date des données sur data.gouv.fr est plus récente, alors les données sont téléchargées (un mail d’information peut être envoyé).
Exemples
Positionnement d'une date de référence antérieure à celle du fichier de données :
# sh down_finess.sh 2016-09-10 Fichier : etalab_cs1100507_stock_20160920-0440.csv Date de MAJ : 2016-09-20T11:04:57 Date de REF : 2016-09-10 Telechargement du fichier de donnees etalab_cs1100507_stock_20160920-0440.csv dans /tmp/finess Donnees controlees, checksum OK
Positionnement d'une date de référence postérieure à celle du fichier de données :
# sh down_finess.sh `date -v-1d +"%Y-%m-%d"` Fichier : etalab_cs1100507_stock_20160920-0440.csv Date de MAJ : 2016-09-20T11:04:57 Date de REF : 2016-11-15 Fichier distant plus ancien = 2016-09-20T11:04:57
Code
Le code du programme shell est disponible en libre accès sur github, dans le repo opendata-finess.