Últimamente tengo algo abandonado el blog, desde antes de Navidad concretamente. Necesitaba desconectar un poco de mi faceta developer ya que mi trabajo a veces ocupa mucho espacio en este ámbito, pero prometo que intentaré retomar las lecciones de Javascript y me gustaría también empezar a comentar casos prácticos usando las librerías, metodologías y frameworks de moda.

El caso es que en estos dos meses he retomado otra de mis pasiones: los videojuegos. No sólo de actualidad, cómo The Witcher 3: Wild Hunt, sino que me he puesto a trastear con una Raspberry Pi para rejugar algunos clásicos de 16 bits gracias a proyectos como Retropie, Recalbox y Lakka.

El fin de estos proyectos es el mismo: un sistema Linux previamente configurado y cargado de emuladores para que solamente tengas que preocuparte de añadir los juegos, conectar a la tele y jugar. RetroPie y Recalbox usan como front-end EmulationStation, una interfaz que cataloga los juegos y permite lanzar los emuladores sin tener que recurrir a teclado o ratón.

A la hora de catalogar nuestras ROMs se conecta a Internet para la descarga de metadatos, imágenes de portada, etc. En mi curiosidad por saber como lo hacía vi que recurría a una API externa.

¿Qué es TheGamesDB.net?

Esta web mantenida por una comunidad de usuarios se encarga de almacenar en una base de datos información de todos los videojuegos posibles para una gran lista de plataformas. Dispone además de una API (tenéis la documentación aquí) con la que poder consultarla desde otras aplicaciones.

Sin embargo me llevé una decepción al ver que los resultados se exportan en XML, que aunque no un problema es algo que ya no acostumbro a ver en favor de formatos mas ligeros y directos como JSON con los que se puede trabajar directamente en Javascript.

Buscando por Github y npmjs veo que existen dos paquetes que hacen de wrapper y permiten consultar la API desde Javascript, pero tampoco me convencen por como parsean los resultados, ya que delegan todo este trabajo a otra librería y los objetos resultantes son algo complejos.

Yo me lo guiso, yo me lo como

Como diría Juan Palomo. Para no dejar enfriar mucho mi Javascript me he puesto en un par de ratos libres a escribir una pequeña librería que se adecuara a lo que quería y que fuera simple de usar.

La he subido a npm y el código está en este repositorio de Github. Tenéis las instrucciones de cómo instalarla y usarla en ambos sitios pero básicamente bastaría con algo así:

npm install thegamesdb  
const api = require('thegamesdb');  
api.getGamesList({ name: 'super mario' })  
  .then(games => console.log(games))
  .catch(err => console.error(error));

Podéis realizar búsquedas por nombre, ID, plataforma, etc.

Aunque mi propósito era juguetear algo con una API y Javascript, tengo en mente usarla para algún proyecto futuro. Os animo a hacer lo mismo, la mejor forma de aprender es usar y llevar la práctica a un caso real.

Promises

Para los que hayáis estado siguiente los artículos de Javascript hay una novedad en el código de arriba: el uso de promises. Ésta es una de las incorporaciones a ES6, aunque hay librerías que lo implementan desde hace tiempo.

Básicamente es una forma de usar callbacks sin tener que anidarlas, controlando el flujo de datos de forma asíncrona de una manera mas clara y a prueba de errores.

En otro capítulo sobre programación asíncrona comentaré como crearlas y usarlas.