MapBoostadopt


August 8, 2015 - retour d'experience -


Comme vous avez pu le lire précèdemment j’ai réalisé un projet de “booster” (permettant d’améliorer l’efficacité) pour le site de rencontre AdopteUnMec.com .

Lors de mes expérimentations (afin de trouver une solution viable) j’ai agrégé une masse conséquente de profils dans le but de les analyser et les exploiter dans le futur. En effet, le booster fonctionne en visitant un profil (donc en récupérant ses informations) autant enregistrer ce profil pour une utilisation ultérieure.

Etant fan des big data et de cartographie j’ai donc souhaité mettre en place une grande carte interactive des profils d’AdopteUnMec. Suite à une mise en demeure ce projet a été désactivé. Il n’est malheureusement plus possible de le visualiser. Ce projet se voulait comme un outil pour faire du “buzz” autour des aspects “données” et “cartographie” afin de communiquer sur BoostAdopt.

Voici une capture d'écran du projet MapBoostAdopt. J'ai souhaité mettre en place une interface légère avec comme fond (sur tout l'écran) une carte interactive utilisant OpenStreetMap. Par dessus j'ai rajouté un champ de recherche par ville et aussi 5 profils d'invidus géographiquement présent sur la carte visible. Bien sûr si l'on zoomait sur une zone ces résultats étaient mis à jour. Sur cette capture d'écran on peut voir que des utilisateurs provenant de France, Suisse, Luxembourg, Belgique sont présents. Suite à l'ouverture du site italien et du site allemand j'ai aussi pu enregistrer des profils provenant de ces 2 nouveaux pays.

Coin technique

Les profils retournés par l’API sont des documents JSON ayant des formats variés, en effet un profil complet aura 100% des attributs remplis. Au contraire quelqu’un n’ayant rempli que le strict minimum n’aura que très peu d’attributs de retournés par l’API. Ce format étant varié j’ai donc choisi MongoDB qui est de type NoSQL pour gèrer le stockage de ces profils. Enfin MongoDB retourne directement un document JSON, je n’ai pas à demander à NodeJS de gèrer cela.

Exemple d’un JSON retourné par l’API d’AdopteUnMec.com

Alors que l’agrégation des profils se faisait dans le projet “boostAdopt” en PHP, j’ai mis en place une API en utilisant ExpressJS (qui est un framework NodeJS)

Le front utilise jQuery, boostrap et pour le côté cartographie j’ai utilisé MapQuest fournissant une cartographie OpenStreetMap ou Google Maps au choix. MapQuest fournit également un accès à ses API pour, par exemple, obtenir les coordonnées GPS du centre d’une ville.

Législation

Les données sont importantes celles qui sont personnelles ne peuvent être diffusées comme cela. J’ai donc analysé pendant plusieurs semaines les mentions légales, CGU et CGV du site AdopteUnMec.com. Les données personnelles (email, nom, prénom, etc) ne sont pas présentes dans les JSON générés par l’API AdopteUnmec. La seule contrainte est de s’assurer qu’uniquement des utilisateurs d’AdopteUnMec accèdent à ces données. J’ai donc mis en place une popin de confirmation (un peu comme celles demandant si un internaute est bien majeur sur certains sites). Chacun jugera de l’efficacité de ce système…

Déroulement du projet

Initialement le projet n’enregistrait que la fiche d’un individu : la localisation ne correspondait qu’à un champs portant le nom de la ville du membre. En France plusieurs villes ont le même nom, de plus certans membres renseignaient des villes à l’orthographe incorrecte. J’ai dû revoir en partie l’agréagation des données afin de sauvegarder le pays, la région mais aussi le département du membre.

MapQuest fournissant des API retournant les coordonées GPS d’un point géographie comme une ville, j’ai ensuite associé chaque ville à des coordonnées GPS. Enfin il ne me restait plus qu’à associer la ville du profil à ce tableau de coordonnées.

Enfin pour l’affichage j’ai choisi la librairie leaflet permettant de représenter des clusters de marqueurs géographiques. Dans les faits je place plusieurs milliers de marqueurs sur ma carte OpenStreetMap mais afin de la rendre lisible leaflet les affiche sont forme de cluster en indiquant le nombre de marqueur que ça représente. C’est la représentation la plus lisible possible.

NodeJS : lors de la mise en production et des premiers tests de montée en charge je me suis rendu compte que “forever” de NodeJS se met parfois à “déconner”. Il fait monter la charge du serveur à 95 ou 98% de CPU … ce bug était connu à l’époque.

comments powered by Disqus