AR
ArthurDS-tech/AlgoritimoSpotify
Emotify E² Engine (Emotional DNA Engine)
Motor de análise emocional profunda + sistema inteligente de recomendações baseado no histórico Spotify.
🎯 Características
Análise Emocional
- 7 Emoções: Alegria, Euforia, Energia, Calma, Melancolia, Nostalgia, Introspecção
- Análise Temporal: Evolução em múltiplas janelas (1h, 4h, 24h, 7d, 14d, 30d)
- Detecção de Fases: Identifica mudanças significativas no estado emocional
- Matriz de Transição: Padrões Markovianos de transição entre emoções
- DNA Emocional: Perfil completo do usuário em JSON
Sistema de Recomendações Inteligente 🆕
-
4 Modos de Recomendação:
MAINTAIN: Mantém emoção atual/dominanteTRANSITION: Transição suave entre emoçõesEXPLORE: Explora emoções complementaresJOURNEY: Cria jornada emocional completa (ex: calma → euforia)
-
Integração Spotify API:
- Usa top artists/tracks do usuário como seeds
- Target features baseadas em valence/energy/danceability
- Criação automática de playlists
🚀 Instalação
npm install⚙️ Configuração
- Crie um app no Spotify Dashboard
- Configure
.env:
SPOTIFY_CLIENT_ID=seu_client_id
SPOTIFY_CLIENT_SECRET=seu_secret
SPOTIFY_REDIRECT_URI=http://localhost:3000/callback
# Use 'memory' para desenvolvimento sem Redis/MongoDB
MONGODB_URI=memory
REDIS_URL=memory
PORT=3000📡 API Endpoints
Autenticação
GET /login # Inicia autenticação OAuth
GET /callback # Callback do SpotifyAnálise Emocional
POST /api/refresh/:userId # Atualiza histórico (incremental)
GET /api/analysis/:userId # DNA emocional completo
?days=30 # Período de análiseRecomendações 🆕
GET /api/recommendations/:userId
?emotion=euforia # Emoção alvo (opcional)
&mode=maintain # maintain|transition|explore|journey
&limit=20 # Número de tracks
POST /api/playlist/:userId
Body: {
"name": "Minha Playlist Emocional",
"emotion": "calma",
"mode": "journey",
"isPublic": true
}🧪 Testes
# Teste do algoritmo de análise
node test/testEngine.js
# Teste do sistema de recomendações
node test/testRecommendations.js📊 Exemplo de Uso
1. Análise Emocional
// Atualiza histórico
POST /api/refresh/user123
// Busca DNA emocional
GET /api/analysis/user123?days=30
// Resposta:
{
"overallDistribution": {
"euforia": 0.50,
"melancolia": 0.25,
"calma": 0.125
},
"insights": [
"Sua emoção dominante é euforia (50% do tempo)",
"Mudança detectada: de melancolia para euforia"
]
}2. Recomendações Inteligentes
// Mantém emoção atual
GET /api/recommendations/user123?mode=maintain
// Transição suave
GET /api/recommendations/user123?mode=transition&emotion=alegria
// Jornada emocional
GET /api/recommendations/user123?mode=journey&emotion=euforia3. Criar Playlist Automática
POST /api/playlist/user123
{
"name": "Jornada: Calma → Euforia",
"emotion": "euforia",
"mode": "journey"
}
// Resposta:
{
"playlist": {
"id": "playlist_id",
"external_urls": { "spotify": "https://..." }
},
"tracksAdded": 30,
"mode": "journey",
"emotion": "euforia"
}🏗️ Arquitetura
src/
├── auth/
│ └── SpotifyAuth.js # OAuth PKCE
├── config/
│ ├── spotify.js # Configurações API
│ └── emotions.js # Regras de emoções
├── engine/
│ ├── E2Engine.js # Orquestrador principal
│ ├── EmotionClassifier.js # Classificação por track
│ ├── TemporalAnalyzer.js # Análise temporal
│ └── RecommendationEngine.js # Sistema de recomendações 🆕
└── services/
├── SpotifyClient.js # Cliente API Spotify
├── CacheService.js # Cache Redis/Memory
└── DatabaseService.js # MongoDB/Memory
🎵 Como Funciona
Pipeline de Análise
- Coleta:
recently_playedcom cursor incremental - Features: Batch de até 100 IDs por request
- Classificação: Regras baseadas em valence/energy/danceability
- Temporal: Agregação em janelas + detecção de mudanças
- Insights: Padrões, transições, previsões
Sistema de Recomendações
- Análise do DNA: Identifica emoção dominante e padrões
- Target Features: Mapeia emoção → features Spotify
- Seeds Inteligentes: Usa top artists/tracks do usuário
- API Spotify: Chama
/recommendationscom parâmetros otimizados - Modos Especiais:
- Journey: Cria transição gradual em 4 etapas
- Transition: Calcula features intermediárias
- Explore: Sugere emoções complementares
🔧 Otimizações
- Cache Inteligente: Audio features = 1 ano, tops = 24h
- Updates Delta: Só processa tracks novas (cursor)
- Batch Requests: Até 100 IDs por chamada
- Fallback Memory: Funciona sem Redis/MongoDB
- Rate Limit: Retry automático em 429
📈 Próximos Passos
- Modelo ML (Random Forest/XGBoost) para classificação
- LSTM para previsão temporal
- Clustering de sessões (K-means)
- Dashboard web com visualizações
- Análise de lyrics com LLM
- Recomendações contextuais (clima, localização)
📄 Licença
MIT