Aller au contenu

« Api gouv » : différence entre les versions

De Marmits Wiki
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 8 : Ligne 8 :
*[https://adresse.data.gouv.fr/carte-base-adresse-nationale carte nationale]
*[https://adresse.data.gouv.fr/carte-base-adresse-nationale carte nationale]


==== Autres ====
*[https://api.gouv.fr/les-api/api_dpe_logements API DPE logements]
*[https://api.gouv.fr/les-api/api_dpe_logements API DPE logements]



Version du 29 mai 2025 à 18:16

Ressources

Adresse

Autres

adresse.data.gouv.fr

Démo Requete 1

curl -s "https://api-adresse.data.gouv.fr/search/?q=clermont+ferrand&type=municipality" | jq '.features[]'

Résultat:

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      3.107055,
      45.786671
    ]
  },
  "properties": {
    "label": "Clermont-Ferrand",
    "score": 0.9582027272727272,
    "id": "63113",
    "banId": "e78e0f92-9838-4643-a9d2-b12da89352fc",
    "type": "municipality",
    "name": "Clermont-Ferrand",
    "postcode": "63000",
    "citycode": "63113",
    "x": 708317.42,
    "y": 6520789.22,
    "population": 147751,
    "city": "Clermont-Ferrand",
    "context": "63, Puy-de-Dôme, Auvergne-Rhône-Alpes",
    "importance": 0.54023,
    "municipality": "Clermont-Ferrand",
    "_type": "address"
  }
}

Démo Requete 2

curl -s "https://api-adresse.data.gouv.fr/search/?q=clermont+ferrand&type=municipality" | \
jq '.features[] | {citycode: .properties.citycode, postcode: .properties.postcode, commune: .properties.city}'

Résultat:

{
  "citycode": "63113",
  "postcode": "63000",
  "commune": "Clermont-Ferrand"
}

Scripts BASH adresse

#!/bin/bash
# Script pour extraire les informations d'adresses via BAN (fichiers CSV ou API)
# source https://adresse.data.gouv.fr/data/ban/adresses/latest/csv/
# source https://api-adresse.data.gouv.fr

# Aide d'utilisation
usage() {
    echo "Usage: $0 -d DEPARTEMENT -c CODE -m MODE [-C COMMUNE] [-v VILLE] [-h]"
    echo "Extrait les rues d'une ville selon différents critères"
    echo ""
    echo "Options:"
    echo "  -d DEPARTEMENT   Code du département (ex: 51, 75) - non requis en mode 'api'"
    echo "  -c CODE          Code INSEE, postal ou autre selon le mode"
    echo "  -m MODE          Mode de recherche : 'insee', 'postal' ou 'api'"
    echo "  -C COMMUNE       Filtre sur le nom exact de la commune (2ème colonne) - modes insee/postal"
    echo "  -v VILLE         Nom de la ville pour le mode 'api' (optionnel, utilise le code postal si non fourni)"
    echo "  -h               Affiche cette aide"
    echo ""
    echo "Exemples:"
    echo "  $0 -d 51 -c 51454 -m insee"
    echo "  $0 -d 51 -c 51100 -m postal -C \"Reims\""
    echo "  $0 -m api -c 51100 -v \"Reims\""
    echo "  $0 -m api -c 51100"
    exit 1
}

# Variables par défaut
departement=""
code=""
mode=""
commune=""
ville=""

# Traitement des arguments
while getopts ":d:c:m:C:v:h" opt; do
    case $opt in
        d) departement="$OPTARG" ;;
        c) code="$OPTARG" ;;
        m) mode="$OPTARG" ;;
        C) commune="$OPTARG" ;;
        v) ville="$OPTARG" ;;
        h) usage ;;
        \?) echo "Option invalide: -$OPTARG" >&2; usage ;;
        :) echo "Option -$OPTARG nécessite un argument." >&2; usage ;;
    esac
done

# Vérification des paramètres obligatoires
if [ -z "$mode" ]; then
    echo "Erreur: Le paramètre -m est obligatoire"
    usage
fi

# Vérification du mode
if [ "$mode" != "insee" ] && [ "$mode" != "postal" ] && [ "$mode" != "api" ]; then
    echo "Erreur: Le mode doit être 'insee', 'postal' ou 'api'"
    usage
fi

# Traitement spécifique au mode API
if [ "$mode" = "api" ]; then
    if [ -z "$code" ]; then
        echo "Erreur: En mode 'api', le paramètre -c (code postal) est obligatoire"
        usage
    fi

    # Utilisation du code postal comme valeur par défaut pour q si ville n'est pas spécifiée
    if [ -z "$ville" ]; then
        echo "Interrogation de l'API pour le code postal ${code}..."
        curl -s "https://api-adresse.data.gouv.fr/search/?q=${code}&postcode=${code}&type=municipality" | \
        jq '.features[] | {citycode: .properties.citycode, commune: .properties.city}'
    else
        # Encodage de la ville pour URL
        encoded_ville=$(echo "$ville" | sed 's/ /+/g')

        echo "Interrogation de l'API pour la ville '${ville}' (code postal: ${code})..."
        curl -s "https://api-adresse.data.gouv.fr/search/?q=${encoded_ville}&postcode=${code}&type=municipality" | \
        jq '.features[] | {citycode: .properties.citycode, commune: .properties.city}'
    fi

    exit 0
fi

# Vérification des autres paramètres obligatoires pour modes CSV
if [ -z "$departement" ] || [ -z "$code" ]; then
    echo "Erreur: Les paramètres -d et -c sont obligatoires en modes 'insee' et 'postal'"
    usage
fi

# Suite du traitement pour les modes CSV (identique à l'original)
filename="adresses-${departement}.csv"
gzfile="${filename}.gz"
url="https://adresse.data.gouv.fr/data/ban/adresses/latest/csv/${gzfile}"

echo "Téléchargement du fichier pour le département ${departement}..."
wget -q "$url"

echo "Décompression..."
gunzip -f "$gzfile"

# Fonction pour filtrer par commune si spécifiée
filter_by_commune() {
    if [ -z "$commune" ]; then
        cat  # Pas de filtre, on affiche tout
    else
        awk -F' *\\| *' -v commune="$commune" 'tolower($2) == tolower(commune)'
    fi
}

# Traitement selon le mode
echo "Extraction des rues pour le code ${code} en mode ${mode}..."

if [ "$mode" = "insee" ]; then
    awk -F';' -v code="$code" '$7 == code {print $5 " | " $8 " | " $6}' "$filename" | awk '{$1=$1};1' | sort -u | filter_by_commune
elif [ "$mode" = "postal" ]; then
    awk -F';' -v code="$code" '$6 == code {print $5 " | " $8 " | " $7}' "$filename" | awk '{$1=$1};1' | sort -t '|' -u -k2,2 -k1,1 | filter_by_commune
fi

# Nettoyage (optionnel)
rm "$filename"
Exemples:
  ./test.sh -d 51 -c 51454 -m insee #(affiche toutes les rues)
  ./test.sh -d 51 -c 51100 -m postal -C "Reims" #(affiche toutes les rues)
  ./test.sh -m api -c 51100 -v "Reims" #(trouve les codes insee)
  ./test.sh -m api -c 51100 #(trouve les codes insee)