← Portafolio
Proyecto personal · 2026

Rated

Una aplicación para calificar las canciones que escucho en Spotify y saber cuántas veces escucho cada una, un dato que Spotify no muestra.

No tiene demo abierta: funciona con mi cuenta personal de Spotify. Estas capturas son de la app real, pero con canciones, artistas y portadas inventados. Los números (calificaciones, reproducciones y horas) sí son reales.
Pantalla para calificar, en escritorio
Calificar. La canción que toca calificar, con las siete calificaciones a un clic o con el teclado. Arriba se ve lo que está sonando en Spotify; abajo, las que siguen y las que acabo de calificar.
Canciones más escuchadas, en escritorio
Más escuchadas. Las canciones que más escucho en el último mes, en tres meses, en un año o de todos los tiempos. El conteo lo lleva la app, no Spotify.
Resumen del año, en escritorio
Resumen. El resumen del año: cuántas canciones califiqué en cada periodo de cuatro meses y cómo se reparten las calificaciones.
Biblioteca, en escritorio
Biblioteca. Las playlists que arma la app y todas mis canciones guardadas, que se pueden filtrar por calificación.
Android

En el teléfono

La app detecta si se abre en una computadora o en un teléfono y cambia el diseño. En Android tiene además una notificación y widgets que muestran la canción que está sonando con las siete calificaciones, para calificarla sin abrir la app.

Calificar en el teléfono
Más escuchadas en el teléfono
Para qué sirve

Calificar una vez y que lo demás pase solo

Spotify permite guardar canciones, pero no calificarlas, y no muestra cuántas veces has escuchado cada una. Rated resuelve las dos cosas. La calificación va de A+ a D. Cuando una canción saca B+ o más, la app la agrega sola a mis playlists de favoritas y a mis Me gusta de Spotify; si después le bajo la calificación, la quita.

Además separo el año en tres playlists de cuatro meses cada una. Las canciones que califico alto entran a la del periodo actual, y las de periodos pasados ya no se modifican: quedan como registro de lo que escuchaba en esa época.

Para el conteo de reproducciones importé el historial completo que Spotify entrega cuando le pides tus datos: 187,577 reproducciones desde 2018. Solo cuento las que duran más de 30 segundos, que son unas 120 mil y casi 5,900 horas. Desde entonces la app registra cada canción que escucho.

Con eso puedo ver qué escuché más este mes, qué llevo meses sin escuchar y qué escucho mucho sin haberlo calificado.

Cómo está hecha

De dónde salen los datos

API de Spotify

OAuth

La app inicia sesión con mi cuenta y guarda el acceso en la base de datos. Solo acepta mi cuenta, para que nadie más pueda conectarse.

Registro cada 15 minutos

Cloud Scheduler

Spotify solo muestra las últimas 50 canciones escuchadas, unas tres horas. Primero usé una tarea programada en GitHub Actions, pero se retrasaba de 2 a 5 horas y se perdían canciones; con Cloud Scheduler ya no.

MySQL

dos tablas

Una guarda cada reproducción con su fecha, para consultar por periodo; la otra lleva el total por canción.

FastAPI en Cloud Run

Python · pandas · Cloud Build

Cada cambio que subo a GitHub se compila y se publica solo. La contraseña de la base de datos se guarda en Secret Manager.

Web, escritorio y Android

tres versiones

La misma interfaz en el navegador, en una app de escritorio y en Android, con notificación y widgets.

Decisiones técnicas

Lo que aprendí haciéndola

Cada reproducción se cuenta una sola vez

El registro corre cada 15 minutos y siempre vuelve a ver canciones que ya guardó. Para no contarlas dos veces, la tabla no acepta la misma canción en el mismo momento (llave compuesta e INSERT IGNORE). Así el control está en la base de datos y no depende de que el código no falle.

Reconocer una canción por nombre y artista

Spotify le da identificadores distintos a la misma canción según el álbum o la reedición. Al cruzar solo por identificador se perdían unas 12,000 reproducciones; lo noté comparando con otra app de estadísticas. Ahora se cruza por nombre y artista, con cuidado de no juntar un remix con la versión original.

Cero no es lo mismo que sin dato

En la pantalla para limpiar mis Me gusta, las canciones sin historial aparecían con cero reproducciones y salían primero en la lista para quitarse. Ahora se muestran con un signo de interrogación.

Pocas consultas a la base de datos

La base de datos está en otra región y cada consulta tarda unos 80 ms. Pedir 500 canciones una por una tardaría 40 segundos, así que cada pantalla se resuelve en dos consultas.