octobre 06 2009
Géolocaliser un utilisateur Facebook depuis PHP via mod_geoip de MaxMind
Tagged Under : Facebook, géolocalisation, maxmind, PHP
Cette fois-ci, rien à voir avec des templates Joomla / Virtuemart …;-)
Je souhaitais détecter dans une application Facebook, la localisation géographique de l’internaute. Pour cela je me suis tourné vers l’API de géolocalisation de MaxMind.
Facebook fonctionne comme un proxy. Quand un internaute se connecte sur Facebook pour utiliser une application tierce (quizz….), Facebook se connecte à son tour via HTTP à l’application tierce (qui peut être hébergé n’importe où). De ce fait, lorsque l’on essaye de géolocaliser un internaute en se basant sur l’adresse supposée de l’internaute, autrement dit l’adresse IP stockée dans la variable serveur REMOTE_ADDR, on géolocalise en réalité les serveurs de Facebook.
Heureusement, Facebook met à disposition l’adresse de l’internaute dans la variable serveur « HTTP_X_FB_USER_REMOTE_ADDR ».
Afin que la géolocalisation ne soit pas trop gourmande, j’ai préféré utiliser le module apache de Max Mind, et non la version PHP. Pour que la variable HTTP_X_FB_USER_REMOTE_ADDR soit prise en compte, il faut modifier le code de la façon suivante :
ap_add_common_vars(r);
/* Récupération de l'adresse IP de l'utilisateur Facebook */
if (apr_table_get(
r->subprocess_env,
"HTTP_X_FB_USER_REMOTE_ADDR")) {
ipaddr_ptr =
(char *) apr_table_get(
r->subprocess_env,
"HTTP_X_FB_USER_REMOTE_ADDR"
);
}
/* Suite des tests */
else if (apr_table_get(
r->subprocess_env,
"HTTP_CLIENT_IP")) {
ipaddr_ptr = (char *) apr_table_get(
r>subprocess_env,
"HTTP_CLIENT_IP"
);
}
/* (...) */
Pour que la partie de code ajoutée soit prise en compte, et donc que la gélocalisation Facebook fonctionne, il faut rajouter la ligne suivante dans votre configuration Apache.
Maintenant, la localisation géographique est accessible dans PHP, via ce type d’appel à apache_note :

