En desarrollo web, saber la ubicación de los usuarios abre muchas posibilidades, como personalizar contenido u ofrecer mejores opciones de envío. En este artículo, te mostraré cómo obtener datos de geolocalización de un usuario usando PHP y el servicio gratuito GeoPlugin.
Voy a usar CURL para conectarme al servicio GeoPlugin y obtener datos geográficos de una dirección IP. Enviaré la dirección IP y recibiré información en formato JSON. Luego, convertiré ese JSON en un array para poder usarlo en PHP. Esto me permitirá mostrar detalles como la ciudad, país y otros datos geográficos del visitante, basados en su dirección IP.
function get_user_geodata($ip){
$ch = curl_init();
$curlConfig = array(
CURLOPT_URL => "http://www.geoplugin.net/json.gp?ip=".$ip,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS
=> false
);
curl_setopt_array($ch, $curlConfig);
$result = curl_exec($ch);
curl_close($ch);
$json_a = json_decode($result,true);
return $json_a;
}
Para que funcione debes agregar la función y pasarle una dirección IP como parámetro. Ejemplo: get_user_geodata(‘200.150.86.138’);
La URL http://www.geoplugin.net/json.gp?ip=200.150.86.138 trae como resultado este JSON (La dirección IP es falsa creada por un generador)
{
"geoplugin_request":"200.150.86.138",
"geoplugin_status":200,
"geoplugin_delay":"1ms",
"geoplugin_credit":"Some of the returned data includes GeoLite2 data created by MaxMind, available from <a href='https:\/\/www.maxmind.com'>https:\/\/www.maxmind.com<\/a>.",
"geoplugin_city":"Curitiba",
"geoplugin_region":"Parana",
"geoplugin_regionCode":"PR",
"geoplugin_regionName":"Parana",
"geoplugin_areaCode":"",
"geoplugin_dmaCode":"",
"geoplugin_countryCode":"BR",
"geoplugin_countryName":"Brazil",
"geoplugin_inEU":0,
"geoplugin_euVATrate":false,
"geoplugin_continentCode":"SA",
"geoplugin_continentName":"South America",
"geoplugin_latitude":"-25.5026",
"geoplugin_longitude":"-49.2908",
"geoplugin_locationAccuracyRadius":"200",
"geoplugin_timezone":"America\/Sao_Paulo",
"geoplugin_currencyCode":"BRL",
"geoplugin_currencySymbol":"R$",
"geoplugin_currencySymbol_UTF8":"R$",
"geoplugin_currencyConverter":4.9954
}
Ya que la función tiene json_decode() vamos a obtener algo similar a esto:
Array
(
[geoplugin_request] => 200.150.86.138
[geoplugin_status] => 200
[geoplugin_delay] => 1ms
[geoplugin_credit] => Some of the returned data includes GeoLite2 data created by MaxMind, available from <a href='https://www.maxmind.com'>https://www.maxmind.com</a>.
[geoplugin_city] => Curitiba
[geoplugin_region] => Parana
[geoplugin_regionCode] => PR
[geoplugin_regionName] => Parana
[geoplugin_areaCode] =>
[geoplugin_dmaCode] =>
[geoplugin_countryCode] => BR
[geoplugin_countryName] => Brazil
[geoplugin_inEU] => 0
[geoplugin_euVATrate] =>
[geoplugin_continentCode] => SA
[geoplugin_continentName] => South America
[geoplugin_latitude] => -25.5026
[geoplugin_longitude] => -49.2908
[geoplugin_locationAccuracyRadius] => 200
[geoplugin_timezone] => America/Sao_Paulo
[geoplugin_currencyCode] => BRL
[geoplugin_currencySymbol] => R$
[geoplugin_currencySymbol_UTF8] => R$
[geoplugin_currencyConverter] => 4.9954
)
También puedes usar esta URL: https://ipwhois.app/json/ funciona de manera similar