Géolocalisation des visiteurs

La géolocalisation par IP

Le site web db-ip propose un service de géolocalisation par IP qu'il est possible d'utiliser à travers une API. Il est également possible de télécharger et utiliser une version simplifiée de la base de données qui est proposée en "Creative Commons Attribution 4.0 International License" en apposant tout simplement le lien suivant sur votre site. 

IP Geolocation by DB-IP

Le fichier est à télécharger ici : https://db-ip.com/db/download/ip-to-city-lite

Vous trouverez sur le web d'autre services de géolocalisation par IP :

La plupart de ces services sont payant, parfois avec un accès gratuit limité à un nombre de hits, journalier ou mensuel. D'autres bases de données de géolocalisation par IP peuvent être trouvées sur le web, mais bien souvent avec des contrats de licence excluant une utilisation commerciale.

A partir de là, soit vous utilisez une API, elles sont très rapides et bien conçues, soit vous vous lancez dans l'aventure, ce que j'ai fait... pour arriver au résultat suivant :

La table est plutôt simple, quelques champs suffisent :

ip_type permet de différencier les adresse IP4 des adresses IP6.

A vous de programmer un petit script pour télécharger la base de données et pour assurer les mises à jour.

Par contre, le nombre d'enregistrement étant élevé, j'ai décidé de la placer en mémoire afin d'accélérer les requêtes :

 

Ce qui vous obligera probablement de modifier certains paramètres dans le fichier de configuration de Mysql :

Sur ma machine situé dans le répertoire /etc/mysql/conf.d

[mysqld]
max_heap_table_size=128M
tmp_table_size=128M

L'inconvénient de cette méthode, c'est que si vous relancez votre serveur la base de données se retrouve vidée de son contenu.

J'ai contourné le problème dans mon script chargé de récupérer l'origine géographique des visiteurs en testant la table et en la mettant automatiquement à jour si on détecte qu'elle est vide. Cela va ralentir un petit peu le redémarrage mais cela arrive rarement, donc ce n'est pas vraiment un problème d'autant plus que les gains obtenus sont importants.

Enfin, pour la visualisation statistique sur une carte du monde, j'ai utilisé :

https://plotly.com/javascript/choropleth-maps/

Dernier petit problème, les codes pays à 2 lettres ne sont pas utilisés par ploty, il m'a fallut faire une table de correspondance afin de pouvoir obtenir mon graphique.

Elle est ici, c'est mon petit cadeau !

Table sql des pays avec les codes à 2 lettres et noms en anglais.