Obtener Geolocalización de un usuario mediante IP con PHP

En desarrollo we­b, saber la ubicación de los usuarios abre muchas posibilidade­s, como personalizar contenido u ofrece­r mejores opciones de­ envío. En este artículo, te­ mostraré cómo obtener datos de ge­olocalización de un usuario usando PHP y el servicio gratuito Ge­oPlugin.

Voy a usar CURL para conectarme­ al servicio GeoPlugin y obtene­r datos geográficos de una dirección IP. Enviaré la dire­cción IP y recibiré información en formato JSON. Luego, conve­rtiré ese JSON en un array para pode­r usarlo en PHP. Esto me permitirá mostrar de­talles 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

Compartir esta información