datagouv / cadastre.data.gouv.fr

Données cadastrales ouvertes - le site
https://cadastre.data.gouv.fr
MIT License
36 stars 9 forks source link

Ajouter listing des fichiers (improved index-of) #10

Closed tusbar closed 2 years ago

tusbar commented 7 years ago
ThomasG77 commented 2 years ago

Bonsoir,

3 json maintenant sur https://cadastre.data.gouv.fr/data/

Consommable avec ces appels qui demande la version compressée du JSON qui passe de quelques centaines de MB à quelques MB. Le prix à payer est de décompresser sur le client

# Avec curl + gunzip
curl -H "Accept-Encoding: gzip" https://cadastre.data.gouv.fr/data/etalab-cadastre-latest.json --output - | gunzip -d > etalab-cadastre-latest.json
# Avec wget + gunzip
wget --header="Accept-Encoding: gzip" https://cadastre.data.gouv.fr/data/dgfip-pci-vecteur-latest.json -O - | gunzip -d > dgfip-pci-vecteur-latest.json

En utilisant un appel HTTP avec le "bon" header en utilisant Python

import gzip
import json
import urllib.request

URL = 'https://cadastre.data.gouv.fr/data/dgfip-pci-vecteur-latest.json'

header={'Accept-Encoding': 'gzip'}
req = urllib.request.Request(url=URL, headers=header)
with urllib.request.urlopen(req, timeout=5) as response:
    pagedata = gzip.decompress(response.read())
    data = json.loads(pagedata)

with open(f"{URL.split('/')[-1]}", 'w') as outfile:
    json.dump(data, outfile, indent=4)

Nous ne donnons pas les dates des fichiers pour ne pas encore alourdir la taille des fichiers JSON. latest correspond toujours à la dernière date sur https://cadastre.data.gouv.fr/data/dgfip-pci-vecteur/ Nous avons fait le choix de rajouter partout l'URL complète de chaque dossier ou fichier disponible. La seule "metadata" est la taille des fichiers côté disque.

Je laisse la discussion ouverte pour le moment, si vous avez des retours.

Addendum:

Une recette pour lister les sections depuis les noms des fichiers

wget --header="Accept-Encoding: gzip" https://cadastre.data.gouv.fr/data/dgfip-pci-vecteur-latest.json -O - | gunzip -d > dgfip-pci-vecteur-latest.json
jq -r '.[].contents[] | select(.name | endswith("edigeo")) | .contents[] | select(.name | endswith("feuilles"))| .contents[].contents[].contents[].name' dgfip-pci-vecteur-latest.json | cut -d '/' -f 11 | sed 's/edigeo-\|\.tar\.bz2//g' >| sections.txt