geolocation - medellin - ip location map
¿Cómo determinar un código postal y una ciudad desde una dirección IP? (7)
En Ruby ... Estos son los pasos
- Instalar el geocodificador de
gem install geocoder
gema degem install geocoder
En un guión ruby, ten estas líneas.
require "geocoder"
puts Geocoder.address(''76.95.251.102'');
// Cambie la dirección IP en consecuencia.- Ejecute el script para obtener la ciudad, estado, código postal, país
output: Bellflower, CA 90706, United States
Estoy buscando consejos para API abierta o productos de fiesta en 3D que ayudarán a convertir una dirección IP a un código postal y a una ciudad, para crear contenido de sitios web geoespecíficos.
Espero que todos los usuarios, que desean obtener la ubicación desde la dirección IP, obtengan una solución adecuada con el uso de este pequeño código.
$ip_addr = $_SERVER[''REMOTE_ADDR''];
$geoplugin = unserialize( file_get_contents(''http://www.geoplugin.net/php.gp?ip=''.$ip_addr) );
if ( is_numeric($geoplugin[''geoplugin_latitude'']) && is_numeric($geoplugin[''geoplugin_longitude'']) ) {
$lat = $geoplugin[''geoplugin_latitude''];
$long = $geoplugin[''geoplugin_longitude''];
}
IP2Location
La mejor forma (que es fácil de integrar y gratuita) que he encontrado está disponible here . El servicio es completamente gratuito, no requiere instalaciones locales y no lo obliga a colocar banners en su sitio (en lugar de IP2Location). La única restricción que tienen, el límite de consulta, es muy razonable: puede lanzar una consulta cada 2 segundos, e incluso si realiza consultas más frecuentes, obtendrá los resultados un poco más lento. ¡Disfrutar!
La siguiente es una versión modificada de un fragmento que encontré que usa http://ipinfodb.com/ip_locator.php para obtener su información. Tenga en cuenta que también puede solicitar una clave de API con ellos y usar la API directamente para obtener la información que se le proporcione. Como puede ver en here , tienen ejemplos en todo, desde PHP hasta JavaScript, hasta ASP.Net. Como se observa, a continuación no se requiere una clave, ya que saca su página pública y Regex a través de la página para obtener información específica. Las llaves son gratis.
Retazo
function detect_location($ip=NULL, $asArray=FALSE) {
if (empty($ip)) {
if (!empty($_SERVER[''HTTP_CLIENT_IP''])) { $ip = $_SERVER[''HTTP_CLIENT_IP'']; }
elseif (!empty($_SERVER[''HTTP_X_FORWARDED_FOR''])) { $ip = $_SERVER[''HTTP_X_FORWARDED_FOR'']; }
else { $ip = $_SERVER[''REMOTE_ADDR'']; }
}
elseif (!is_string($ip) || strlen($ip) < 1 || $ip == ''127.0.0.1'' || $ip == ''localhost'') {
$ip = ''8.8.8.8'';
}
$url = ''http://ipinfodb.com/ip_locator.php?ip='' . urlencode($ip);
$i = 0; $content; $curl_info;
while (empty($content) && $i < 5) {
$ch = curl_init();
$curl_opt = array(
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_TIMEOUT => 1,
CURLOPT_REFERER => ''http://'' . $_SERVER[''HTTP_HOST''],
);
if (isset($_SERVER[''HTTP_USER_AGENT''])) $curl_opt[CURLOPT_USERAGENT] = $_SERVER[''HTTP_USER_AGENT''];
curl_setopt_array($ch, $curl_opt);
$content = curl_exec($ch);
if (!is_null($curl_info)) $curl_info = curl_getinfo($ch);
curl_close($ch);
}
$araResp = array();
if (preg_match(''{<li>City : ([^<]*)</li>}i'', $content, $regs)) $araResp[''city''] = trim($regs[1]);
if (preg_match(''{<li>State/Province : ([^<]*)</li>}i'', $content, $regs)) $araResp[''state''] = trim($regs[1]);
if (preg_match(''{<li>Country : ([^<]*)}i'', $content, $regs)) $araResp[''country''] = trim($regs[1]);
if (preg_match(''{<li>Zip or postal code : ([^<]*)</li>}i'', $content, $regs)) $araResp[''zip''] = trim($regs[1]);
if (preg_match(''{<li>Latitude : ([^<]*)</li>}i'', $content, $regs)) $araResp[''latitude''] = trim($regs[1]);
if (preg_match(''{<li>Longitude : ([^<]*)</li>}i'', $content, $regs)) $araResp[''longitude''] = trim($regs[1]);
if (preg_match(''{<li>Timezone : ([^<]*)</li>}i'', $content, $regs)) $araResp[''timezone''] = trim($regs[1]);
if (preg_match(''{<li>Hostname : ([^<]*)</li>}i'', $content, $regs)) $araResp[''hostname''] = trim($regs[1]);
$strResp = ($araResp[''city''] != '''' && $araResp[''state''] != '''') ? ($araResp[''city''] . '', '' . $araResp[''state'']) : ''UNKNOWN'';
return $asArray ? $araResp : $strResp;
}
Usar
detect_location();
// returns "CITY, STATE" based on user IP
detect_location(''xxx.xxx.xxx.xxx'');
// returns "CITY, STATE" based on IP you provide
detect_location(NULL, TRUE); // based on user IP
// returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" }
detect_location(''xxx.xxx.xxx.xxx'', TRUE); // based on IP you provide
// returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" }
Lo que uso es ip2nation: http://www.ip2nation.com
Es una base de datos MySQL completamente libre de IP para mapeos de países. Incluyen algunos ejemplos de scripts PHP en su sitio.
Lo uso en mi blog de WordPress junto con el plugin gratuito de Ozh a Word de Nation WordPress
Incluso si no está usando WordPress, descargue el plugin ya que le dará un buen conjunto de código PHP para acceder a la base de datos. Incluso tiene un bonito conjunto de pequeñas banderas de países que puedes mostrar junto a, o en lugar del nombre del país, que es lo que hago para mostrar automáticamente las banderas al lado de los nombres de los comentaristas de mi blog.
Realmente, no necesitas una API para esto. Todo lo que necesita es la base de datos y la capacidad de escribir el código PHP y SQL para acceder a él.
No recomendaría ip2location para uso casual. Cobran mucho por sus bases de datos, y sus bases de datos son muy grandes y tienen más detalles de los que la mayoría de la gente necesita.
Pero ip2nation solo va al nivel de país. Si necesita Ciudades y Códigos Postales (a pesar de que pueden estar equivocados como otras respuestas / comentarios han indicado), entonces además de ip2location, puede probar GeoBytes . Tienen componentes específicamente adecuados para contenido de sitios web geoespecíficos, como GeoSelect: http://www.geobytes.com/GeoSelect.htm
También busque "ip to zipcode" en Google .
Geocoder.ca proporciona mucha información para direcciones IP (solo Norteamérica), por ejemplo, http://geocoder.ca/99.229.2.190?geoit=xml (también admite geoit = json y jsonp)
<result>
<geodata>
<latt>43.623262</latt>
<longt>-79.749543</longt>
<city>MISSISSAUGA</city>
<prov>ON</prov>
<postal>L5N7Z9</postal>
<stnumber>1837</stnumber>
<staddress>Samuelson CIR</staddress>
<TimeZone>America/Toronto</TimeZone>
<AreaCode>289</AreaCode>
<confidence>1</confidence>
<intersection>
<street1>Samuelson Cir</street1>
<street2>Stockbridge Crt</street2>
<lattx>43.622696</lattx>
<longtx>-79.748706</longtx>
<city>MISSISSAUGA</city>
<prov>ON</prov>
<distance>0.179</distance>
</intersection>
</geodata>
</result>