Quiero recuperar información como la ciudad, el estado y el país de un visitante de su dirección IP, para poder personalizar mi página web de acuerdo con su ubicación. ¿Hay una manera buena y confiable de hacer esto en PHP? Estoy usando JavaScript para las secuencias de comandos del lado del cliente, PHP para las secuencias de comandos del lado del servidor y MySQL para la base de datos.
php
geolocation
ip
geoip
Ben Dowling
fuente
fuente
Respuestas:
Puede descargar una base de datos GeoIP gratuita y buscar la dirección IP localmente, o puede usar un servicio de terceros y realizar una búsqueda remota. Esta es la opción más simple, ya que no requiere configuración, pero introduce latencia adicional.
Un servicio de terceros que podría utilizar es el mío, http://ipinfo.io . Proporcionan nombre de host, geolocalización, propietario de la red e información adicional, por ejemplo:
Aquí hay un ejemplo de PHP:
También puede usarlo del lado del cliente. Aquí hay un ejemplo simple de jQuery:
fuente
null
buscando el nombre de mi ciudad. No es como una ciudad pequeña o algo así, pero aún así no pudo localizarla. Si no funciona bien dentro de EE. UU., Dudo de la frecuencia con la que también volverá nulo fuera de EE. UU.Pensé que había puesto ya que nadie parece haber dado información acerca de la API en particular, pero su regreso exactamente lo que busco y lo puede conseguir para volver en múltiples formatos,
json, xml and csv
.Esto te dará todas las cosas que podrías desear:
fuente
Un ejemplo puro de Javascript, utilizando los servicios de https://geolocation-db.com Proporcionan una solución JSON y JSONP-callback.
¡No se requiere jQuery!
fuente
https://geoilocation-db.com
API?Usando Google APIS:
fuente
The geolocation functionality in the Loader hasn't been retired, per se. We stopped documenting it several years ago and have recommended the HTML-based solutions due to their improved accuracy, but the functionality itself has not been removed from the Loader at this time.
code.google.com/p/google-ajax-apis/issues/detail?id=586Debe utilizar un servicio externo ... como http://www.hostip.info/ si busca en Google "geo-ip" puede obtener más resultados.
La API Host-IP está basada en HTTP, por lo que puede usarla en PHP o JavaScript, según sus necesidades.
fuente
Escribí un bot usando una API de ipapi.co , así es como puede obtener la ubicación de una dirección IP (por ejemplo
1.2.3.4
) enphp
:Establecer encabezado:
Obtenga respuesta JSON
de obtener un campo específico (país, zona horaria, etc.)
fuente
Esta pregunta está protegida, lo que entiendo. Sin embargo, no veo una respuesta aquí, lo que veo es que muchas personas muestran lo que se les ocurrió al tener la misma pregunta.
Actualmente hay cinco Registros Regionales de Internet con diversos grados de funcionalidad que sirven como el primer punto de contacto con respecto a la propiedad de IP. El proceso está en constante cambio, por lo que los diversos servicios aquí funcionan a veces y no en otros.
Sin embargo, Who Is es (obviamente) un antiguo protocolo TCP: la forma en que funcionó originalmente fue mediante la conexión al puerto 43, lo que hace que sea problemático enrutarlo a través de conexiones arrendadas, firewalls ... etc.
En este momento, la mayoría de Who Is se realiza a través de RESTful HTTP y ARIN, RIPE y APNIC tienen servicios RESTful que funcionan. LACNIC devuelve un 503 y AfriNIC aparentemente no tiene tal API. (Sin embargo, todos tienen servicios en línea).
Eso le proporcionará la dirección del propietario registrado de la IP, pero no la ubicación de su cliente, debe obtenerla de ellos y también debe solicitarla. Además, los proxies son la menor de sus preocupaciones al validar la IP que cree que es el creador.
Las personas no aprecian la noción de que están siendo rastreados, así que, según creo, obténgalo de su cliente directamente y con su permiso, y esperan que se resista a la idea.
fuente
Mire la API de hostip.info: proporciona mucha información.
Ejemplo en PHP:
Si confía en hostip.info, parece ser una API muy útil.
fuente
El servicio en la respuesta de Ben Dowling ha cambiado, por lo que ahora es más simple. Para encontrar la ubicación, simplemente haga:
Las coordenadas regresan en una sola cadena como '31, -80 ', por lo que desde allí simplemente:
fuente
Suponiendo que desea hacerlo usted mismo y no depender de otros proveedores, IP2Nation proporciona una base de datos MySQL de las asignaciones que se actualizan a medida que los registros regionales cambian las cosas.
fuente
Ejecuto el servicio en IPLocate.io , que puede conectar de forma gratuita con una simple llamada:
El
$res
objeto contendrá sus campos de geolocalización comocountry
,city
, etc.Consulte los documentos para obtener más información.
fuente
Me gusta la GeoLite City gratuita de Maxmind, que funciona para la mayoría de las aplicaciones y desde la cual puede actualizar a una versión paga si no es lo suficientemente precisa. Se incluye una API PHP , así como para otros idiomas. Y si está ejecutando Lighttpd como servidor web, incluso puede usar un módulo para obtener la información en la variable SERVER para cada visitante si eso es lo que necesita.
Debo agregar que también hay un Geolite Country gratuito (que sería más rápido si no necesita identificar la ciudad de la que proviene la IP) y Geolite ASN (si desea saber quién posee la IP) y que finalmente todos estos son descargables en su propio servidor, se actualizan todos los meses y son bastante rápidos de buscar con las API proporcionadas, ya que indican "miles de búsquedas por segundo".
fuente
PHP tiene una extensión para eso.
Desde PHP.net:
Por ejemplo:
fuente
Ipdata.co es una API de geolocalización IP rápida y de alta disponibilidad con un rendimiento confiable.
¡Es extremadamente escalable con 10 puntos finales alrededor del mundo, cada uno capaz de manejar> 10,000 solicitudes por segundo!
En php
Aquí hay un ejemplo del lado del cliente que muestra cómo obtendría el país, la región y la ciudad;
Descargo de responsabilidad;
Yo construí el servicio.
Para ver ejemplos en varios idiomas, consulte los documentos
Consulte también este análisis detallado de las mejores API de geolocalización IP.
fuente
En caso de que alguien se tope con este hilo, aquí hay otra solución. En timezoneapi.io puede solicitar una dirección IP y obtener varios objetos a cambio (he creado el servicio). Fue creado porque necesitaba saber en qué zona horaria estaban mis usuarios, en qué parte del mundo y qué hora es actualmente.
En PHP: devuelve ubicación, zona horaria y fecha / hora:
Usando jQuery:
fuente
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 proporcionada como mejor le parezca.
Retazo
Usar
fuente
Si necesita obtener la ubicación de una dirección IP, puede usar un servicio de geo ip confiable, puede obtener más detalles aquí . Es compatible con IPv6.
Como beneficio adicional, permite verificar si la dirección IP es un nodo tor, proxy público o spammer.
Puede usar javascript o php como se muestra a continuación.
Código Javascript:
Código Php:
Salida:
fuente
He creado un contenedor para ipinfo.io . Puedes instalarlo usando Composer.
Puedes usarlo de esta manera:
fuente
También puede usar el servicio "smart-ip":
fuente
He realizado muchas pruebas con los servicios de direcciones IP y aquí hay algunas formas en que lo hago yo mismo. Primero, un montón de enlaces a sitios web útiles que uso:
https://db-ip.com/db Tiene un servicio gratuito de búsqueda de IP y tiene algunos archivos csv gratuitos que puede descargar. Utiliza una clave de API gratuita que se adjunta a su correo electrónico. Limita a 2000 consultas por día.
http://ipinfo.io/ Servicio gratuito de búsqueda de ip sin funciones de PHP de clave API:
Al final obtienes algo como esto:
http://www.geoplugin.com/ Un poco más antiguo, pero este servicio le brinda un montón de información adicional útil, como la moneda del país, el código del continente, la longitud y más.
http://lite.ip2location.com/database-ip-country-region-city-latitude-longitude Ofrece un montón de archivos descargables con instrucciones para importarlos a su base de datos. Una vez que tenga uno de estos archivos en su base de datos, puede seleccionar los datos con bastante facilidad.
Use la función php ip2long (); convertir la dirección IP en un valor numérico. Por ejemplo, 1.1.1.1 se convierte en 16843009. Esto le permite buscar los rangos de IP que le proporciona el archivo de base de datos.
Entonces, para saber dónde pertenece 1.1.1.1, todo lo que hacemos es ejecutar esta consulta:
Esto devuelve estos datos como un ejemplo.
fuente
Existen dos enfoques generales para realizar la geolocalización de IP: uno es descargar un conjunto de datos, alojarlo en su infraestructura y mantenerlo actualizado. Esto requiere tiempo y esfuerzo, especialmente si necesita admitir una gran cantidad de solicitudes. Otra solución es utilizar un servicio API existente que gestione todo el trabajo por usted y más.
Existen muchos servicios de geolocalización API: Maxmind, Ip2location, Ipstack, IpInfo, etc. Recientemente, la empresa para la que trabajo se ha cambiado a Ipregistry ( https://ipregistry.co ) y participé en el proceso de decisión e implementación. Estos son algunos elementos que debe considerar al buscar una API de geolocalización IP:
Aquí hay un ejemplo para obtener información de geolocalización de IP (pero también datos de amenazas y de agente de usuario mediante una llamada):
Nota: No estoy aquí para promover Ipregistry y decir que es lo mejor, pero pasé mucho tiempo analizando las soluciones existentes y su solución es realmente prometedora.
fuente
Si está buscando una base de datos actualizada / precisa, le recomiendo usar esta aquí porque mostraba mi ubicación exacta que no estaba incluida en muchos otros servicios cuando estaba probando.
(Mi ciudad era
Rasht
y mi país teníaIran
esta dirección IP:2.187.21.235
cuando estaba probando).Recomiendo usar la base de datos en lugar de los métodos API, porque se procesará mucho más rápido localmente.
fuente
Ok chicos, gracias por sus sugerencias; Si bien tengo 6k + de IP, algunos servicios fallaron mis solicitudes debido a algunas limitaciones; Por lo tanto, puede usarlos todos en modo de reserva;
Si tenemos un archivo fuente con el siguiente formato:
de lo que podría usar este simple comando de expansión (PoC) para Yii:
Este es algún tipo de código de mierda, pero funciona. uso:
Siéntase libre de usarlo, modificarlo y hacerlo mejor)
fuente