He creado una aplicación web para el streamer @pokeshiny4 que utiliza distintas tecnologías y buenas prácticas, ¡en tal sólo 8 horas!
Este streamer tenía un problema con referencia a la organización de reparto de Pokémon a sus suscriptores, por lo que llegamos a un acuerdo de realizar una aplicación web sencilla, de modo que permitiera a sus suscriptores hacer los pedidos de Pokémon a través de la web para poder organizarse mejor.
Para esto planteé un sencillo escenario con varios paquetes:
Primeramente, instalamos Laravel y todos sus componentes. Asimismo, de pronto nos encontramos con el primer problema 😂 EL PAQUETE DE LA API DE TWITCH NO ERA COMPATIBLE CON LARAVEL 8. Así que ahí empezamos nuestra odisea, descargando el código fuente del paquete, editando las dependencias obsoletas y corrigiendo alguna que otra línea de código y la posterior complicación de vincular el paquete local con composer.
A continuación, una vez salvado todo esto, nos ponemos con la chicha; Socialite + Twitch, configuramos todo, recogemos el token oauth y solicitamos acceso a la api de Twitch. Nos encontramos de bruces contra otro problema, "no se puede acceder a las suscripciones de un usuario, puedes acceder a los suscritos de un usuario que sea streamer...", por lo cual, buscamos una solución bastante drástica ante este nivel de protección, el streamer debía entrar a la web CADA DÍA, para asegurarnos que todas las suscripciones se actualizan... 🤦♂️
Sistema de Puntos
Lo próximo fue hacer un brainstorming de cómo el usuario final debía solicitar los Pokémon, de manera que le propuse:
- Sub tier 1: 1200 puntos
- Sub tier 2: 2400 puntos
- Sub tier 3: 4000 puntos
- Sub gift: 300 puntos
Cada Pokémon cuesta 100 puntos (calculamos el símil como si fuera 1€), por tanto cada suscriptor, como mínimo, podría pedir 12 Pokémon al mes.
El backend funcionó a la primera, se asignaron los puntos a todos los suscriptores perfectamente (chapó 💃).
¿De donde sacamos la información?😱
Una vez más, nos enfrentamos a otro problema... ¿De dónde sacamos toda la información de los Pokémon? Teniendo en cuenta que solo queríamos el número, nombre e imagen de los Pokémon. En virtud de ello, me puse enseguida a hacer un scrapper de python 🐍 para sacar los nombres, numero e imágenes de los Pokémon (shiny y normales). Esto fue un proceso lento, pues los datos los iba sacando de distintas webs (que no publicaré por razones obvias 🤫) y debía descargar 2 imágenes de alta resolución para cada Pokémon.
Mientras se acababa de descargar, me puse con el formulario de solicitud de Pokémon (inventándome ciertas cosas ya que no teníamos el JSON definitivo con los Pokémon), pero como sabía la estructura del JSON, creé un miniJSON con Bulbasaur exclusivamente:
Sé que no es lo más complejo del mundo, pero para este caso nos bastaba (Al menos de momento).
Resultados
Añadí un enlace a Smogon (que cambia cada vez que seleccionas un Pokémon) y la imagen cambia tanto si le das a shiny como si cambias el Pokémon 😎
Después ,obviamente, le tuve que facilitar un panel de control de todo esto y, como esto va a ser un rollo, añado capturas:
Todas las tablas incluyen paginación y además la de gestión de solicitudes, permite devolver el Pokémon (Borrar la solicitud y devolver los puntos) con tan solo un click.
Seguidamente os dejo con algunos paquetes extra que he acabado utilizando:
La experiencia ha sido muy satisfactoria, y quizás realice más proyectos similares a esto que he llamado personalmente: SFRM (Subscribers and Followers relationship manager)
¡Espero que os haya gustado la lectura!
Edgar Borrás