Magazine Internet

Géolocalisation IP avec PHP et Wordpress

Publié le 24 mai 2010 par Jbjweb

Il peut arriver que l’on désire proposer un contenu différent aux internautes en fonction de leur pays. Dans cet article, je vais vous détailler comment implémenter cette action d’abord en PHP pur, et ensuite à travers un plugin Wordpress.

On peut envisager différentes situations dans lesquelles on a besoin de servir un contenu différent à l’internaute. Le site Web d’une chaîne internationale de magasins va par exemple afficher au visiteur la liste des magasins implantés dans son pays, voire la liste des produits qui sont disponibles dans ces magasins. Un site de distribution de vidéo en ligne doit par exemple s’assurer qu’il dispose des droits de diffusion pour le pays de l’internaute, ou le rediriger vers un contenu de substitution si ce n’est pas le cas. Il peut s’agir tout simplement de décider de la langue du site en fonction du pays de l’internaute. Dans tous les cas, vous disposez d’un élément qui permet de géolocaliser l’internaute : son IP.

Plusieurs solutions existent en matière de géolocalisation pour PHP. La plus connue est sans doute la base de données de Maxmind. Ce site propose une version gratuite qui permet une précision de 99,5% pour les pays (http://www.maxmind.com/app/geolitecountry). Seul hic, vous devez copier la base de données sur votre serveur, et ensuite la mettre à jour tous les mois. De plus, l’installation est plus ou moins compliquée suivant votre hébergement (dédié ou mutualisé), votre capacité à installer des applications sur votre serveur et vos connaissances en PHP.

Il existe une solution plus simple, qui vous dispense de télécharger la base de données sur votre serveur et de la mettre à jour tous les mois, et qui vous éviter d’installer un module Apache, PEAR ou PECL. C’est cette solution que nous allons aborder. Pour cela, nous allons utiliser le WebService offert par http://www.geoplugin.com/. Ce service utilise une version modifiée des bases de données de MaxMind.

La première étape est d’aller sur http://www.geoplugin.com/webservices/php et de récupérer le fichier geoplugin.class.php, disponible dans l’archive téléchargeable ici.
Mettez geoplugin.class.php dans un dossier sur votre serveur et créez un fichier geoip.php dans le même dossier. Vérifiez que le dossier et les fichiers soient accessibles en exécution et en lecture.

<?php
/*
 * Géolocalise le visiteur de la page
 * à partir de son adresse IP
 */

require_once("geoplugin.class.php");

Pour l’instant, geoip.php se contente juste d’inclure la classe geolocation, et rien d’autre. Maintenant, voyons ce qu’on peut faire avec cette classe.

La première chose à faire est de construire un objet avec
$geoplugin = new geoplugin;
Une fois l’objet créé, nous avons accès à toutes ses méthodes et ses propriétés publiques. Nous récupérons ensuite l’IP de l’internaute :
$ip = $_SERVER['REMOTE_ADDR'];
Nous demandons ensuite à geoplugin de faire sa magie par :
$geoplugin->locate($ip);
Remarque : l’utilisation de la méthode $geoplugin->locate() sans paramètres lance un appel implicite à $_SERVER['REMOTE_ADDR']. Vous pouvez donc également utiliser cette version si vous comptez utiliser directement l’IP de l’internaute.
Toutes les informations dont on a besoin sont alors disponibles dans l’objet $geoplugin (vous pouvez faire un print_r de $geoplugin pour voir son contenu). Nous n’avons pas à savoir comment l’objet se connecte au Webservice, ni à préciser l’url du webservice. Nous n’avons pas à savoir comment se fait la connexion avec la base de données des IP. Tout cela se fait en arrière plan !

Nous récupérons alors le pays de l’internaute avec la commande suivante
echo "Votre pays est ".$geoplugin->countryName. "<br />";
Et voilà ! A vous d’utiliser le contenu de la propriété countryName de $geoplugin (et des autres propriétés disponibles) pour adapter vos pages au pays (ou même à la ville) de l’internaute.

Le code complet :

<?php
/*
 * Géolocalise le visiteur de la page
 * à partir de son adresse IP
 */

require_once("geoplugin.class.php");

$geoplugin = new geoplugin;

$ip = $_SERVER['REMOTE_ADDR'];

$geoplugin->locate($ip);

echo "Votre pays est ".$geoplugin->countryName. "<br />";

Supposons maintenant que l’on veuille utiliser ce code dans un site sous Wordpress. Le plus pratique est d’utiliser un plugin pour cela. Un plugin est un ensemble de d’instructions que l’on va greffer à Wordpress afin de modifier le comportement par défaut ou d’apporter de nouvelles fonctionnalités.
Nous avons déjà vu les bases de la création d’un plugin Wordpress dans un article précédent. Créez un dossier myplugin-geoip dans le dossier wp-content/plugins. Copiez le fichier geoplugin.class.php dans ce dossier. Puis créez un fichier myplugin-geoip.php.
Le plus important dans la construction du plugin est de déterminer à quel hook (action ou filter) on va greffer ce code. Dans ce cas, on va afficher le pays de l’internaute dans la zone meta du sidebar. L’action wp_meta semble donc toute indiquée.

/**
 * affiche le pays du visiteur dans un sidebar
 */
function myplugin_display_visitor_ip() {
	global $geoplugin;
	$text = "<p>Votre pays est ".$geoplugin->countryName. "</p><br />";
	echo $text;
	}

add_action('wp_meta', 'myplugin_display_visitor_ip');

La fonction myplugin_display_visitor_ip récupère la variable globale $geoplugin qui contient l’objet Geoplugin correspondant à l’IP du visiteur, et récupère puis affiche le pays de l’internaute.

Maintenant, activons l’extension, et voyons le résultat :

worpress plugin géolocalisation par IP

A vous maintenant de poursuivre le développement du plugin afin de faire quelque chose de plus intéressant , comme par exemple de restreindre l’accès en fonction du pays, ou de modifier la langue du site, ou encore d’afficher un contenu spécifique (publicité ciblée, etc…).

Téléchargement du plugin (contient la class php) :
myplugin-geoip


Retour à La Une de Logo Paperblog

A propos de l’auteur


Jbjweb 18 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog

Magazine