426 lines
13 KiB
Markdown
426 lines
13 KiB
Markdown
# 📖 PROCESO COMPLETO: Descubrimiento y Gestión de Feeds RSS
|
|
|
|
## 🎯 Problema Resuelto
|
|
|
|
**Pregunta:** ¿Cómo asigno país y categoría a los feeds descubiertos automáticamente?
|
|
|
|
**Respuesta:** El sistema ahora usa un flujo inteligente de 3 niveles:
|
|
|
|
1. **Auto-aprobación** (feeds con categoría/país)
|
|
2. **Revisión manual** (feeds sin metadata completa)
|
|
3. **Análisis automático** (sugerencias inteligentes)
|
|
|
|
---
|
|
|
|
## 🔄 FLUJO COMPLETO DEL SISTEMA
|
|
|
|
### Paso 1: Añadir URL Fuente
|
|
|
|
Tienes 2 opciones para añadir URLs:
|
|
|
|
#### Opción A: Con Categoría y País (AUTO-APROBACIÓN)
|
|
```sql
|
|
INSERT INTO fuentes_url (nombre, url, categoria_id, pais_id, idioma, active)
|
|
VALUES ('El País', 'https://elpais.com', 1, 44, 'es', TRUE);
|
|
-- ^ ^
|
|
-- categoria_id pais_id
|
|
```
|
|
|
|
✅ **Resultado**: Feeds se crean **AUTOMÁTICAMENTE** y se activan
|
|
- Worker descubre feeds
|
|
- Hereda categoría (1) y país (44) del padre
|
|
- Crea feeds en tabla `feeds` directam ente
|
|
- Ingestor empieza a descargar noticias
|
|
|
|
#### Opción B: Sin Categoría o País (REQUIERE REVISIÓN)
|
|
```sql
|
|
INSERT INTO fuentes_url (nombre, url, active)
|
|
VALUES ('BBC News', 'https://www.bbc.com/news', TRUE);
|
|
-- Sin categoria_id ni pais_id
|
|
```
|
|
|
|
⚠️ **Resultado**: Feeds van a **REVISIÓN MANUAL**
|
|
- Worker descubre feeds
|
|
- Analiza automáticamente:
|
|
- Detecta país desde dominio (.com → Reino Unido)
|
|
- Detecta idioma (en)
|
|
- Sugiere categoría ("Internacional")
|
|
- Crea feeds en tabla `feeds_pending`
|
|
- **ESPERA APROBACIÓN MANUAL** antes de activar
|
|
|
|
---
|
|
|
|
### Paso 2: Worker Descubre Feeds (cada 15 min)
|
|
|
|
El worker `url_discovery_worker` ejecuta automaticamente:
|
|
|
|
```
|
|
1. Lee fuentes_url activas
|
|
2. Para cada URL:
|
|
a. Descubre todos los feeds RSS
|
|
b. Valida cada feed
|
|
c. Analiza metadata:
|
|
- Idioma del feed
|
|
- País (desde dominio: .es, .uk, .fr, etc.)
|
|
- Categoría sugerida (keywords en título/descripción)
|
|
|
|
d. DECIDE EL FLUJO:
|
|
|
|
┌─────────────────────────────────────┐
|
|
│ ¿Parent tiene categoria_id Y pais_id? │
|
|
└──────────┬──────────────────────────┘
|
|
│
|
|
┌────────┴────────┐
|
|
│ SÍ │ NO
|
|
▼ ▼
|
|
┌──────────────┐ ┌─────────────────┐
|
|
│ AUTO-APROBAR │ │ REQUIERE REVISIÓN│
|
|
└───────┬──────┘ └─────────┬───────┘
|
|
│ │
|
|
▼ ▼
|
|
tabla: feeds tabla: feeds_pending
|
|
activo: TRUE reviewed: FALSE
|
|
✅ Listo para ⏳ Espera aprobación
|
|
ingestor
|
|
```
|
|
|
|
---
|
|
|
|
### Paso 3A: Feeds AUTO-APROBADOS
|
|
|
|
Si la URL padre tiene `categoria_id` y `pais_id`:
|
|
|
|
```sql
|
|
-- Ejemplo: URL con metadata completa
|
|
fuentes_url:
|
|
id=1, url='https://elpais.com',
|
|
categoria_id=1 (Noticias),
|
|
pais_id=44 (España)
|
|
|
|
↓ Worker descubre 3 feeds:
|
|
- https://elpais.com/rss/portada.xml
|
|
- https://elpais.com/rss/internacional.xml
|
|
- https://elpais.com/rss/deportes.xml
|
|
|
|
↓ Se crean DIRECTAMENTE en tabla feeds:
|
|
INSERT INTO feeds (nombre, url, categoria_id, pais_id, activo)
|
|
VALUES
|
|
('El País - Portada', 'https://elpais.com/rss/portada.xml', 1, 44, TRUE),
|
|
('El País - Internacional', 'https://elpais.com/rss/internacional.xml', 1, 44, TRUE),
|
|
('El País - Deportes', 'https://elpais.com/rss/deportes.xml', 1, 44, TRUE);
|
|
|
|
✅ Feeds están ACTIVOS inmediatamente
|
|
✅ Ingestor Go los procesa en siguiente ciclo (15 min)
|
|
✅ Noticias empiezan a llegar
|
|
```
|
|
|
|
---
|
|
|
|
### Paso 3B: Feeds PENDIENTES (requieren revisión)
|
|
|
|
Si la URL padre NO tiene `categoria_id` o `pais_id`:
|
|
|
|
```sql
|
|
-- Ejemplo: URL sin metadata
|
|
fuentes_url:
|
|
id=2, url='https://www.bbc.com/news',
|
|
categoria_id=NULL,
|
|
pais_id=NULL
|
|
|
|
↓ Worker descubre 2 feeds y ANALIZA automáticamente:
|
|
|
|
Feed 1: https://www.bbc.com/news/world/rss.xml
|
|
- Título: "BBC News - World"
|
|
- Idioma detectado: 'en'
|
|
- País detectado: 'Reino Unido' (desde .com + idioma inglés)
|
|
- Categoría sugerida: 'Internacional' (keyword "world")
|
|
|
|
Feed 2: https://www.bbc.com/sport/rss.xml
|
|
- Título: "BBC Sport"
|
|
- Idioma detectado: 'en'
|
|
- País detectado: 'Reino Unido'
|
|
- Categoría sugerida: 'Deportes' (keyword "sport")
|
|
|
|
↓ Se crean en tabla feeds_pending:
|
|
INSERT INTO feeds_pending (
|
|
fuente_url_id, feed_url, feed_title,
|
|
feed_language, detected_country_id, suggested_categoria_id,
|
|
reviewed, approved, notes
|
|
) VALUES (
|
|
2,
|
|
'https://www.bbc.com/news/world/rss.xml',
|
|
'BBC News - World',
|
|
'en',
|
|
74, -- Reino Unido (ID detectado)
|
|
2, -- Internacional (ID sugerido)
|
|
FALSE, FALSE,
|
|
'Country from domain: Reino Un ido | Suggested category: Internacional (confidence: 85%)'
|
|
);
|
|
|
|
⏳ Feeds están PENDIENTES
|
|
⏳ NO están activos aún
|
|
⏳ Requieren revisión manual en /feeds/pending
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Tabla Comparativa
|
|
|
|
| Aspecto | Auto-Aprobación | Revisión Manual |
|
|
|---------|----------------|-----------------|
|
|
| **Requisito** | URL padre con `categoria_id` Y `pais_id` | URL padre sin uno o ambos |
|
|
| **Tabla destino** | `feeds` (directa) | `feeds_pending` (temporal) |
|
|
| **Estado inicial** | `activo = TRUE` | `reviewed = FALSE, approved = FALSE` |
|
|
| **Análisis automático** | Hereda valores del padre | Detecta país, sugiere categoría |
|
|
| **Intervención manual** | ❌ No necesaria | ✅ Requerida |
|
|
| **Tiempo hasta activación** | Inmediato | Después de aprobación |
|
|
| **Ingestor procesa** | Sí (próximo ciclo) | No (hasta aprobar) |
|
|
|
|
---
|
|
|
|
## 🛠️ Interfaces de Gestión
|
|
|
|
### 1. Añadir URL con Metadata (Auto-aprobación)
|
|
|
|
**Ruta:** `/urls/add_source`
|
|
|
|
```
|
|
Formulario:
|
|
┌─────────────────────────────────────┐
|
|
│ Nombre: El País │
|
|
│ URL: https://elpais.com │
|
|
│ Categoría: [Noticias ▼] ← IMPORTANTE
|
|
│ País: [España ▼] ← IMPORTANTE
|
|
│ Idioma: es │
|
|
│ │
|
|
│ [Añadir Fuente] │
|
|
└─────────────────────────────────────┘
|
|
|
|
Resultado: Feeds se crearán AUTOMÁTICAMENTE
|
|
```
|
|
|
|
### 2. Revisar Feeds Pendientes (Nueva interfaz)
|
|
|
|
**Ruta:** `/feeds/pending` (próximamente)
|
|
|
|
```
|
|
Feeds Pendientes de Revisión
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Feed: BBC News - World
|
|
URL: https://www.bbc.com/news/world/rss.xml
|
|
Fuente: BBC News (https://www.bbc.com/news)
|
|
|
|
Análisis Automático:
|
|
├─ Idioma: English (en)
|
|
├─ País detectado: Reino Unido (.com domain + language)
|
|
└─ Categoría sugerida: Internacional (85% confianza)
|
|
Keywords: "world", "international", "global"
|
|
|
|
┌─────────────────────────────────────┐
|
|
│ Categoría: [Internacional ▼] │ ← Pre-seleccionada
|
|
│ País: [Reino Unido ▼] │ ← Pre-seleccionado
|
|
│ Idioma: [en] │ ← Auto-detectado
|
|
│ │
|
|
│ [✓ Aprobar Feed] [✗ Rechazar] │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
### 3. Descubrir Feeds Manualmente
|
|
|
|
**Ruta:** `/feeds/discover`
|
|
|
|
```
|
|
Perfecto para cuando quieres control total:
|
|
1. Ingresar URL
|
|
2. Ver todos los feeds encontrados
|
|
3. Seleccionar cuáles añadir
|
|
4. Asignar categoría/país globalmente
|
|
5. Feeds se crean directamente (no van a pending)
|
|
```
|
|
|
|
---
|
|
|
|
## 💡 RECOMENDACIONES DE USO
|
|
|
|
### Estrategia 1: Auto-aprobación Total
|
|
**Para fuentes conocidas y confiables:**
|
|
|
|
```sql
|
|
-- Añadir fuentes con metadata completa
|
|
INSERT INTO fuentes_url (nombre, url, categoria_id, pais_id, idioma) VALUES
|
|
('El País', 'https://elpais.com', 1, 44, 'es'),
|
|
('Le Monde', 'https://lemonde.fr', 1, 60, 'fr'),
|
|
('The Guardian', 'https://theguardian.com', 1, 74, 'en');
|
|
|
|
-- Worker creará feeds automáticamente
|
|
-- Sin intervención manual necesaria
|
|
```
|
|
|
|
### Estrategia 2: Revisión Manual
|
|
**Para fuentes nuevas o desconocidas:**
|
|
|
|
```sql
|
|
-- Añadir sin metadata
|
|
INSERT INTO fuentes_url (nombre, url) VALUES
|
|
('Sitio Desconocido', 'https://ejemplo.com');
|
|
|
|
-- Worker crea feeds en feeds_pending
|
|
-- Revisar en /feeds/pending
|
|
-- Aprobar/rechazar manualmente
|
|
```
|
|
|
|
### Estrategia 3: Híbrida (Recomendada)
|
|
**Combinar ambas:**
|
|
|
|
- URLs conocidas → Con categoría/país
|
|
- URLs nuevas → Sin metadata (revisión)
|
|
- Usar análisis automático como guía
|
|
- Ajustar manualmente si es necesario
|
|
|
|
---
|
|
|
|
## 🔍 Análisis Automático Explicado
|
|
|
|
### Detección de País
|
|
|
|
```python
|
|
# 1. Desde dominio (TLD)
|
|
.es → España
|
|
.uk, .co.uk → Reino Unido
|
|
.fr → Francia
|
|
.de → Alemania
|
|
.mx → México
|
|
.ar → Argentina
|
|
|
|
# 2. Desde idioma (si no hay dominio claro)
|
|
es → España (país principal)
|
|
en → Reino Unido
|
|
fr → Francia
|
|
pt → Portugal
|
|
|
|
# 3. Desde subdominios
|
|
es.example.com → España
|
|
uk.example.com → Reino Unido
|
|
```
|
|
|
|
### Sugerencia de Categoría
|
|
|
|
```python
|
|
# Análisis de keywords en título + descripción
|
|
|
|
Keywords encontrados → Categoría sugerida (% confianza)
|
|
|
|
"política", "gobierno", "elecciones" → Política (75%)
|
|
"economía", "bolsa", "mercado" → Economía (82%)
|
|
"tecnología", "software", "digital" → Tecnología (90%)
|
|
"deportes", "fútbol", "liga" → Deportes (95%)
|
|
"internacional", "mundo", "global" → Internacional (70%)
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 Ejemplos Completos
|
|
|
|
### Ejemplo 1: Periódico Español (Auto-aprobación)
|
|
|
|
```sql
|
|
-- 1. Añadir fuente con metadata
|
|
INSERT INTO fuentes_url (nombre, url, categoria_id, pais_id, idioma)
|
|
VALUES ('El Mundo', 'https://elmundo.es', 1, 44, 'es');
|
|
|
|
-- 2. Worker ejecuta (15 min después):
|
|
-- - Descubre: elmundo.es/rss/portada.xml
|
|
-- - Descubre: elmundo.es/rss/deportes.xml
|
|
-- - Hereda: categoria_id=1, pais_id=44
|
|
-- - Crea en feeds directamente
|
|
|
|
-- 3. Resultado en tabla feeds:
|
|
SELECT id, nombre, url, categoria_id, pais_id, activo
|
|
FROM feeds
|
|
WHERE fuente_nombre LIKE '%El Mundo%';
|
|
|
|
-- id | nombre | url | cat | pais | activo
|
|
-- 1 | El Mundo - Portada | elmundo.es/rss/portada.xml | 1 | 44 | TRUE
|
|
-- 2 | El Mundo - Deportes | elmundo.es/rss/deportes.xml | 1 | 44 | TRUE
|
|
|
|
-- ✅ Feeds activos, ingestor procesando
|
|
```
|
|
|
|
### Ejemplo 2: Sitio Internacional (Revisión Manual)
|
|
|
|
```sql
|
|
-- 1. Añadir fuente SIN metadata
|
|
INSERT INTO fuentes_url (nombre, url)
|
|
VALUES ('Reuters', 'https://www.reuters.com');
|
|
|
|
-- 2. Worker ejecuta (15 min después):
|
|
-- - Descubre: reuters.com/rssfeed/worldNews
|
|
-- - Analiza: idioma=en, país=Reino Unido (dominio+idioma)
|
|
-- - Sugiere: categoría=Internacional (keyword "world")
|
|
-- - Crea en feeds_pending
|
|
|
|
-- 3. Resultado en tabla feeds_pending:
|
|
SELECT feed_title, detected_country_id, suggested_categoria_id, notes
|
|
FROM feeds_pending
|
|
WHERE fuente_url_id = 3;
|
|
|
|
-- feed_title | detected_country_id | suggested_cat | notes
|
|
-- Reuters World News | 74 (Reino Unido) | 2 (Int.) | "Country from domain..."
|
|
|
|
-- ⏳ Requiere aprobación en /feeds/pending
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ CHECKLIST: Añadir Nueva Fuente
|
|
|
|
**Para auto-aprobación (recomendado si sabes país/categoría):**
|
|
|
|
- [ ] Ir a `/urls/add_source`
|
|
- [ ] Ingresar nombre descriptivo
|
|
- [ ] Ingresar URL del sitio (NO del feed RSS)
|
|
- [ ] **IMPORTANTE:** Seleccionar categoría
|
|
- [ ] **IMPORTANTE:** Seleccionar país
|
|
- [ ] Ingresar idioma (opcional, se detecta)
|
|
- [ ] Guardar
|
|
- [ ] Esperar 15 minutos (máximo)
|
|
- [ ] Ver feeds en `/feeds/` (activos automáticamente)
|
|
|
|
**Para revisión manual (si no estás seguro):**
|
|
|
|
- [ ] Ir a `/urls/add_source`
|
|
- [ ] Ingresar nombre y URL
|
|
- [ ] Dejar categoría/país vacíos
|
|
- [ ] Guardar
|
|
- [ ] Esperar 15 minutos
|
|
- [ ] Ir a `/feeds/pending`
|
|
- [ ] Revisar sugerencias automáticas
|
|
- [ ] Ajustar categoría/país si necesario
|
|
- [ ] Aprobar feeds
|
|
- [ ] Feeds se activan inmediatamente
|
|
|
|
---
|
|
|
|
## 🎓 Resumen Ejecutivo
|
|
|
|
**3 Niveles de Automatización:**
|
|
|
|
| Nivel | Descripción | Cuándo Usar |
|
|
|-------|-------------|-------------|
|
|
| **Nivel 1: Totalmente Manual** | Descubrir en `/feeds/discover` | Control total, pocas URLs |
|
|
| **Nivel 2: Auto-aprobación** | URL con cat/país → feeds activos | URLs confiables, muchas fuentes |
|
|
| **Nivel 3: Revisión Asistida** | URL sin cat/país → análisis → aprobar | URLs nuevas, verificación |
|
|
|
|
**Flujo Recomendado:**
|
|
1. Añade URL con categoría/país si la conoces
|
|
2. Si no, déjalo vacío y revisa sugerencias automáticas
|
|
3. Worker descubre y analiza todo automáticamente
|
|
4. Tú solo apruebas/ajustas lo necesario
|
|
|
|
**Resultado:** Gestión eficiente de cientos de fuentes RSS con mínima intervención manual.
|
|
|
|
---
|
|
|
|
**📅 Fecha de última actualización:** 2026-01-07
|
|
**📌 Versión del sistema:** 2.0 - Análisis Inteligente de Feeds
|