Aller au contenu
  • billets
    4
  • commentaires
    5
  • vues
    1 640

Les codes postaux français

David Julot

2 138 vues

ipb_blog_OpenData__dataNOVA_codesPostaux.png

Pour notre première intégration, nous allons nous intéresser aux codes postaux français, en imaginant que nous souhaitons proposer aux utilisateurs de notre solution FileMaker une liste de communes suivant le code postal saisi. Pour cela nous avons besoin de la liste des codes postaux et des communes françaises associées. En effectuant une recherche sur le site data.gouv.fr nous trouvons le jeu de données souhaité et son producteur dataNOVA.

dataNOVA est la plateforme officielle des données ouvertes du Groupe La Poste, en nous connectant sur le site dédié nous y trouvons la description du jeu de données de la Base officielle des codes postaux dont voici le résumé :

 

ipb_blog_OpenData__chapitre_importation.png

Avant de savoir quel format de fichier nous allons utiliser pour l'intégration par importation du jeu de données, nous devons les étudier, cela fait partie de notre analyse avant de pouvoir prendre notre décision quand à la méthodologie à employer pour effectuer une intégration par importation.

 

Le format CSV

Commençons par le premier d'entre eux, le format CSV. À première vue notre choix porterait sur ce format car c'est le plus léger, seulement 1,6 Mo. Cette petite taille permettra d'effectuer un téléchargement rapide et sans gréver la bande passante.

Le lien pour le télécharger est le suivant :

http://datanova.legroupe.laposte.fr/explore/dataset/laposte_hexasmal/download/?format=csv&timezone=Europe/Berlin&use_labels_for_header=true

En effectuant une importation dans FileMaker Pro, on s'aperçoit que ce fichier utilise le point-virgule comme séparateur de données et non la virgule comme le souhaiterai FileMaker. Ce qui ne nous permet pas de l'importer directement. Cela va donc nous demander un petit traitement préalable. Le traitement en question consiste à :

  1. Importer le fichier directement dans une rubrique texte ;
  2. Remplacer le point-virgule par la virgule ;
  3. Exporter le contenu de la rubrique dans un fichier texte.

Le fichier ainsi obtenu pourra être importé de manière classique dans notre solution FileMaker. Ces opérations ne demande aucun plugin ou fonction personnalisée.

Vous trouverez un exemple de script pour effectuer cette importation dans le fichier d'exemples.

 

Le format EXCEL

Le lien pour télécharger le jeu de données au format EXCEL est le suivant :

http://datanova.legroupe.laposte.fr/explore/dataset/laposte_hexasmal/download/?format=xls&timezone=Europe/Berlin&use_labels_for_header=true

Le format EXCEL du jeu de données proposé par dataNOVA est au format Feuille de calcul Excel 2004 XML, format non reconnu par FileMaker Pro. Nous avons donc un format EXCEL qui est en fait un format XML. Pour importer ce jeu de données il nous faudra donc créer une feuille de transformation XSL-T. Pour cela je vous suggère de lire ou relire mes billets sur l'importation de données XML.

 

Le format JSON

Le lien pour télécharger le jeu de données au format JSON est le suivant :

http://datanova.legroupe.laposte.fr/explore/dataset/laposte_hexasmal/download/?format=json&timezone=Europe/Berlin

La récupération du fichier proprement dit n'est pas difficile, nous suivons la procédure suivante :

  1. Importation du fichier directement dans une rubrique texte ; 
  2. Traitement des données JSON.

Mais le point n°2 est plus compliqué car FileMaker Pro n'intègre pas de parser (traducteur) JSON. Il nous faut soit faire appel à un plugin tel que BaseElements Plugin (gratuit) ou MBS FileMaker Plugin (payant), soit faire appel à des fonctions personnalisées. Tout cela pour générer par une boucle toutes les données issues du fichier JSON.

 

En conclusion

Suite à l'analyse des trois formats de fichier proposés par dataNOVA, mon choix porte sur le format CSV, malgré la petite opération de remplacement de caractères, c'est le plus léger des trois (moins de 2 Mo) et le plus simple à mettre en œuvre via une importation classique.

Vous trouverez dans le fichier d'exemples un script effectuant ce type d'importation.

Ce type d'importation peut être effectuée régulièrement dans l'année pour maintenir la liste des communes et des codes postaux français à jour. Et aussi simplement qu'un clic de souris (pour une mise à jour à la demande), ou automatiquement par FileMaker Server, une fois par mois par exemple. Pour ce dernier cas, le script présent dans le fichier d'exemples ne fonctionne pas sous FileMaker Server.

 

 

ipb_blog_OpenData__chapitre_api.png

La documentation de l'API est disponible à l'adresse suivante, cette documentation intègre une console pour nous permettre d'effectuer des requêtes et tester ainsi les différentes options.

L'API proposé par dataNOVA permet d'effectuer des interrogations (requêtes) en ligne pour obtenir diverses informations. L'API fonctionne sous la forme d'une adresse URL, elle est donc simple à mettre en œuvre.

L'adresse URL de base est :

Le paramètre dataset avec la valeur laposte_hexasmal indique à l'API que nous effectuons une requête dans le jeu de données des codes postaux.

D'après la documentation de l'API, on peut effectuer nos interrogations en utilisant le paramètre en lui transmettant soit le nom d'une ville, soit le code postal, etc. La valeur transmise peut-être incomplète. Mais si nous souhaitant avoir un résultat plus précis et plus restreint, nous utiliserons d'autres paramètres.

 

Rechercher le code postal correspondant à une commune

Pour rechercher le code postal correspondand à une commune, nous utiliserons le paramètre refine.nom_de_la_commune et en lui adressant comme valeur la commune. Attention, nous utilisons ici un paramètre restrictif, il faudra envoyer le nom de la commune en majuscule, sans accent et sans apostrophe. Dans le fichier d'exemples vous trouverez un script qui effectue ces transformation.

Nous utiliserons donc une requête comme celle-ci :

Et nous obtenons en retour le résultat au format JSON

{
	"nhits":1,
	"parameters":{
		"dataset":[
			"laposte_hexasmal"
		],
		"refine":{
			"nom_de_la_commune":"CHARTRES"
		},
		"timezone":"UTC",
		"rows":10,
		"format":"json"
	},
	"records":[
		{
			"datasetid":"laposte_hexasmal",
			"recordid":"1f0f84c05e42dbfa1b0d4f6780ae4552d9b9a225",
			"fields":{
				"nom_de_la_commune":"CHARTRES",
				"libell_d_acheminement":"CHARTRES",
				"code_postal":"28000",
				"code_commune_insee":"28085"
			},
			"record_timestamp":"2016-05-09T13:17:00+00:00"
		}
	],
	"facet_groups":[
		{
			"name":"nom_de_la_commune",
			"facets":[
				{
					"name":"CHARTRES",
					"path":"CHARTRES",
					"count":1,
					"state":"refined"
				}
			]
		}
	]
}

 

Le but du jeu c'est de récupérer le contenu de la valeur code_postal dont le chemin JSON est records[0].fields.code_postal.

Le [0] correspond à la première valeur du tableau records.

Et s'il y a plusieurs codes postaux trouvés (car il y a plusieurs communes homonymes en France) il faut alors effectuer une boucle pour générer notre liste de codes postaux correspondant à la commune recherchée. Vous trouverez dans le fichier d'exemples un script effectuant cette opération. Pour connaître le nombre d'enregistrements trouvés, nous récupérons la valeur de nhits.

Et comme nous obtenons du JSON, nous utiliserons le plugin BaseElements pour nous permettre d'effectuer toutes ces opérations. Si vous ne l'avez pas, vous trouverez dans ce billet tous les éléments nécessaires pour le télécharger et l'installer

 

Rechercher la commune correspondante à un code postal

Pour rechercher la commune correspondante à un code postal, nous utiliserons le paramètre refine.code_postal et en lui adressant comme valeur le code postal. Attention, pour un code postal pouvons obtenir plus de dix communes, l'API se limite par défaut à 10 enregistrements retournés, et comme nous ne souhaitons pas effectuer plusieurs appels, nous augmenterons la limite par défaut en utilisant le paramètre rows et en lui mettant la valeur 50, qui devrait être largement suffisant.

Nous utiliserons donc une requête comme celle-ci :

Et nous obtenons en retour le résultat au format JSON

{
	"nhits":1,
	"parameters":{
		"dataset":[
			"laposte_hexasmal"
		],
		"refine":{
			"code_postal":"28000"
		},
		"timezone":"UTC",
		"rows":50,
		"format":"json"
	},
	"records":[
		{
			"datasetid":"laposte_hexasmal",
			"recordid":"1f0f84c05e42dbfa1b0d4f6780ae4552d9b9a225",
			"fields":{
				"nom_de_la_commune":"CHARTRES",
				"libell_d_acheminement":"CHARTRES",
				"code_postal":"28000",
				"code_commune_insee":"28085"
			},
			"record_timestamp":"2016-05-09T13:17:00+00:00"
		}
	],
	"facet_groups":[
		{
			"name":"code_postal",
			"facets":[
				{
					"name":"28000",
					"path":"28000",
					"count":1,
					"state":"refined"
				}
			]
		}
	]
}

Comme précédemment, le but du jeu c'est de récupérer le contenu cette fois-ci de la valeur nom_de_la_commune dont le chemin JSON est records[0].fields.nom_de_la_commune.

Le [0] correspond à la première valeur du tableau records.

Et s'il y a plusieures communes trouvées (car il y a plusieurs communes ayant le même bureau distributeur en France) il faut alors effectuer une boucle pour générer notre liste de communes correspondantes au code postal recherché. Vous trouverez dans le fichier d'exemples un script effectuant cette opération. Pour connaître le nombre d'enregistrements trouvés, nous récupérons la valeur de nhits.

Et comme nous obtenons du JSON, nous utiliserons le plugin BaseElements pour nous permettre d'effectuer toutes ces opérations. Si vous ne l'avez pas, vous trouverez dans ce billet tous les éléments nécessaires pour le télécharger et l'installer

 

ipb_blog_OpenData__chapitre_base.png

Voici le fichier d'exemples, vous y trouverez trois scripts :

  • Le premier pour la récupération de la liste des codes postaux et des communes via une importation d'un fichier CVS.
  • Le deuxième pour la récupération de la liste des codes postaux suivant une ville saisie via l'API.
  • Le troisième pour la récupération de la liste des communes suivant un code postal saisi via l'API.

Bonne découverte !

:excl: Le fichier est optimisé pour FileMaker Pro 14 et plus. Si vous avez une version antérieure vous perdrez uniquement de l'interface graphique… Ce fichier d'exemples ne comporte pas de fonction personnalisée.

Fichier d'exemples : dataNOVA.zip



3 Commentaires


Commentaires recommandés

Bonsoir

je n'ai pas réussi à me servir de ce fichier.

dans les scripts j'ai des fonctions manquantes.

<Fonction manquante> ( $dataNOVA_url_API & $dataNOVA_API_CP & $cp )

Merci de votre aide

Partager ce commentaire


Lien vers le commentaire
Il y a 17 heures, omolko a dit :

dans les scripts j'ai des fonctions manquantes.

<Fonction manquante> ( $dataNOVA_url_API & $dataNOVA_API_CP & $cp )

Bonjour,

Normalement à l'ouverture du fichier exemple vous deviez avoir un message vous indiquant qu'il vous manque le plugin BaseElement Plugin. Pour l'obtenir et l'installer, vous pouvez suivre la procédure décrite dans ce billet : 

 

Partager ce commentaire


Lien vers le commentaire

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×