Aller au contenu

Automatiser la publication et la mise à jour de données de PostgreSQL vers Data.gouv.fr#

📆 Date de publication initiale : 31 Aout 2021

Mots-clés : PostgreSQL | data.gouv.fr | Open Data | Bash | API | OGR | jq | cURL

Prérequis#

Intro#

Logo opendata

Être géomaticien dans un petit EPCI c'est souvent être multitâche et cela implique également d'intervenir sur une diversité de sujets. D'ailleurs celui qui va nous intéresser aujourd'hui, c'est l'Open Data !

Je ne vais pas vous faire un rappel sur l'ouverture des données publiques mais si ça ne vous parle pas, je vous recommande l'introduction de l'article proposé par le Parc national des Écrins (Cendrine HOARAU / Juin 2021) qui propose également une solution pour publier des données en open data sur son propre serveur.

Ouverture des données publiques

En ce qui me concerne et contrairement au Parc national des Écrins, je n'ai pas de serveur à disposition pour y déposer mes données, j'ai donc développé un processus en Bash qui s'appuie sur OGR pour extraire des données stockées dans une base PostgreSQL et les publier directement sur le portail data.gouv.fr à travers l'API dédiée.

Commenter cet article

pg2datagouv#

Avant de démarrer, voici une représentation schématique du fonctionnement de pg2datagouv.

graph TD; A{pg2datagouv.sh} --> G(config.env); G --> A; A --> D[dechets_composteurs.sh] --> |Extraction<br>avec OGR| U(composteurs.shp); D --> G; G --> D; U --> H{API}; R{Tâche CRON} --> |Lancer| A; S(metadonnees.json) --> A; H --> S; A --> H; M(composteurs.env) --> H; H --> |Publier| X{Data.gouv.fr};

Accéder à pg2datagouv

Info

Je rappelle que pg2datagouv repose sur l'utilisation de jq , cURL et GDAL et que vous devez les installer avant de vous lancer.

Dans la suite de ce tutoriel, je vais détailler les étapes à prendre en compte pour pouvoir adapter le projet à votre structure/infrastructure après l'avoir récupéré depuis Github.

Adapter et utiliser pg2datagouv#

1. Configurer l'environnement de travail#

Avant de se lancer, il est bon de paramétrer le fichier de configuration que vous devrez adapter à votre organisation et qui sera utilisé par les différents scripts présentés ci-après. On y définit notamment les différents répertoires de travail ainsi que les variables permettant d'accéder au portail national et à la base de données.

Voici le fichier config.env à adapter :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# REPERTOIRE DE TRAVAIL
REPER='/Users/'

# REPERTOIRE DE SORTIE
REPER_OUT='data_out'

# REPERTOIRE TEMPORAIRE
REPER_TEMP='data_temp'

# REPERTOIRE PARAMETRES DATAGOUV
REPER_CONFIG_JSON='data_config_json'

# REPERTOIRE DESCRIPTION JEU DE DONNEES
REPER_DESC='description'

# PARAMETRES OGR
LINK_OGR=ogr2ogr
ENCODAGE=UTF-8

# VARIABLES DATA-GOUV.FR
API='https://www.data.gouv.fr/api/1'
API_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXX'
ORG='XXXXXXXXXXXXXXXXXXXXXXXXXX'

# CONNEXION A LA BASE DE DONNEES
C_HOST='localhost'
C_USER='user'
C_PASSWORD='pass'
C_DBNAME='database'

Consulter le fichier

2. Un script d'extraction par donnée à publier#

Dans le répertoire scripts, vous devez y placer un script Bash pour chaque donnée à extraire. Chacun des scripts va permettre de personnaliser la mise en forme de la donnée extraite depuis la base PosgreSQL et de gérer les différents formats en sortie (shp, json, sql, csv, ods, gpkg,..).

Voici un exemple d'extraction des informations liées aux composteurs au format shapefile.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Lecture du fichier de configuration
. ./config.env
# ------------------------------------------------------------------------------------------------------------
var_group=DECHETS
var_file=COMPOSTEURS
schema=dechet # Définir le schéma dans lequel se trouve la donnée

# ------------------------------------------------------------------------------------------------------------
# ------------------------------------ COMPOSTEURS -----------------------------------------------------------
# ------------------------------------------------------------------------------------------------------------
# Définir la requête SQL permettant la mise en forme de la donnée à extraire.
export requete="SELECT
-----------------------------------------
ST_X(geom) AS x,
-----------------------------------------
ST_Y(geom) AS y,
-----------------------------------------
geom as geometry,
-----------------------------------------
id_com,
-----------------------------------------
type,
-----------------------------------------
adresse,
-----------------------------------------
'Communauté de Communes ...' as source
-----------------------------------------
FROM composteurs WHERE ST_IsValid(geom)"

# ------------------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------------------
# ------------------------------------------------------------------------------------------------------------

if [ "$FORMAT_SIG" = "SHP" ]
then
  echo "Debut : $var_group > $var_file.shp"
  $LINK_OGR -progress -s_srs EPSG:2154 -t_srs EPSG:$OUT_EPSG -f 'ESRI Shapefile' $REPER_TEMP'/'$DONNEE'/'$OUT_EPSG'/'$DATE_T'_'$DONNEE'_'$FORMAT_SIG$NZ'.shp' PG:"host='$C_HOST' user='$C_USER' dbname='$C_DBNAME' password='$C_PASSWORD' active_schema='$schema' schemas='$schema'" -dialect SQLITE -sql "SELECT * FROM ($(echo $requete | sed -e 's/-//g'))" -nlt point -lco ENCODING=$ENCODAGE -lco SPATIAL_INDEX=YES --debug ON -skipfailures
  echo "Fin : $var_group > $var_file.shp"
fi

Consulter l'exemple des composteurs

3. Intégrer le script d'extraction dans le script parent : pg2datagouv.sh#

Afin d'appeler le script enfant préalablement créé vous devez l'ajouter au script parent qui sera exécuté (un script pour les gouverner tous). De plus, en ajoutant le script enfant vous pouvez également décider d'ajouter un fichier associé comme par exemple une licence qui sera intégrée dans le zip final publié.

Info

Nota les fichiers annexes sont rangés dans le répertoire attachment.

Voici un exemple correspondant toujours à la donnée des composteurs.

Premièrement, ajouter la variable correspondant à la donnée définie

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if [ "$#" -ge 1 ]; then
  if [ "$1" = "COMPOSTEURS" ];
  then
    a_DONNEE=$1
  else
  IFS= read -p "DONNEE : " p_DONNEE
  if [ "$p_DONNEE" = "COMPOSTEURS" ];
  then
    export a_DONNEE=$p_DONNEE
  else
    echo "Erreur de paramètre"
    exit 0
  fi
fi
else
  IFS= read -p "DONNEE : " p_DONNEE
  if [ "$p_DONNEE" = "COMPOSTEURS" ];
  then
    export a_DONNEE=$p_DONNEE
  else
    echo "Erreur de paramètre"
    exit 0
  fi
fi

Deuxièmement, définir le script d'extraction de la donnée ainsi que les actions associées.

1
2
3
4
5
if [ "$DONNEE" = "COMPOSTEURS" ]; then
  # LANCEMENT DE L'EXTRACTION
  sh scripts/dechets_composteurs.sh | tee $REPER_TEMP'/'$DONNEE'/'$OUT_EPSG'/dechets_composteurs.txt'
  # AJOUT DE LA LICENCE
  cp attachment/Z_Licence.txt $REPER_TEMP'/'$DONNEE'/'$OUT_EPSG'/Z_Licence.txt'

Consulter le fichier

4. Renseigner les métadonnées du jeu de données#

Comme pour le script d'extraction des données, il faut créer un fichier définissant les paramètres de chaque jeu de données publié (titre, licence, description, tags,...) et qui seront utilisés par le site data.gouv.fr pour générer la fiche associée au jeu de données.

1
2
3
4
5
6
7
TITLE='Composteurs collectifs'
DESCRIPTION='Points localisant les sites de compostage partagé. Ces aires de compostage partagé sont mises en place par Communauté de Communes du ... dans le cadre de sa politique de réduction des déchets.'
TAG='dechet,composteurs,compostage,compost,CCPL'
FREQUENCY='monthly'
LICENSE='lov2'
SPATIAL='{"geom": null, "granularity": "fr:epci", "zones": ["fr:epci:000000000@2019-01-01"]}'
TEMPORAL_COVERAGE=''

Consulter le fichier

5. Exécution#

Une fois que tout est configuré, il est possible de lancer manuellement la publication d'une donnée en passant les paramètres nom_table code_ EPSG format :

1
pg2datagouv.sh COMPOSTEURS 2154 CSV

Les données seront alors directement publiées sur data.gouv.fr à l'aide de l'API et vous pourrez ensuite voir votre jeu de données dans l'interface de gestion du site.

Jeu de données publié

Découvrir l'API

Info

Une fois le processus d'extraction validé, il est également recommandé d'automatiser la publication à l'aide de tâches cron en définissant la fréquence d'actualisation des ressources.

6. Et après#

Une fois qu'une ressource est publiée pour un jeu de données, leurs métadonnées respectives sont stockées dans le répertoire : data_config_json. Ces fichiers contiennent notamment un identifiant unique exploité pour leurs mises à jour à suivre.

Important

Il est important de ne pas supprimer ces fichiers une fois le jeu de données ou la ressource publiés.


Conclusion#

La solution que je vous propose nécessite un peu de temps de mise en oeuvre et quelques connaissances en bash mais elle permet ensuite de simplifier la publication et surtout l'actualisation de données sur le portail data.gouv.fr.


Auteur#

Florian Boret#

Portrait Florian Boret

Géomaticien/cartographe, je suis arrivé dans le monde de la géomatique en suivant un cursus « professionnalisant » (BTS Géomètre-Topographe, Licence pro GGAT, Master SIGAT). J’ai ensuite travaillé dans un bureau d’études spécialisé dans la production de données d’occupation du sol et puis pour des raisons personnelles je me suis expatrié quelques années au Sénégal où je me suis lancé comme géomaticien indépendant (DATA\WAX).

Depuis mon retour en France, je suis en charge du SIG de la communauté de communes du Pays de Lunel.

En dehors de ces expériences, j'ai aussi régulièrement initié de petits projets personnels iGeo-Topo, GIS-Blog.fr, osm2igeo, osm2igeotopo. Aujourd'hui, c’est avec plaisir que j’interviens également comme contributeur de GeoTribu.

Licence #

Ce contenu est sous licence Creative Commons International 4.0 BY-NC-SA, avec attribution et partage dans les mêmes conditions, sauf dans le cadre d'une utilisation commerciale.
Les médias d'illustration sont potentiellement soumis à d'autres conditions d'utilisation.

Détails

Vous êtes autorisé(e) à :

  • Partager : copier, distribuer et communiquer le matériel par tous moyens et sous tous formats
  • Adapter : remixer, transformer et créer à partir du matériel pour toute utilisation, exceptée commerciale.

Citer cet article :

"Automatiser la publication et la mise à jour de données de PostgreSQL vers Data.gouv.fr" publié par Florian Boret sur Geotribu sous CC BY-NC-SA - Source : https://static.geotribu.fr/articles/2021/2021-08-31_pg2datagouv/


Dernière mise à jour: 31 août 2021
Créé: 31 août 2021
Contributions à cette page : Florian Boret

Ce contenu est sous licence Creative Commons BY-NC-SA 4.0 International


Commentaires

Une version minimale de la syntaxe markdown est acceptée pour la mise en forme des commentaires.
Propulsé par Isso.
Retour en haut de la page