vendredi 8 juillet 2016

Vérifier ses adresses clients grace aux API adresse.data.gouv.fr



Il faut souvent utiliser des outils payants pour valider les adresses de vos bases de données clients, de plus c'est généralement assez coûteux. 
Il y a aussi Google Maps, mais là aussi il faut payer ou vous limiter à 2500 connexions par jours et à d'autres restrictions de vitesse.

Je vous propose d'utiliser les nouvelles API  http://adresse.data.gouv.fr/api/ crée par IGN, la Poste et OpenStreetMap, donc des acteurs reconnus.

Pour ce faire, un simple formulaire Windev dans lequel je vais taper une adresse et un code postal, et vérifier la cohérence des informations saisies. L'API retourne un geojson FeatureCollection respectant la spec GeoCodeJSON:

N'hésitez pas à consulter en détail le site de l'API car on peut aussi passer en paramètre un fichier CSV par exemple.

Formulaire windev de recherche de l'adresse
Formulaire de base 
Le bouton chercher construit la requête avec l'adresse et le code postal. Cette requête est transmise à l'API et on récupère une chaîne au retour au format JSON si tout va bien.
J'ai du ajouter un paramètre et spécifié l'en tête au format XML pour que tout fonctionne bien avec Windev.

code du bouton recherche
Code lié au bouton chercher

Le code en plein texte:

sMarequete est une chaîne ANSI ="http://api-adresse.data.gouv.fr/search/?q=%1&postcode=%2"
sMarequete=ChaîneConstruit(sMarequete,SAI_Adresse,SAI_Ville)
HTTPParamètre(httpParamètreMode, 1)

bCMaRéponse est un boolean=HTTPRequête(sMarequete,"","X-Requested-WITH: XMLHttpRequest"+RC)
SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON
sMonresultat est une chaîne ANSI=HTTPDonneRésultat(httpRésultat)
soit monresultat=JSONVersVariant(sMonresultat)
POUR TOUT idsearch DE monresultat.features
TableAjouteLigne(TABLE_adresses,idsearch.properties.name,idsearch.properties.city,idsearch.geometry.coordinates[1],idsearch.geometry.coordinates[2],idsearch.properties.score)
FIN
FIN


On construit un variant automatiquement avec la fonction JSONVersVariant et on parcours ce dernier pour ajouter toutes les occurrences trouvées au tableau.
On récupère l'adresse, la ville, les coordonnées du point et un score entre 0 et 1 selon la qualité du résultat. Mon exemple est simpliste mais on peut de cette façon corriger et valider ses adresses et géocoder ses clients.