en Historias

O en menos, si la api de Spotify no te trollea.

Hace una semana, estuve en Córdoba, en el hackathon de la Startup School que se hizo allí, en colaboración entre coSfera y Tetuan Valley. Iba como mentor de tecnología, y la verdad es que eso mola mucho, pero… es un hackathon, y yo soy programador. Algo dentro de mi me decía “programa algo”. Y según parece, también a otros mentores: A eso de las nueve de la tarde, alguien hizo el primer comentario: “nos montamos un hackathon de mentores esta noche”.

Una hora después, surgió la idea: Reproducir en modo aleatorio varias listas de Spotify al mismo tiempo. Nada más decirlo, empezamos todos a darle forma a esa idea. Entre cervezas, el producto se hacía sólo, y no tardamos en sacar más funcionalidades, como canciones en común con un amigo, o canciones que tus amigos conocen y tu no. En ese momento, alguno soltó la típica frase que hace que pongas los pies en la tierra, o te vengas arriba:

“Esto en cuatro horas nos lo hacemos”.

A la una y media (de la mañana) llegamos al hostal donde dormíamos. Era un sitio chulísimo, como una casa tradicional andaluza, con su patio interior, que había sido acristalado en el techo y convertido en una sala de estar, una cocina enorme, y habitaciones grandes. Nada más llegar, Ulises, Jesús, Jose Antonio y yo, sacamos los ordenadores, y sobra decir que nos vinimos arriba. Empezamos a dividir el producto en partes, en funcionalidades, y nos repartimos unos roles. Decidimos que el código sería abierto, y creamos un repositorio en el github de Open Source Weekends. A las dos estábamos manos a la obra. Spotymix estaba naciendo.

Levantamos una api en NodeJS con Express, guardando los datos en Firebase, por hacerlo más sencillo. En el frontend, Angular 1.5 y Bootstrap, y el diseño fue… ¿inspirado? por la versión web de Spotify. La idea era usar algo que todos supiésemos hacer de forma relativamente rápida, y hacer un prototipo que validase que esto podía ser un producto real, y usado por la gente. Bueno, y usarlo nosotros, que echábamos de menos esas funcionalidades.

Decidimos empezar por la reproducción de varias listas en aleatorio, porque nos pareció la función más útil. Después, si daba tiempo, la lista de canciones en común con un usuario. Después, artistas similares, porque Ulises ya lo había hecho, y sólo había que copiar el código, y hacerle un frontend chulo (si, si, tal cual).

Cuatro de la mañana, dos horas después de empezar, aparece el primer problema: La api empieza a trollearnos.

Señores, parece que Spotify empezó a crecer desde el prototipo, y hay algunas ñapas que (especialmente cuando has hecho cosas parecidas) se hacen evidentes al usar su api. También se puede ver, por la estructura de datos, que usan Cassandra, y que el equipo de desarrollo no pensó en ningún momento en abrir la api. Detalles como que para pedir una lista de reproducción tengas que mandar el ID de la lista y el nombre de usuario del creador de la lista (WTF?) o que al hacer ciertas peticiones devuelva mil cosas extra, y lo que pides venga en un parámetro dentro de un objeto que se manda como parámetro de otro parámetro… Trolleos varios, que no estaban del todo bien documentados. Sobrevivimos.

A las cinco, el frontend estaba “listo” para empezar a comunicarse con el backend, y mostrar los datos reales. Backend te logeaba con Spotify (passport lo hace súper facil), recogía las listas del usuario (sólo las públicas, no se si porque las privadas no podíamos o porque nos dio pereza buscar el parámetro), recibía las listas a mezclar, y las mezclaba. Como no vimos que Spotify permitiese reproducir fuera de su servicio, y no teníamos pensado hacer esa noche un reproductor, decidimos que la mejor idea era crear una lista de reproducción con los tracks de las listas en aleatorio. Ahí empezó el problema que nos tuvo locos. No nos daba permiso para crear la lista de reproducción.

Ulises, nuestro experto en APIs se quedó encargado de resolver el problema, mientras Jesús y yo preparábamos la siguiente funcionalidad: Canciones en común con un amigo. También preparamos un fake de las dos funcionalidades, por si al final no podíamos hacerlo de forma real, mostrar que el prototipo “funcionaba”. Total, es un mvp, no tiene que ser perfecto.

A las nueve de la mañana paramos, con las dos funcionalidades a medias, pero fakeadas. La API nos seguía dando problemas, y ya no sabíamos por donde cogerlo. Paramos a retomar fuerzas. Hicimos zumo de naranja, café, tostadas… Vamos, un desayuno de campeones. Realmente, si no conseguíamos que la API nos dejase escribir, no teníamos ni que decirlo. Estaba todo tan bien fakeado, que parecía que funcionaba a la perfección. Desayunamos, y fuimos de nuevo a CoSfera, que empezaba el segundo día del hackathon. Allí, estuvimos de nuevo con la gente, y en los ratos sueltos nos poníamos a intentar solucionarlo.

Nos dijeron que si queríamos presentarlo, como ejemplo de que se puede hacer, de cómo hacerlo, y de cómo funciona. Dijimos que si, aún a sabiendas de que no funcionaba.

¿Te suena eso de los árboles no te dejan ver el bosque? Pues tal cual. En cuanto desconectamos, y volvimos a mirar el código, resulta que estábamos haciendo la autenticación mal. Vaya tontería más grande. Y no nos habíamos dado cuenta ninguno. Pues en media hora lo dejamos todo funcionando, y presentamos. Hackathon mode on.


La verdad es que fue muy loco, pero muy divertido. No dormir, y mantenerse despierto a base de café, te rompe, pero mola muchísimo. Para mi, la experiencia de desarrollar algo en muy poco tiempo, con gente tan crack, ha sido increíble. De momento, el proyecto no está subido, pero pronto lo estará, y si la cosa va bien, lo seguiremos ampliando. Todo el código está abierto, y toda contribución es bienvenida.

Deja un comentario