Seed de Rádios Portuguesas
Visão Geral
Este documento descreve os sistemas de seed para popular a base de dados com rádios portuguesas.
Existem dois scripts disponíveis:
- 🚀 seed-radios.ts - Seed rápido com 30 rádios principais (curadas manualmente)
- 🌐 seed-radios-full.ts - Seed completo via Radio Browser API (centenas/milhares de rádios)
Script 1: Seed Rápido (30 Rádios Principais)
Descrição
O script seed-radios.ts popula a base de dados com 30 rádios portuguesas principais, curadas manualmente e validadas.
Como Executar
# Via npm script
npm run seed:radios
# Ou via ts-node
npx ts-node apps/api/src/scripts/seed-radios.ts
Base de Dados Inicial
Rádios Nacionais (Principais)
- Rádio Comercial - A estação alternativa (Pop, Rock, Alternative)
- RFM - Só grandes músicas (Pop, Dance, Top 40)
- M80 Rádio - Os grandes clássicos dos anos 80
- Rádio Renascença - A rádio mais ouvida em Portugal
- Antena 1 - Rádio generalista da RTP (Informação e Cultura)
- Antena 2 - Música clássica, jazz e ópera
- Antena 3 - Música alternativa, indie e electrónica
- Mega Hits - The best music variety
- Smooth FM - Música suave (Soul, Jazz, Lounge)
- TSF Rádio Notícias - A rádio notícia (24h)
- Rádio Observador - Notícias, opinião e debate
Rádios Regionais
- Cidade FM - Porto
- Rádio Oxigénio - Porto
- Rádio Festival - Coimbra
- Rádio Cascais - Cascais
- Orbital - Setúbal
- Radar - Faro (Algarve)
- Rádio Horizonte Algarve - Albufeira
- Rádio Nova Era - Porto
- Universidade FM - Coimbra
- Rádio Brigantia - Bragança
- Rádio Elvas - Elvas (Alentejo)
- Rádio Cávado - Braga (Minho)
Rádios Especializadas
- RDP Internacional - Para a diáspora portuguesa
- RDP África - Ligação aos PALOP
- Rádio Sim - Rádio católica
- Rádio Amália - Fado 24 horas
- Vodafone FM - Música digital
- Rádio Clube Português - Tradição desde 1931
- Rádio Limite - Alternativa e indie
Metadados Incluídos
Cada rádio inclui:
- ✅ Nome - Nome oficial da rádio
- ✅ URL de Stream - Link direto para transmissão (validado)
- ✅ Logo - URL do logotipo
- ✅ Descrição - Descrição detalhada da rádio
- ✅ Géneros - Array de géneros musicais (ex: ['Pop', 'Rock'])
- ✅ Idioma - 'pt' para português
- ✅ País - 'Portugal'
- ✅ Cidade - Cidade de origem/sede
- ✅ is_active - true (todas ativas por defeito)
Como Executar
Método 1: Via ts-node
npx ts-node apps/api/src/scripts/seed-radios.ts
Método 2: Via npm script
npm run seed:radios
Pré-requisitos
- MongoDB deve estar em execução
- Variáveis de ambiente configuradas (
.env) - Dependências instaladas (
npm install)
Validação dos Streams
Todos os URLs de stream foram validados e testados. As rádios incluem:
- Streams HTTP - URLs diretos de streaming em MP3/AAC
- Formato padrão - Compatíveis com a maioria dos players
- Disponibilidade - Streams públicos e gratuitos
Géneros Musicais Representados
- Pop
- Rock
- Alternative
- Dance
- Classical
- Jazz
- Fado
- Portuguese Traditional
- Electronic
- News/Talk
- Regional/Folk
Script 2: Seed Completo (Radio Browser API)
Descrição
O script seed-radios-full.ts recolhe TODAS as rádios portuguesas disponíveis via Radio Browser API.
Funcionalidades
- 🌐 Recolha Automática - Fetch de todas as rádios portuguesas
- ✅ Validação - Apenas rádios com stream funcional (lastcheckok = 1)
- 🔍 Filtragem - Remove rádios quebradas ou com problemas
- 📊 Metadados Ricos - Codec, bitrate, géneros, idiomas
- ⏭️ Skip Duplicados - Detecta e ignora rádios já existentes na BD
- 📈 Ordenação - Por popularidade (clickcount)
Como Executar
# Via npm script (recomendado)
npm run seed:radios:full
# Ou via ts-node
npx ts-node apps/api/src/scripts/seed-radios-full.ts
Parâmetros da API
O script usa os seguintes parâmetros:
{
limit: 10000, // Máximo possível
order: 'clickcount', // Ordenar por popularidade
reverse: true, // Mais populares primeiro
hidebroken: true, // Esconder rádios não funcionais
}
Volume Esperado
- Rádios Encontradas: ~100-500 rádios portuguesas
- Rádios Funcionais: ~50-200 (após filtros de validação)
- Tempo de Execução: 2-10 minutos (dependendo do volume)
Metadados Adicionais
Além dos campos base, o seed completo inclui:
- ✅ external_id - UUID único da Radio Browser
- ✅ codec - Codec de áudio (MP3, AAC, etc.)
- ✅ bitrate - Taxa de bits em kbps
- ✅ homepage - Website oficial da rádio
- ✅ Validação de Status - Verifica lastHttpStatus = 200
Estrutura de Dados
interface RadioBrowserStation {
stationuuid: string;
name: string;
url_resolved: string; // URL do stream validado
favicon: string; // Logo
tags: string; // Géneros separados por vírgula
country: string;
state: string; // Cidade/região
language: string;
codec: string;
bitrate: number;
lastcheckok: number; // 1 = funcional, 0 = quebrado
lastHttpStatus: number; // 200 = OK
clickcount: number; // Popularidade
}
Output do Script
🌱 A iniciar seed COMPLETO de rádios portuguesas...
⚠️ Este processo pode demorar vários minutos!
🌐 A recolher rádios da Radio Browser API...
📻 Encontradas 245 rádios portuguesas
✅ 187 rádios funcionais encontradas
📊 A processar rádios...
✅ [1/187] Rádio Comercial (Lisboa) - mp3@128kbps
✅ [2/187] RFM (Lisboa) - aac@64kbps
⏭️ [3/187] Antena 1 - já existe
...
📊 Sumário Final:
✅ Criadas com sucesso: 150
⏭️ Já existentes (ignoradas): 37
❌ Erros: 0
📻 Total processadas: 187
🗄️ Total de rádios na base de dados: 180
✨ Seed completo de rádios concluído!
Comparação dos Scripts
| Característica | seed-radios.ts | seed-radios-full.ts |
|---|---|---|
| Volume | 30 rádios | 100-500 rádios |
| Fonte | Curadas manualmente | Radio Browser API |
| Tempo | ~5 segundos | 2-10 minutos |
| Qualidade | Verificada manualmente | Validada automaticamente |
| Metadados | Básicos | Completos (codec, bitrate) |
| Uso | Setup inicial rápido | Base completa |
Pré-requisitos
- MongoDB deve estar em execução
- Variáveis de ambiente configuradas (
.env) - Dependências instaladas (
npm install)
Validação dos Streams
As rádios cobrem diversas regiões de Portugal:
- Lisboa - Capital (maior concentração)
- Porto - Segunda maior cidade
- Coimbra - Região centro
- Algarve - Sul (Faro, Albufeira)
- Alentejo - Interior sul (Elvas)
- Minho - Norte (Braga)
- Trás-os-Montes - Nordeste (Bragança)
Notas Técnicas
Schema da Base de Dados
O schema de rádio (radio.schema.ts) suporta:
{
name: string; // Obrigatório
stream_url: string; // Obrigatório, validado como URL
logo?: string; // Opcional
description?: string; // Opcional
genres: string[]; // Array, default []
language?: string; // Opcional
country?: string; // Opcional
city?: string; // Opcional
is_active: boolean; // Default true
createdAt: Date; // Auto-gerado
updatedAt: Date; // Auto-gerado
}
Índices MongoDB
Os seguintes índices estão criados para performance:
name- Para pesquisa por nomegenres- Para filtro por génerocountry, city- Para filtro por localizaçãois_active- Para filtro de rádios ativas
Troubleshooting
Erro de Conexão MongoDB
# Verificar se MongoDB está em execução
docker-compose ps
# Iniciar MongoDB
docker-compose up -d mongodb
Duplicados
O script pode falhar se as rádios já existirem. Para limpar:
# Entrar no MongoDB
docker-compose exec mongodb mongosh
# Usar a base de dados
use audissey
# Limpar coleção de rádios
db.radios.deleteMany({})
Verificar Rádios Criadas
# Via MongoDB Shell
db.radios.countDocuments()
db.radios.find().pretty()
# Filtrar por cidade
db.radios.find({ city: "Lisboa" })
# Filtrar por género
db.radios.find({ genres: "Fado" })
Próximos Passos
- ✅ Script de seed criado e testado
- ⏳ Adicionar comando npm ao
package.json - ⏳ Integrar com CI/CD para seed automático
- ⏳ Criar endpoint admin para adicionar novas rádios
- ⏳ Implementar sistema de validação de streams (health check)
Manutenção
Para manter a lista atualizada:
- Verificar streams periodicamente - URLs podem mudar
- Adicionar novas rádios - Atualizar array
portugueseRadios - Remover rádios inativas - Marcar
is_active: false - Atualizar metadados - Corrigir descrições/géneros conforme necessário
Contribuir
Para adicionar novas rádios ao seed:
- Adicionar objeto ao array
portugueseRadios - Validar URL de stream
- Preencher todos os metadados obrigatórios
- Testar execução do script
- Verificar que a rádio foi criada corretamente
Data de criação: Dezembro 2025
Última atualização: Dezembro 2025
Versão: 1.0