Para poner en práctica mis recientes conocimientos de Ionic Framework decidí hacer una sencilla aplicación, en la que se pueda comprobar la disponibilidad de un dominio, su precio, guardarlo en favoritos para poderlo comprar más tarde o consultar el precio de los principales proveedores de hosting.
Ionic Framework es un framework idéntico a Angular pero que añade componentes que permiten dar la apariencia de una aplicación nativa y acceder Apis de Android y Apple, aunque en el fondo no deja de ser un navegador corriendo puro código de Javascript.
Decidí utilizar Ionic Framework al ser multiplataforma (aunque no está previsto publicar la App en la Apple Store, debido al pago anual y a que se necesita un Mac para compilarla), porque para que alguien que conoce Angular es fácil de utilizar y por último, porque la aplicación es muy liviana (únicamente ocupa 6 MB la descarga).
Definición del proyecto
La definición del proyecto no deja de ser una arquitectura similar a cuando se realiza una aplicación con Angular, necesitamos un backend desde el que enviaremos a la aplicación Ionic los datos que debe mostrar.
- El Backend (PHP): Es el que se encarga de almacenar los precios, el historial de búsqueda del usuario, las ofertas de hostings y por supuesto los precios de cada dominio.
- El Frontend (Ionic): Al ser una aplicación que constantemente requiere conexión a internet Ionic es perfecto para tal uso, no obstante, también es necesario que la aplicación móvil guarde algunos datos en el dispositivo móvil para poder identificarlo en un futuro de cara a obtener el historial de búsquedas. Para esto utilizamos el SQLite.
Procesos del proyecto
Comprobar la disponibilidad del dominio
Algo tan sencillo como saber si un dominio está disponible o no, es realmente difícil. Realice diversas pruebas para tratar de obtener resultados fiables y al final llegue a la siguiente conclusión:
Utilizar ping o dig (DNS Lookup) solo me servía para descartar los dominios que ya estaban registrados y estaban vinculados a un hosting, pero finalmente tendría hacer otra comprobación para asegurarme de que el dominio no está registrado.
Básicamente, el resultado sería dig al dominio. ¿No existe? Pues pasamos a la segunda verificación.
Scrapear Whois
Para realizar esta última comprobación probé de comprobar el Whois del dominio para saber si estaba registrado, aquí me encontré dos problemas:
En primer lugar el Whois no tiene un formato estándar y el segundo y más importante no está actualizado en muchos casos. Por lo tanto, el Whois no era una opción.
API Proveedor de dominios
Después de intentar que la ICANN me facilitase alguna forma de validar el dominio sin éxito, llegue a la conclusión de que únicamente podría tener datos fiables si conseguía acceso a alguna API de un registrador de dominio.
Encontré varias de pago a partir de 10000 consultas al mes bastante fiables pero finalmente me quede con la del propio GoDaddy por el principal motivo de ser gratis, eso sí con el límite de que como máximo se pueden hacer 60 querys a la API por minuto o lo que es lo mismo 1 por segundo.
60 consultas por minuto pueden parecer muchas, sin embargo, si tienes varios usuarios utilizando la aplicación simultáneamente no es tan raro llegar a este límite. Así que estuve buscando diversas formas de saltarme el límite de consultas.
En primer lugar probé creando un array con varios Tokens generados con diferentes correos, no obstante, el límite seguía presente, era obvio que el control se realizaba mediante la IP del servidor. Así que finalmente probé con las proxies de Hprox geo localizadas en Europa y entonces pude saltarme el límite, configurando que cada petición se realice con una IP diferente. GoDaddy no me suspendáis la cuenta, por favor…
Historial de búsqueda
Para realizar el historial de búsquedas quería no alterar mi visión de la aplicación «Una aplicación que simplemente sea instalar y utilizar» si pedía registrarse al usuario ya alteraba esa visión.
Finalmente decidí registrar el historial de búsquedas en el Backend, para evitar que el usuario tuviera que registrarse la aplicación utiliza el ID del dispositivo y vincula a este su historial de búsquedas. Así si el usuario desinstalase la aplicación y la volviese a instalar seguiría teniendo su historial.
Cierto es que si el usuario cambia de dispositivo perdería su historial, por lo que en un futuro se le podría solicitar un registro en caso de que quiera guardar su historial, pero de momento es algo que no contemplo. Tampoco cambiamos tanto de móvil. ¿No?
Rastreo de precios
Para el rastreo de precios pensé en hacer un bot que scrapease las páginas de los anunciantes, obtuviese el precio y lo actualizase pero finalmente pensé que los precios no se actualizan tan frecuentemente como para realizar ese esfuerzo.
Finalmente se introducen a mano y listo.