🐦 Pinzón Aggregator
Descripción
Pinzón Aggregator es un script Bash que agrega entradas de blogs y cápsulas Gemini, Gopher y Spartan. Descarga contenido, extrae las entradas más recientes y genera un archivo índice Gemtext con las últimas publicaciones.
Novedades en v6.3
- ✅ **Filtro de fechas futuras mejorado**: Solo acepta entradas con fechas **hasta hoy**
- ✅ **Registro de errores para fechas futuras**: Entradas con fechas posteriores a hoy se registran en `error.log`
- ✅ **Corrección de error octal**: Solucionado problema con meses/días que empiezan con `0` (08, 09)
- ✅ **Sistema de validación de fechas robusto**: Nueva función `is_valid_date()` con códigos de retorno específicos
Manual de Uso
Instalación
1. Guarda el script como `pinzon.sh`
2. Dale permisos de ejecución: `chmod +x pinzon.sh`
3. Ejecuta por primera vez para crear el archivo de feeds: `./pinzon.sh`
Ejecución
- Ejecución normal: `./pinzon.sh`
- Modo debug: `./pinzon.sh --debug`
Configuración
- `feeds.txt`: Lista de feeds a monitorear
- Caché: `~/.pinzon/pinzon.cache` (almacena últimas entradas)
- Salida: `index.gmi` (archivo generado)
- Logs: `error.log` (registra fechas futuras y errores)
Formato de feeds.txt
Cada línea debe seguir este formato:
URL|Nombre del Blog|Favicon Personalizado (Opcional)
Ejemplos:
gemini://ejemplo.com/gemlog/|Mi Blog Gemini|✨ gopher://ejemplo.com:70/1/blog/|Mi Blog Gopher|📂 spartan://ejemplo.com/blog|Mi Blog Spartan|🗡️ gemini://otro.com/|Otro Blog|
Sistema de Validación de Fechas
Rango Aceptado
- **Años**: `Año Anterior` y `Año Actual` (ej: 2024 y 2025)
- **Fecha máxima**: `Hoy` (no se aceptan fechas futuras)
- **Ejemplo** (si hoy es 2025-12-07):
* ✅ `2025-12-06` (ayer)
* ✅ `2025-12-07` (hoy)
* ❌ `2025-12-08` (mañana) → **error.log**
* ❌ `2026-01-01` (futuro) → **error.log**
Formato de Error en Log
[2025-12-07 10:30:45] ERROR: El Gemlog URL contiene una entrada con fecha futura, no procesada - (Título entrada - fecha)
Métodos de Detección de Entradas
1. Feeds Atom/XML
- Detección automática de feeds Atom
- Parsea elementos: `<entry>`, `<title>`, `<published>`, `<link>`
- Soporte para contenido CDATA
2. Fechas en Texto (Múltiples Formatos)
- **AAAA-MM-DD**: `2024-03-15`
- **DD-MM-AAAA**: `15-03-2024`
- **YYMMDD**: `240315` (6 dígitos)
- **AAAAjDDD**: `2024j075` (fecha juliana)
3. Enlaces Asociados
- Detecta enlaces `=>` cerca de las fechas
- Convierte enlaces relativos a absolutos automáticamente
- Asocia títulos con sus respectivos enlaces
4. Títulos en Líneas Siguientes
- Si no hay título en la misma línea que la fecha, busca en la siguiente línea
- Filtra líneas vacías, enlaces y otras fechas
Protocolos Soportados
- 🌐 **Gemini**: `gemini://` (con favicons automáticos)
- 📂 **Gopher**: `gopher://` (favicon: 📂)
- ⚔️ **Spartan**: `spartan://` (favicon: 🗡)
Sistema de Favicons
Automáticos
- **Gemini**: Busca `favicon.txt` en el directorio raíz
- **Gopher**: Usa `📂` por defecto
- **Spartan**: Usa `🗡` por defecto
Personalizados
- Se pueden especificar en `feeds.txt`
- Deben ser un solo carácter (emoji)
Sistema de Caché Inteligente
- Almacena la última entrada procesada de cada feed
- Solo descarga contenido si detecta cambios
- Evita procesamiento redundante
- Se almacena en: `~/.pinzon/pinzon.cache`
Sistema de Reintentos
- **3 intentos** por feed (configurable)
- **2 segundos** entre intentos (configurable)
- Usa **Lagrange** exclusivamente para todas las descargas
- Incluye descarga de favicons con reintentos
Requisitos Técnicos
- **Lagrange**: Cliente Gemini necesario para descargas
- **Bash**: Versión 4.0 o superior
- **Utilidades Unix**: grep, sed, awk, date
- **Sistema de archivos**: Permisos de escritura en directorio actual
Características Principales
- ✅ Soporte multi-protocolo (Gemini, Gopher, Spartan)
- ✅ Sistema de caché inteligente
- ✅ Reintentos automáticos (3 intentos por defecto)
- ✅ Detección múltiple de formatos de fecha
- ✅ Filtrado por año actual y anterior
- ✅ **Validación estricta contra fechas futuras**
- ✅ **Registro de errores para fechas futuras**
- ✅ **Corrección de errores octales (08, 09)**
- ✅ Límite configurable de entradas (84 por defecto)
- ✅ Favicons automáticos y personalizados
- ✅ Modo debug para diagnóstico
Ejemplos de Salida
Entradas Válidas
✓ 2025-12-06 - Título de la entrada Formato: AAAA-MM-DD, URL: gemini://ejemplo.com/entrada.gmi
Entradas Filtradas
Ignorando 15 entradas anteriores a 2024 ⚠ Ignorando 2 entradas con fechas futuras
Error Log
[2025-12-07 10:30:45] ERROR: El Gemlog gemini://ejemplo.com/ contiene una entrada con fecha futura, no procesada - (Título futuro - 2026-01-01)
Notas de Actualización
- **v6.3**: Filtro de fechas futuras, registro en error.log, corrección octal
- **v6.2**: Ejemplos con `/gemlog/` en lugar de `/blog/`
- **v6.1**: Soporte para fechas julianas (AAAAjDDD), mejor asociación de enlaces
- **v6.0**: Refactorización completa, sistema de caché, reintentos automáticos
Solución de Problemas
- **Error octal**: Si ves errores con "08" o "09", actualiza a v6.3
- **Fechas futuras**: Verifica `error.log` para ver entradas filtradas
- **Falta Lagrange**: Configura `LAGRANGE_PATH` o instala Lagrange
- **Modo debug**: Usa `./pinzon.sh --debug` para diagnóstico detallado
Licencia
UNLICENSE - Dominio Público