Skip to content

devcsar/mini-wrapped-analytics

Repository files navigation

🎵 Spotify Wrapped POC

Dashboard analítico serverless en AWS que visualiza estadísticas musicales de Spotify en tiempo real

AWS Python License Status


📋 Tabla de Contenidos


🎯 Propósito

Problema: Los usuarios de Spotify solo reciben estadísticas una vez al año.

Solución: Dashboard serverless que extrae, procesa y visualiza datos musicales automáticamente cada 24 horas.

Valor Demostrado:

  • ✅ Arquitectura serverless escalable
  • ✅ Pipeline ETL completo con Python/Pandas
  • ✅ Integración de APIs REST (OAuth 2.0)
  • ✅ Visualización de datos con BI
  • ✅ Infraestructura como código
  • ✅ Costo operacional < $10/mes

🏗️ Arquitectura

Arquitectura *Dashboard en Quicksight con los kpis basicos del mini wrapped *

Flujo de Datos

Spotify API → Lambda (Python) → S3 (CSV) → QuickSight → Dashboard
     ↑
EventBridge (Scheduler)

Stack Tecnológico

Componente Tecnología Propósito
Compute AWS Lambda Procesamiento serverless
Storage AWS S3 Data Lake (CSV)
Orchestration EventBridge Scheduler (cron)
Analytics QuickSight BI Dashboard
Processing Pandas ETL y transformación

🚀 Quick Start

1. Prerrequisitos

# AWS CLI configurado
aws configure

# Python 3.11+
python --version

# Cuenta Spotify Developer
# https://developer.spotify.com/dashboard

2. Configuración Inicial

# Clonar repositorio
git clone https://github.com/tu-usuario/spotify-wrapped-poc.git
cd spotify-wrapped-poc

# Configurar variables
export AWS_REGION=us-east-1
export S3_BUCKET=mini-wrapped-data-analytics
export SPOTIFY_ACCESS_TOKEN=tu_token

3. Despliegue Rápido

# Crear infraestructura S3
./scripts/setup_s3.sh

# Crear rol IAM
./scripts/setup_iam.sh

# Desplegar Lambda
cd lambda && ./deploy.sh

# Configurar scheduler
./scripts/setup_eventbridge.sh

# Ejecutar primera vez
aws lambda invoke --function-name spotify-wrapped-extractor response.json

4. Verificar Datos

# Ver archivos generados
aws s3 ls s3://mini-wrapped-data-analytics/ --recursive

# Ver logs
aws logs tail /aws/lambda/spotify-wrapped-extractor --follow

Datos en S3 Estructura de datos en S3


🔐 Autenticación Spotify

Obtener Credenciales

Método Rápido (Desarrollo):

# 1. Ir a: https://developer.spotify.com/console/get-recently-played/
# 2. Click "GET TOKEN"
# 3. Seleccionar scopes:
#    ☑ user-read-recently-played
#    ☑ user-top-read
# 4. Autorizar y copiar token

Scopes Requeridos:

Scope Endpoint Propósito
user-read-recently-played /me/player/recently-played Historial último mes
user-top-read /me/top/tracks /me/top/artists Rankings de favoritos

Endpoints Utilizados

# 1. Recently Played - Historial real de reproducción
GET https://api.spotify.com/v1/me/player/recently-played
Params: {limit: 50, after: timestamp_30_dias_atras}

# 2. Top Tracks - Canciones más escuchadas (algorítmico)
GET https://api.spotify.com/v1/me/top/tracks
Params: {time_range: "short_term", limit: 50}

# 3. Top Artists - Artistas favoritos + géneros
GET https://api.spotify.com/v1/me/top/artists
Params: {time_range: "short_term", limit: 50}

¿Por qué estos endpoints?

  • recently-played: Único con historial real + timestamps
  • top-tracks: Ranking pre-calculado por Spotify
  • top-artists: Incluye géneros musicales (no disponible en otros)

Actualizar Token (Expira cada hora)

# Script rápido
./scripts/update_token.sh

# O manualmente
aws lambda update-function-configuration \
  --function-name spotify-wrapped-extractor \
  --environment Variables="{
    S3_BUCKET_NAME=mini-wrapped-data-analytics,
    SPOTIFY_ACCESS_TOKEN=nuevo_token
  }"

📂 Estructura S3

mini-wrapped-data-analytics/
│
├── top_canciones/
│   ├── manifest.json              # QuickSight manifest
│   └── top_canciones.csv          # Dataset actual
│
├── top_artistas/
│   ├── manifest.json
│   └── top_artistas.csv
│
├── actividad_diaria/
│   ├── manifest.json
│   └── actividad_diaria.csv
│
├── actividad_horaria/
│   ├── manifest.json
│   └── actividad_horaria.csv
│
├── generos/
│   ├── manifest.json
│   └── generos.csv
│
├── resumen/
│   ├── manifest.json
│   └── resumen.csv
│
└── historico/                     # Archivos con timestamp
    └── top_canciones_20250103.csv

Crear Estructura

#!/bin/bash
BUCKET="mini-wrapped-data-analytics"

# Crear bucket
aws s3 mb s3://${BUCKET}

# Crear carpetas
for folder in top_canciones top_artistas actividad_diaria actividad_horaria generos resumen historico
do
  aws s3api put-object --bucket ${BUCKET} --key "${folder}/"
done

# Habilitar versionado
aws s3api put-bucket-versioning \
  --bucket ${BUCKET} \
  --versioning-configuration Status=Enabled

Bucket S3 Vista del bucket en consola AWS


💻 Comandos AWS CLI

Lambda

# Ver configuración
aws lambda get-function-configuration --function-name spotify-wrapped-extractor

# Actualizar código
aws lambda update-function-code \
  --function-name spotify-wrapped-extractor \
  --zip-file fileb://lambda.zip

# Ver logs en tiempo real
aws logs tail /aws/lambda/spotify-wrapped-extractor --follow

# Invocar manualmente
aws lambda invoke --function-name spotify-wrapped-extractor output.json

S3

# Listar archivos
aws s3 ls s3://mini-wrapped-data-analytics/ --recursive

# Descargar CSV
aws s3 cp s3://mini-wrapped-data-analytics/top_canciones/top_canciones.csv .

# Ver contenido de manifest
aws s3 cp s3://mini-wrapped-data-analytics/top_canciones/manifest.json - | jq .

EventBridge

# Ver reglas
aws events list-rules

# Deshabilitar scheduler
aws events disable-rule --name spotify-wrapped-daily

# Cambiar frecuencia a semanal
aws events put-rule \
  --name spotify-wrapped-daily \
  --schedule-expression "rate(7 days)"

Scripts de Automatización

# Despliegue completo
./scripts/full_deploy.sh

# Ejecutar Lambda manualmente
./scripts/run_manual.sh

# Actualizar token Spotify
./scripts/update_token.sh

# Verificar datos en S3
./scripts/verify_data.sh

📊 Dashboard QuickSight

Configuración Rápida

1. Activar QuickSight

https://quicksight.aws.amazon.com/
→ Sign up → Standard Edition ($9/mes)

2. Dar Permisos a S3

QuickSight → Manage QuickSight → Security & permissions
→ Add S3 bucket: mini-wrapped-data-analytics

3. Crear 6 Datasets

Usar estas URLs en QuickSight (New dataset → S3 → Upload manifest):

s3://mini-wrapped-data-analytics/top_canciones/manifest.json
s3://mini-wrapped-data-analytics/top_artistas/manifest.json
s3://mini-wrapped-data-analytics/actividad_diaria/manifest.json
s3://mini-wrapped-data-analytics/actividad_horaria/manifest.json
s3://mini-wrapped-data-analytics/generos/manifest.json
s3://mini-wrapped-data-analytics/resumen/manifest.json

QuickSight Datasets Vista de datasets en QuickSight

Métricas del Dashboard

Visual Tipo Dataset Configuración
KPIs KPI Cards Resumen 4 métricas principales
Top Canciones Horizontal Bar Top Canciones Top 10 por reproducciones
Top Artistas Vertical Bar Top Artistas Top 5 artistas
Actividad Diaria Line Chart Actividad Diaria Canciones/minutos por día
Distribución Semanal Bar Chart Actividad Diaria Canciones por día semana
Heat Map Heat Map Actividad Horaria Hora × Día de semana
Géneros Donut Chart Géneros Top 5 géneros
Tabla Detalle Table Top Canciones Ranking detallado

Dashboard Vista del dashboard completo

Visualizaciones Detalle de visualizaciones individuales


💰 Costos

Desglose Mensual

Servicio Uso Costo
Lambda 30 ejecuciones/mes $0.11
S3 150 MB $0.00
EventBridge 30 invocaciones $0.00
QuickSight 1 autor $9.00
TOTAL ~$9.11/mes

Con AWS Free Tier (primeros 12 meses): $9/mes (solo QuickSight)

Optimizaciones

# Reducir a ejecución semanal (ahorro ~$0.08/mes)
aws events put-rule --name spotify-wrapped-daily \
  --schedule-expression "rate(7 days)"

# Usar QuickSight Reader en lugar de Author
# Reader: $5/mes (solo visualización)
# Author: $9/mes (edición de dashboards)

🐛 Troubleshooting

Error: Spotify API 403

# Token expirado o sin scopes correctos
# Obtener nuevo token: https://developer.spotify.com/console/
./scripts/update_token.sh

Error: Lambda Timeout

# Aumentar timeout a 5 minutos
aws lambda update-function-configuration \
  --function-name spotify-wrapped-extractor \
  --timeout 300

Error: QuickSight Access Denied

QuickSight → Manage QuickSight → Security & permissions
→ QuickSight access to AWS services
→ Seleccionar tu bucket S3

Error: Manifest JSON Inválido

# Recrear manifests
./scripts/upload_manifests.sh

# Verificar formato
aws s3 cp s3://bucket/top_canciones/manifest.json - | jq .

📚 Recursos


👤 Autor

[Tu Nombre]

LinkedIn GitHub Email


📄 Licencia

MIT License - Este proyecto es de código abierto para propósitos educativos.


⭐ Agradecimientos

Si este proyecto te ayudó en tus entrevistas técnicas, ¡dale una estrella! ⭐


Desarrollado con 💙 para demostrar habilidades en arquitectura cloud serverless

About

Proyecto basico para genera un dashboar similar al spotify wrapped con la api de spotify

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages