« Api gouv » : différence entre les versions

 
(22 versions intermédiaires par le même utilisateur non affichées)
Ligne 15 : Ligne 15 :
*[https://doc.data.gouv.fr/api/reference/ doc data gouv api]
*[https://doc.data.gouv.fr/api/reference/ doc data gouv api]
[[category:Divers]] [[category:api]]
[[category:Divers]] [[category:api]]
=== calendrier.api.gouv.fr ===
Jours fériés
<syntaxhighlight lang="bash" copy>
curl -s 'GET' 'https://calendrier.api.gouv.fr/jours-feries/metropole/2027.json'  -H 'accept: application/json' | jq
</syntaxhighlight>
=== apicarto.ign.fr ===
Cadastre
<syntaxhighlight lang="bash" copy>
curl -s 'https://apicarto.ign.fr/api/cadastre/commune?code_insee=02211' | jq
</syntaxhighlight>
<syntaxhighlight lang="bash" copy>
code postaux
curl -s 'https://apicarto.ign.fr/api/codes-postaux/communes/02290' | jq
</syntaxhighlight>


=== adresse.data.gouv.fr ===
=== adresse.data.gouv.fr ===
Ligne 226 : Ligne 243 :


=== data.education.gouv.fr ===
=== data.education.gouv.fr ===
*[https://data.education.gouv.fr/pages/accueil/ data.education.gouv.fr]
*[https://data.education.gouv.fr/explore/dataset/fr-en-annuaire-education/api/ education api]
Obtenir les infos des établissements scolaires:
Obtenir les infos des établissements scolaires:
<syntaxhighlight lang="bash" copy>
<syntaxhighlight lang="bash" copy>
Ligne 232 : Ligne 254 :
# Aide d'utilisation
# Aide d'utilisation
usage() {
usage() {
     echo "Usage: $0 -c COMMUNE [-t TYPE_ETABLISSEMENT] [-f more|all] [-o OFFSET]"
     echo "Usage: $0 -c COMMUNE [-t TYPE_ETABLISSEMENT] [-f more|all] [-o OFFSET] [-l LIMIT]"
     echo "Recherche des établissements scolaires via l'API de l'Éducation Nationale"
     echo "Recherche des établissements scolaires via l'API de l'Éducation Nationale"
     echo ""
     echo ""
Ligne 240 : Ligne 262 :
     echo "  -f more              Affiche les champs de contact (mail,telephone,web) en JSON"
     echo "  -f more              Affiche les champs de contact (mail,telephone,web) en JSON"
     echo "  -f all              Affiche TOUS les champs disponibles 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 "  -o OFFSET            Décalage pour la pagination (défaut: 0)"
    echo "  -l LIMIT            Nombre de résultats par requête (défaut: 100, max: 100)"
     echo "  -h                  Affiche cette aide"
     echo "  -h                  Affiche cette aide"
     echo ""
     echo ""
     echo "Exemples:"
     echo "Exemples:"
     echo "  $0 -c Paris -t lycee"
     echo "  $0 -c Paris -t lycee -l 50"
    echo "  $0 -c Reims -t ecole -0 100"
     echo "  $0 -c Reims -f more -o 100 -l 20"
     echo "  $0 -c Reims -f more -o 100"
    echo "  $0 -c Lyon -t college -f all -o 100"
     exit 1
     exit 1
}
}
Ligne 254 : Ligne 275 :
commune=""
commune=""
type_etablissement=""
type_etablissement=""
output_mode="table" # table|more|all
output_mode="table"
offset=0
offset=0
limit=100


# Traitement des arguments
# Traitement des arguments
while getopts ":c:t:f:o:h" opt; do
while getopts ":c:t:f:o:l:h" opt; do
     case $opt in
     case $opt in
         c) commune="$OPTARG" ;;
         c) commune="$OPTARG" ;;
Ligne 268 : Ligne 290 :
           esac ;;
           esac ;;
         o) offset="$OPTARG"
         o) offset="$OPTARG"
           if ! [[ "$offset" =~ ^[0-9]+$ ]]; then
           [[ "$offset" =~ ^[0-9]+$ ]] || { echo "Offset doit être un nombre positif" >&2; exit 1; } ;;
               echo "L'offset doit être un nombre positif" >&2
        l) limit="$OPTARG"
              exit 1
          [[ "$limit" =~ ^[0-9]+$ ]] && [ "$limit" -le 100 ] || {
          fi ;;
               echo "Limit doit être un nombre entre 1 et 100" >&2; exit 1; } ;;
         h) usage ;;
         h) usage ;;
         \?) echo "Option invalide: -$OPTARG" >&2; usage ;;
         \?) echo "Option invalide: -$OPTARG" >&2; usage ;;
Ligne 282 : Ligne 304 :
# Encodage URL
# Encodage URL
encoded_commune=$(echo "$commune" | sed 's/ /%20/g')
encoded_commune=$(echo "$commune" | sed 's/ /%20/g')
where_clause="nom_commune%20like%20%27%25${encoded_commune}%25%27"
#where_clause="nom_commune%20%3D%20%22${encoded_commune}%22%20" #strictement égale
where_clause="nom_commune%20like%20%27${encoded_commune}%27" # like 'paris'
#where_clause="nom_commune%20like%20%27%25${encoded_commune}%25%27" # like '%paris%'


[ -n "$type_etablissement" ] && {
[ -n "$type_etablissement" ] && {
Ligne 289 : Ligne 313 :
}
}


# Construction de la requête API avec offset
# Construction de la requête API
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}"
api_url="https://data.education.gouv.fr/api/explore/v2.1/catalog/datasets/fr-en-annuaire-education/records?&order_by=identifiant_de_l_etablissement&where=${where_clause}&limit=${limit}&offset=${offset}"


# Affichage des paramètres de recherche
# Affichage des paramètres de recherche
echo "Recherche des établissements à '$commune'" >&2
echo "Recherche des établissements à '$commune'" >&2
[ -n "$type_etablissement" ] && echo "Filtre : type '$type_etablissement'" >&2
[ -n "$type_etablissement" ] && echo "Filtre : type '$type_etablissement'" >&2
[ "$output_mode" = "more" ] && echo "Affichage des champs de contact" >&2
[ "$output_mode" = "more" ] && echo "Affichage des champs de contact" >&2
[ "$output_mode" = "all" ] && echo "Affichage de tous les champs disponibles" >&2
[ "$output_mode" = "all" ] && echo "Affichage de tous les champs disponibles" >&2
[ "$offset" -gt 0 ] && echo "Décalage des résultats : $offset" >&2
[ "$offset" -gt 0 ] && echo "Décalage des résultats : $offset" >&2
[ "$limit" -ne 100 ] && echo "Nombre de résultats par page : $limit" >&2
echo "" >&2
echo "" >&2


Ligne 310 : Ligne 335 :
         "\($offset + .key + 1)|\(.value.nom_etablissement)|\(.value.type_etablissement)|\(.value.adresse_1)|\(.value.position.lat),\(.value.position.lon)"' | \
         "\($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
         while IFS='|' read -r num etablissement type adresse coord; do
             printf "%3d | %-30s | %-15s | %-25s | %s\n" \
             printf "%3d | %-30s | %-15s | %-25s | %s\n" \
                   "$num" \
                   "$num" \
                   "$(echo "$etablissement" | cut -c -30)" \
                   "$(echo "$etablissement" | cut -c -30)" \
Ligne 331 : Ligne 356 :
             mail: .value.mail,
             mail: .value.mail,
             web: .value.web
             web: .value.web
         } | with_entries(select(.value != null)))
         } | with_entries(select(.value != null)))
         '
         '
         ;;
         ;;
Ligne 341 : Ligne 366 :
             .value | del(.datasetid, .recordid, .record_timestamp, .geometry) |  
             .value | del(.datasetid, .recordid, .record_timestamp, .geometry) |  
             . + {numero: ($offset + .key + 1)} |
             . + {numero: ($offset + .key + 1)} |
             with_entries(select(.value != null))
             with_entries(select(.value != null))
         )
         )
         '
         '
Ligne 348 : Ligne 373 :


echo "" >&2
echo "" >&2
echo "Nombre de résultats affichés: 100" >&2
echo "Nombre de résultats affichés: $limit" >&2
[ "$offset" -gt 0 ] && echo "Prochain offset possible: $((offset + 100))" >&2
[ "$offset" -gt 0 ] && echo "Prochain offset possible: $((offset + limit))" >&2
echo "Recherche terminée." >&2
echo "Recherche terminée." >&2
</syntaxhighlight>
==== Exemple ====
<syntaxhighlight lang="bash" copy>
./ecole.sh -c Reims -t lycee
Recherche des établissements à 'Reims'
Filtre : type 'lycee'
N° | Établissement | Type | Adresse | Coordonnées GPS
---------------------------------------------------------------
  1 | Lycée Clemenceau              | Lycée          | 46 avenue Georges Clemenc | 49.25073432345288,4.046330326900803
  2 | Lycée professionnel Joliot-Cu | Lycée          | 4 rue Joliot Curie        | 49.23178325933544,4.003450480308607
  3 | Lycée polyvalent Georges Bri� | Lycée          | 2 rue Vauban              | 49.22398519953693,4.027090434385106
  4 | Lycée Sacré-Coeur            | Lycée          | 86 rue de Courlancy      | 49.238931122233176,4.025220635034403
  5 | Ecole des Métiers Artistiques | Lycée          | 28 BIS RUE DE COURCELLES  | 49.26107885865763,4.019019722186755
  6 | Lycée professionnel Raymond K | Lycée          | Allée de l'alouette      | 49.24965875528182,4.058829555724916
  7 | Lycée polyvalent Saint-Michel | Lycée          | 39 rue Martin Peller      | 49.2466954607039,4.014050539836219
  8 | Lycée polyvalent François Ar | Lycée          | 1 rue François Arago    | 49.22940166227636,4.0064656531151535
  9 | Lycée professionnel Jeanne d' | Lycée          | 94 avenue de Laon        | 49.26657628358237,4.026469785977506
10 | Lycée Saint-Joseph            | Lycée          | 177 rue des Capucins      | 49.247044020034096,4.035980624193684
11 | Lycée polyvalent Saint-Jean-B | Lycée          | 20 rue de Contrai        | 49.25063607358897,4.037199400980221
12 | Lycée Saint-Jean XXIII        | Lycée          | 18 rue Andrieux          | 49.25926423819655,4.035949497933112
13 | Section d'Enseignement Profess | Lycée          | 2 rue Vauban              | 49.22398519953693,4.027090434385106
14 | Section d'Enseignement Profess | Lycée          | 39 rue MARTIN PELLER      | 49.24635162125739,4.013670264788377
15 | Micro Lycée du Lycée Polyval | Lycée          | 2 rue Vauban              | 49.22369097053217,4.027750337502952
16 | Lycée Jean Jaurès            | Lycée          | 17 rue Ruinart de Brimont | 49.25832684426352,4.045500552009885
17 | Lycée professionnel Gustave E | Lycée          | 34 rue de Neufchatel      | 49.275232133479086,4.026901461730458
18 | Lycée Colbert                | Lycée          | 56 rue du Docteur Schweit | 49.282828421582906,4.024210541012452
19 | Lycée professionnel Europe    | Lycée          | 71 avenue de l'Europe    | 49.24844732482777,4.066120515816653
20 | Lycée Marc Chagall            | Lycée          | 60 chaussée Saint Martin | 49.24255560070805,4.0268702906229885
21 | Lycée Roosevelt              | Lycée          | 10 rue Roosevelt          | 49.263238315726255,4.026660366516108
22 | Lycée Libergier              | Lycée          | 55 rue Libergier          | 49.251152445191394,4.027709929823115
23 | Section d'Enseignement Profess | Lycée          | 1  RUE FRANCOIS ARAGO    | 49.22831497165282,4.0073999655912145
24 | Section d'Enseignement Profess | Lycée          | 20  RUE DE CONTRAI        | 49.25063607358897,4.037199400980221
Nombre de résultats affichés: 100
Recherche terminée.
</syntaxhighlight>
Obtenir les infos d'un établissement précis (11ème de la liste)<br />
ex:
<syntaxhighlight lang="bash" copy>
./ecole.sh -c Reims -t lycee -o 10 -l 1 -f all
</syntaxhighlight>
ou
<syntaxhighlight lang="bash" copy>
./ecole.sh -c Reims -t lycee -o 10 -l 1 -f more
</syntaxhighlight>
Résultat:
<syntaxhighlight>
Recherche des établissements à 'Reims'
Filtre : type 'lycee'
Affichage des champs de contact
Décalage des résultats : 10
Nombre de résultats par page : 1
</syntaxhighlight>
<syntaxhighlight lang="json" copy>
[
  {
    "numero": 11,
    "nom_etablissement": "Lycée polyvalent Saint-Jean-Baptiste de La Salle",
    "type_etablissement": "Lycée",
    "adresse": "20 rue de Contrai",
    "position": {
      "lon": 4.037199400980221,
      "lat": 49.25063607358897
    },
    "telephone": "03 26 77 17 00",
    "mail": "contact@gdls-reims.com",
    "web": "https://www.groupedelasalle-reims.com"
  }
]
</syntaxhighlight>
<syntaxhighlight>
Nombre de résultats affichés: 1
Prochain offset possible: 11
Recherche terminée.
</syntaxhighlight>
</syntaxhighlight>




[[category:Divers]] [[category:api]]
[[category:Divers]] [[category:api]]