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

À propos de ce blog

Blog dédié à l'OpenData et aux services web (API) et surtout à leur intégration dans nos solutions FileMaker.

:excl: Les billets de ce blog sont susceptibles d'être mis à jour régulièrement. Je vous invite à suivre le blog pour être informé des ajouts et surtout des mises à jour, en cliquant sur le bouton «Suivre» juste au-dessus…

La liste des sources de données ouvertes et API détaillées dans les billets sont listées dans le billet Introduction à l'Open Data.

Billets dans ce blog

David Julot

ipb_blog_OpenData__introduction.png

L'Open Data devient de plus en plus à la mode, il ne se passe un jour sans qu'on en parle. Alors que cela fait des années que tout le monde souhaite en utiliser, il n'y a qu'à voir les nombreux messages de ce forum où l'un demande comment intégrer la liste des codes postaux français, un autre la liste des communes, etc.

Auparavant, nous devions acquérir le fichier souhaité, ou le récupérer d'une manière plus ou moins autorisée, puis l'importer dans sa solution. Cela convient bien au début, les utilisateurs de la solution sont ravis… Mais au fil du temps, les données ne sont plus à jour. Plusieurs problèmes se posent donc :

  • La fiabilité de la donnée. La source n'étant pas forcément officielle, il n'y a donc aucune garantie sur l'exactitude de la donnée ;
  • La pérennité de la donnée. Une donnée, quelque soit son type, est rarement pérenne. Il n'y a qu'a voir la liste des régions françaises en cette année charnière…

Notre vie quotidienne est de plus en plus connectée, mobile… Les sociétés privées, publiques et même les États en ont pris conscience et l'on commence à voir l'ouverture de leurs données.

Je vous proposerai dans ce blog dédié à l'Open Data, de découvrir comment intégrer ces jeux de données dans vos solutions FileMaker. Cela permettra d'aborder plusieurs sujets : les scripts, les plugins, les fonctions personnalisées, FileMaker Server, FileMaker Go… Mais avant tout, d'apporter à vos solutions des fonctionnalités supplémentaires !

 

L'intégration

L'intégration d'un jeux de données peut s'effectuer de différentes manières :

  • L'importation. L'importation d'un jeu de données est une méthode classique qui a les avantages :
    • d'avoir un temps de réponse très faible, puisque le jeu de données est intégré à la solution ;
    • de permettre une grande autonomie de l'utilisateur puisque cela ne nécessite aucune connexion à un réseau. Par contre, il faut prévoir les mises à jour du jeu de données, et peut-on l'automatiser ?
  • L'interrogation. L'interrogation d'un jeu de données est une méthode de plus en plus répandue grâce à la popularité du réseau Internet. L'interrogation a l'avantage de permettre l'accès à la donnée la plus à jour, mais cela contraint l'utilisateur d'être connecté en permanence, ou du moins au moment la donnée est nécessaire.

Mais cela dépend énormément du fournisseur du jeu de données. Ce dernier peut choisir de proposer ses données sous forme de fichier, de service web, ou des deux. Il peut de plus apporter des contraintes comme par exemple le nombre maximum d'interrogations par heure/jour/mois, etc.

 

Les formats de données

Nous trouvons différents formats de données, mais principalement :

  • Pour l'importation. Dans le cas de fichiers à importer :
    • les classiques : CSV, TAB, voir EXCEL ;
    • moins souvent : XML.
  • Pour l'interrogation. Dans le cas de services web :
    • le plus classique : XML ;
    • le plus populaire en ce moment : JSON.

Le type d'intégration et du format de données va déterminer le développement de notre solution FileMaker :

  • Importation d'un fichier CSV, TAB ou EXCEL. C'est un grand classique, puisque cela passe par l'importation du fichier en question. Le développement en est donc très simple. Par contre si le format du contenu du fichier venait à être modifié, il faudra alors revoir son importation dans la solution (ordre d'importation).
  • Importation / Interrogation d'un fichier XML. C'est pour FileMaker une possibilité qui existe depuis sa version 5... Cela demande des compétences en XML et surtout en XSL-T. Ce format de données nous oblige, quelque soit le type d'intégration, d'effectuer une importation.
  • Interrogation JSON. Cela passe par l'interrogation d'une API (interface web) et l'interprétation du code obtenu, FileMaker n'intégrant pas de parser JSON. Il faut donc prévoir l'usage soit d'un plugin comme BaseElements Plugin (gratuit) ou bien MBS FileMaker Plugin (payant), soit l'usage de fonctions personnalisées.

 

Sources de données

Il existe un très grand nombre de sources de données, et nous en découvrirons d'autres ensemble dans les prochains billets, mais voici pour commencer une liste de sources étatiques de données ouvertes :

 

ipb_blog_OpenData__listeAPI.png

Vous trouverez ici la liste des données ouvertes et/ou des API traitées dans les différents billets de ce blog dédié à l'Open Data. Vous y trouverez aussi celles en cours de préparation… Vous souhaitez en voir d'autres traitées, n'hésitez pas à proposer vos idées ou suggestions dans les commentaires…

  • dataNOVA
    plateforme officielle des données ouvertes du Groupe La Poste
  • OpenWeatherMap
    plateforme dont la mission est inspirée des services proposées par OpenStreetMap et Wikipedia pour rendre l'information gratuite et disponible au plus grand nombre
    • API données météorologiques actuelles ( import | api ) : en cours de finalisation…
       
  • Gravatar
    service web gratuit dont la mission est la centralisation de votre avatar favorisant l'identification des messages sur les blogs, forums, etc. Il est d'ailleurs utilisé par ce forum.
    • API d'interrogation Image et Profile ( api ) : en préparation…
       
  • medicaments.gouv.fr
    la base de données publiques des médicaments permet au grand public et aux professionnels de santé d'accéder à des données et documents de référence sur les médicaments commercialisés ou ayant été commercialisés durant les deux dernières années en France
    • Base de données des médicaments ( importation ) : en préparation…

 

ipb_blog_OpenData__outils.png

Pour utiliser certains exemples proposés dans les billets, il est nécessaire d'avoir quelques outils. Je vous propose dans ce billet spécifique la liste des outils utilisés par les exemples, où les trouver, comment les installer… Ce billet sera mis à jour régulièrement.

 

ipb_blog_OpenData__proprietesintellectuelles.png

Tous les exemples proposés dans les billets de ce blog dédié à l'Open Data sont offerts à la communauté, suivant le principe partagé par ce forum et par la société pour laquelle je travaille : Lesterius dont le slogan est «Sharing knowledge and expérience». Ils sont livrés en l'état, et je ne garantie pas leur bon fonctionnement.

Les données ouvertes ou API référencées dans ce blog peuvent être protégées par les droits nationaux ou internationaux sur la propriété intellectuelle. J'ai fait en sorte de mentionner en début de chaque billet le droit appliqué sur la propriété intellectuelle et les éventuelles restrictions quant à leur utilisation ou distribution.

Puisque je parle de propriétés intellectuelles, j'utilise pour les icônes affichées dans ce blog ceux proposées par le site flaticon.com et plus particulièrement ceux de Gregor Cresnar dans sa collection «Handy Icon Collection».

 

David Julot

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

David Julot

ipb_blog_OpenData__outils_filemaker.png

 

Certains exemples proposés dans ce blog nécessitent des outils indispensables pour leur bon fonctionnement. Vous trouverez donc dans ce billet, qui sera mis à jour régulièrement, la liste des outils ainsi que le moyen pour les récupérer et les installer.

 

BaseElements Plugin

Ce module complémentaire à FileMaker Pro est un petit couteau suisse qui offre quelques fonctions très intéressantes et surtout utiles à bon nombre de développements. Il a quelques avantages : il est gratuit, il est open source et fonctionne sous FileMaker Server.

Il est développé par la société australienne Goya Pty Ltd. Les liens utiles :

Installation

L'installation du plugin est très simple, il suffit de suivre la procédure suivante :

  1. Quittez FileMaker Pro si celui-ci est ouvert ;
  2. Télécharger la version du plugin correspondant à votre plateforme ;
  3. Décompresser le fichier zip ;
  4. Placer le plugin dans le répertoire Extensions de FileMaker Pro ;
  5. Ouvrir FileMaker puis :
    • sous Mac OS X : choisir l'article de menu FileMaker Pro > Préférences… ;
    • sous Windows : choisir l'article de menu Edition > Préférences… ;
  6. Sélectionner l'onglet Plug-ins et vérifier la présence du plugin BaseElements et son activation ;
  7. Cliquer sur le bouton OK.

 

×