Speak English? Click here to read my English blog!

Géolocalisation IP avec PHP et WordPress

Posté par jbl le 24 mai 2010 dans PHP, Wordpress7 commentaires
Protected by Copyscape Duplicate Content Check
 

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

Tags: , ,

Autres articles dans la catégorie PHP



Autres articles dans la catégorie Wordpress



7 commentaires

» Flux RSS des commentaires
  1. Depuis le temps que je cherchais une solution efficace et gratuite, merci !!
    Un grand intérêt de géolocaliser ses visiteurs s’est d’optimiser ses affichages de publicités suivant le pays de l’internaute, on peux personnaliser les pub au pays et ainsi optimiser ses revenu et l’intérêt des pub

  2. +1 je devais cibler une campagne publicitaire France uniquement, la régie ne payait pas les clics sur les autres pays et ne proposait pas une publicité alternative.

    Ca m’a aidé aussi quand j’ai voulu bloquer le spam en provenance de 2 pays bien précis.

  3. Petit retour d’experience sur cette technique que j’ai mis en place et dont je suis très satisfait ! Très simple a mettre en place et gratuit, ca marche très bien, bravo ;)

  4. Il est compatible WP 2.9.2.

  5. Intéressant, je n’ai pas mis ce que tu décris en place mais j’utilise un blog sous WordPress et c’est toujours utile de comprendre comment faire.

    Je me demande comment les sites de géolocalisations peuvent gagner de l’argent si on peut récupérer facilement la base et faire un site de géolocalisation sans trop d’effort?

  6. Merci je trouve cela intéressant également. Ce serait bien de proposer également un système de géolocalisation régional ou départemental aussi.

  7. Je ne connaissais pas ce service de géolocalisation.

    Moi j’utilise le service geolocalise-ip.com (http://www.finalclap.com/news/39-service-geolocalisation-ip-gratuit.html).

    Il fournit aussi une petite API bien pratique, mais il est limité à 50 requêtes par jour (ce qui me suffit largement).

Commenter