Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. JavaScript

Usando ipdata para la geolocalización

Read Time: 10 mins
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

Spanish (Español) translation by Steven (you can also view the original English article)

Cuando la mayoría de la gente piensa en la geolocalización, recuerdan las conocidas notificaciones emergentes diciendo que el "sitio web quiere saber tu ubicación". Pero, ¿sabías que puedes obtener información de geolocalización sobre tus visitantes solo con la dirección IP, sin necesidad de permisos adicionales?

Para los desarrolladores web, la geolocalización es un tesoro de información y capacidades que pueden mejorar la experiencia del visitante y proporcionar información significativa al desarrollador. Mientras que la API de geolocalización HTML5 sin duda puede proporcionar a los desarrolladores las coordenadas GPS reales del dispositivo del visitante, los desarrolladores más comúnmente necesitan un conjunto más amplio de datos de ubicación. Pueden obtener esa información utilizando la dirección IP del visitante.

Por sí misma, una dirección IP es simplemente eso: una dirección de un dispositivo en Internet. Sin embargo, la World Wide Web tiene más de 20 años, y durante ese gran período de tiempo, se han recopilado, correlacionado y combinado toneladas de datos en relación con millones de direcciones IP. Si bien hay muchos servicios de terceros que ofrecen datos de geolocalización IP, ninguno es tan preciso o confiable como ipdata. Antes de ver cómo usar el servicio ipdata, veamos primero por qué es posible que desees usar datos de geolocalización.

Usos de la geolocalización

Hay muchas razones legítimas por las que deseas recopilar datos geolocalizacionales sobre tus visitantes y utilizarlos en tus aplicaciones.

Por un parte, puedes servir contenido regional basado en la dirección IP de tu visitante. ¿Tu sitio web ofrece productos en todo el mundo pero servicios locales? Con los datos geolocalizacionales de IP, puedes servir tu contenido normal basado en productos y dirigirte a visitantes locales con contenido especial sobre tus servicios.

El uso de datos geolocalizacionales también puede ayudarte a identificar a los visitantes que entran en el Reglamento General de Protección de Datos de la UE para que puedas adherirte correctamente al RGPD para esos visitantes.

¿Por qué ipdata?

Con ipdata, puedes acceder a una API de inteligencia de direcciones IP precisa, lo que te permite buscar la ubicación aproximada de cualquier dirección IP. Pero además de eso, ipdata también proporciona datos agregados de inteligencia de amenazas de código abierto e IP a las búsquedas de la empresa, así como datos de internacionalización como monedas, zonas horarias e idiomas. Muchas organizaciones y empresas (NASA, Comcast y Disney, solo por nombrar algunas) confían en ipdata con los datos geolocalizacionales que proporcionan.

Mientras que puedes utilizar cualquier cliente HTTP para conectarte y utilizar tu API RESTful, ipdata proporciona bibliotecas de código abierto para C, Java, PHP, JavaScript y Python para hacer que trabajar con la API y los datos de respuesta sea muy sencillo. Las librerías de terceros están disponibles para Ruby, Swift y Go.

Nota: este artículo utiliza la librería JavaScript de ipdata en una aplicación de Node, pero las mismas ideas y conceptos se pueden aplicar a otros lenguajes. Consulta la documentación oficial de la librería ipdata.

Usando la API de ipdata

Lo primero que necesitamos es una aplicación Node; asegúrate de instalar la última versión de Node LTS desde el sitio web de Node.js. Crea un nuevo directorio denominado tutsplus-ipdata para el proyecto de la aplicación. A continuación, abre la terminal del sistema operativo, ve al directorio recién creado y escribe lo siguiente para inicializar el proyecto:

Ahora tenemos que elegir nuestro framework de aplicación. Sí, técnicamente no necesitamos uno, pero frameworks como Express y Hapi aumentan en gran medida nuestra productividad al crear aplicaciones web basadas en Node. Usaremos Hapi, por lo que necesitamos instalarlo, así como el paquete ipdata, con el siguiente comando:

En una aplicación real, naturalmente desearías instalar paquetes para controlar archivos estáticos, vistas, errores, etc. Hapi e ipdata son los únicos paquetes que necesitaremos para este tutorial porque nuestro servidor será extremadamente simple: sólo responderá con texto.

Escribir el servidor

Si eres nuevo en Hapi, el proceso para crear e inicializar el servidor es sencillo. En primer lugar, crea un nuevo archivo denominado index.js y crea el servidor con el siguiente código:

La primera línea de este código importa el objeto Hapi, que usamos para crear nuestro servidor llamando a su método server(). El método server() acepta un objeto que nos permite configurar nuestro servidor. En el código anterior, configuramos nuestro servidor para que se ejecute en el host local y escuchemos en el puerto 3000.

A continuación, configuramos nuestra ruta única utilizando el método route() del servidor:

Esta ruta controla las solicitudes GET para la página principal, o raíz, de nuestra aplicación. La función de controlador se ejecuta, devolviendo una cadena simple, cuando el servidor recibe una solicitud que coincide con esta ruta.

Por último, iniciamos el servidor con el siguiente código:

Dado que el método start() del servidor es asincrónico, podemos elegir cómo queremos usarlo. Este código utiliza la palabra clave await, lo que significa que tenemos que ejecutar este código dentro de una función marcada como async. Por lo tanto, ajustaremos la creación, configuración y ejecución del servidor dentro de una función asincrónica, como esta:

Este código crea un servidor simple que no hace nada excepto mostrar "Hello, Tuts+" cuando entras a https://localhost:3000 en tu navegador. Pruébalo tú mismo ejecutando node index.js en tu terminal.

Podemos agregar algunas funciones útiles a este sencillo servidor de prueba escribiendo y registrando un complemento que solo permite solicitudes de ciertos países: una lista blanca.

Usando ipdata para una lista blanca

Los datos de geolocalización devueltos por la API de ipdata contienen una gran cantidad de información que podemos usar para crear una lista blanca (o lista negra, si deseas adoptar el enfoque opuesto). Por nombrar solo algunos: puedes obtener la ciudad, la región/estado, el país, el continente, el ISP y el proveedor de alojamiento que están asociados con una dirección IP. Para nuestros propósitos, incluiremos las solicitudes de determinados países.

Crea un nuevo archivo llamado whitelist.js y escribe estas dos primeras líneas:

La primera línea de este código importa la función constructora IPData, que se utiliza para crear el cliente de API ipdata. La segunda línea crea el cliente, pasando la clave de API asociada a su cuenta. Si no tienes una cuenta, puedes registrarte para obtener una cuenta gratuita de ipdata. Recibirás tu clave API por correo electrónico. Puedes usar la cadena "test" para fines de prueba, pero ten en cuenta que tiene una tasa limitada.

Ahora define el complemento con el siguiente código:

Este código demuestra la placa reutilizable para un complemento básico de Hapi. Esto exporta el objeto y define la propiedad 'name' del complemento y el método register().

A diferencia de Express, Hapi no usa, o incluso tiene el concepto de middleware. En su lugar, se enlaza a eventos del ciclo de vida para procesar las solicitudes entrantes y lo hace mediante el método ext() del servidor, como se muestra en el siguiente código:

Este código va dentro del método register() del complemento y configura un controlador de eventos para el evento de ciclo de vida onRequest. La función asincrónica proporcionada a ext() controlará el evento y le permitirá procesar la solicitud.

Comenzaremos el procesamiento definiendo nuestra lista blanca de países. Esto estará dentro de una matriz con los valores de cadena que contienen los códigos de nuestros países en la lista blanca. Luego, obtendremos la dirección IP del solicitante y la usaremos para consultar la API de ipdata, como se muestra aquí:

Ten en cuenta que si esta aplicación se ejecuta en tu equipo, la dirección IP solicitante es la dirección IP de bucle invertido para el equipo y no hay datos geolocalizacionales asociados a esa dirección IP. En su lugar, el código anterior utiliza la dirección IP para el sitio web de Envato Tuts+.

El cliente ipdata es fácil de usar: su método lookup() acepta una serie de argumentos, siendo el más notable la IP deseada, y consulta la API de ipdata con la información proporcionada.

La respuesta de lookup() es un objeto que contiene una amplia gama de propiedades, dependiendo del resultado de la consulta. Por ejemplo, el objeto de respuesta siempre contiene una propiedad denominada status que indica si la dirección IP proporcionada existe dentro de la base de datos de ipdata. Es un código de estado HTTP, por lo que es una buena idea comprobar su valor antes de hacer cualquier otra cosa.

La propiedad que nos preocupa es country_code, y podemos usarla para comprobar en nuestra lista blanca. El siguiente código utiliza las propiedades status y country_code:

Si el estado de la consulta es 200 y el código del país existe en la lista blanca, le decimos a nuestro servidor que continúe procesando la solicitud con el siguiente complemento o el controlador de la ruta, lo que esencialmente permite al solicitante acceder al recurso que solicitó. De lo contrario, aceptamos la respuesta con un estado 403.

Como se mencionó anteriormente, el objeto de resultado de la consulta contiene una amplia variedad de propiedades, pero solo necesitamos una: country_code. Como tal, podemos aumentar la eficiencia de la red diciendo al método lookup() que solo queremos un cierto conjunto de propiedades, como este:

Este código ahora pasa una matriz que contiene solo las propiedades que necesitamos (la propiedad status siempre está incluida, por lo que no es necesario especificarla en la matriz). Con este cambio, el complemento terminado tiene el siguiente aspecto:

Registrando el complemento

Ahora tenemos que registrar nuestro complemento de lista blanca. Antes de definir nuestras rutas en index.js, agrega la siguiente línea:

El código completo del servidor es el siguiente:

Si aún no lo has hecho, debes detener el servidor que se está ejecutando en la terminal. Pulsa Control-C y vuelve a ejecutar node index.js. Si has utilizado la IP del sitio web Envato Tuts+, deberías ver el texto "Hola, Tuts+" en el navegador. Si usaste una dirección IP de un país que no aparece en la lista blanca, o utilizaste la dirección IP de tu equipo local, verás el texto "No estás permitido".

Conclusión

Para los desarrolladores web, ipdata proporciona un servicio invaluable. No solo te permite una idea de quiénes son tus visitantes, sino que también te permite incorporar contenido específico de la región para crear una experiencia significativa para cada uno de ellos. ¡Es gratis para empezar y fácil de usar, así que dale ipdata una oportunidad hoy!

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.