🐦 Pinzón Aggregator


Descargar pinzon.sh (Última versión: **v6.3**)

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