« Api gouv » : différence entre les versions
Aucun résumé des modifications |
|||
| Ligne 223 : | Ligne 223 : | ||
./test.sh -m api -c 51100 -v "Reims" #(trouve les codes insee) | ./test.sh -m api -c 51100 -v "Reims" #(trouve les codes insee) | ||
./test.sh -m api -c 51100 #(trouve les codes insee) | ./test.sh -m api -c 51100 #(trouve les codes insee) | ||
</syntaxhighlight> | |||
=== data.education.gouv.fr === | |||
Obtenir les infos des établissements scolaires: | |||
<syntaxhighlight lang="bash" copy> | |||
#!/bin/bash | |||
# Aide d'utilisation | |||
usage() { | |||
echo "Usage: $0 -c COMMUNE [-t TYPE_ETABLISSEMENT] [-f more|all] [-o OFFSET]" | |||
echo "Recherche des établissements scolaires via l'API de l'Éducation Nationale" | |||
echo "" | |||
echo "Options:" | |||
echo " -c COMMUNE Nom de la commune (obligatoire)" | |||
echo " -t TYPE_ETABLISSEMENT Type d'établissement (optionnel)" | |||
echo " -f more Affiche les champs de contact (mail,telephone,web) en JSON" | |||
echo " -f all Affiche TOUS les champs disponibles en JSON" | |||
echo " -o OFFSET Décalage pour la pagination (par défaut: 0)" #si les résultats sont superieurs à la limite de 100, permet d'afficher le reste des infos à partir de l'offset | |||
echo " -h Affiche cette aide" | |||
echo "" | |||
echo "Exemples:" | |||
echo " $0 -c Paris -t lycee" | |||
echo " $0 -c Reims -t ecole -0 100" | |||
echo " $0 -c Reims -f more -o 100" | |||
echo " $0 -c Lyon -t college -f all -o 100" | |||
exit 1 | |||
} | |||
# Variables par défaut | |||
commune="" | |||
type_etablissement="" | |||
output_mode="table" # table|more|all | |||
offset=0 | |||
# Traitement des arguments | |||
while getopts ":c:t:f:o:h" opt; do | |||
case $opt in | |||
c) commune="$OPTARG" ;; | |||
t) type_etablissement="$OPTARG" ;; | |||
f) case "$OPTARG" in | |||
more) output_mode="more" ;; | |||
all) output_mode="all" ;; | |||
*) echo "Option -f invalide: $OPTARG (utilisez 'more' ou 'all')" >&2; usage ;; | |||
esac ;; | |||
o) offset="$OPTARG" | |||
if ! [[ "$offset" =~ ^[0-9]+$ ]]; then | |||
echo "L'offset doit être un nombre positif" >&2 | |||
exit 1 | |||
fi ;; | |||
h) usage ;; | |||
\?) echo "Option invalide: -$OPTARG" >&2; usage ;; | |||
:) echo "Option -$OPTARG nécessite un argument." >&2; usage ;; | |||
esac | |||
done | |||
[ -z "$commune" ] && { echo "Erreur: Le paramètre -c est obligatoire"; usage; } | |||
# Encodage URL | |||
encoded_commune=$(echo "$commune" | sed 's/ /%20/g') | |||
where_clause="nom_commune%20like%20%27%25${encoded_commune}%25%27" | |||
[ -n "$type_etablissement" ] && { | |||
encoded_type=$(echo "$type_etablissement" | sed 's/ /%20/g') | |||
where_clause+="%20AND%20type_etablissement%20like%20%27%25${encoded_type}%25%27" | |||
} | |||
# Construction de la requête API avec offset | |||
api_url="https://data.education.gouv.fr/api/explore/v2.1/catalog/datasets/fr-en-annuaire-education/records?where=${where_clause}&limit=100&offset=${offset}" | |||
# Affichage des paramètres de recherche | |||
echo "Recherche des établissements à '$commune'" >&2 | |||
[ -n "$type_etablissement" ] && echo "Filtre : type '$type_etablissement'" >&2 | |||
[ "$output_mode" = "more" ] && echo "Affichage des champs de contact" >&2 | |||
[ "$output_mode" = "all" ] && echo "Affichage de tous les champs disponibles" >&2 | |||
[ "$offset" -gt 0 ] && echo "Décalage des résultats : $offset" >&2 | |||
echo "" >&2 | |||
case "$output_mode" in | |||
"table") | |||
# Mode tableau standard | |||
echo "N° | Établissement | Type | Adresse | Coordonnées GPS" >&2 | |||
echo "---------------------------------------------------------------" >&2 | |||
curl -s "$api_url" | \ | |||
jq -r --argjson offset "$offset" '.results | to_entries[] | | |||
"\($offset + .key + 1)|\(.value.nom_etablissement)|\(.value.type_etablissement)|\(.value.adresse_1)|\(.value.position.lat),\(.value.position.lon)"' | \ | |||
while IFS='|' read -r num etablissement type adresse coord; do | |||
printf "%3d | %-30s | %-15s | %-25s | %s\n" \ | |||
"$num" \ | |||
"$(echo "$etablissement" | cut -c -30)" \ | |||
"$(echo "$type" | cut -c -15)" \ | |||
"$(echo "$adresse" | cut -c -25)" \ | |||
"$coord" | |||
done | |||
;; | |||
"more") | |||
# Mode JSON avec champs de contact | |||
curl -s "$api_url" | \ | |||
jq --argjson offset "$offset" ' | |||
.results | to_entries | map({ | |||
numero: ($offset + .key + 1), | |||
nom_etablissement: .value.nom_etablissement, | |||
type_etablissement: .value.type_etablissement, | |||
adresse: .value.adresse_1, | |||
position: .value.position, | |||
telephone: .value.telephone, | |||
mail: .value.mail, | |||
web: .value.web | |||
} | with_entries(select(.value != null))) | |||
' | |||
;; | |||
"all") | |||
# Mode JSON complet avec tous les champs | |||
curl -s "$api_url" | \ | |||
jq --argjson offset "$offset" ' | |||
.results | to_entries | map( | |||
.value | del(.datasetid, .recordid, .record_timestamp, .geometry) | | |||
. + {numero: ($offset + .key + 1)} | | |||
with_entries(select(.value != null)) | |||
) | |||
' | |||
;; | |||
esac | |||
echo "" >&2 | |||
echo "Nombre de résultats affichés: 100" >&2 | |||
[ "$offset" -gt 0 ] && echo "Prochain offset possible: $((offset + 100))" >&2 | |||
echo "Recherche terminée." >&2 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
[[category:Divers]] [[category:api]] | [[category:Divers]] [[category:api]] | ||