-- Leo's gemini proxy
-- Connecting to sl1200.dystopic.world:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini;lang=es-ES
2023-01-24
Tener un agregador de feeds hecho por mi mismo a partir de un archivo de texto, gemget y un script en BASH.
Creo un archivo de texto en el que en cada fila describo cada uno de los gemlogs o feeds que deseo agregar. Separados por comas introduciré tres campos: la url del gemlog o feed, el nombre en mayúsculas y la dirección "raiz" del gemlog.
Utilizo gemget como herramienta para descargar cada uno de los archivos índice de los feeds en una carpeta a tal efecto.
El script analiza los ficheros descargados. De cada línea de esos archivos, que son los links a los artículos en formato "=> url aaaa-mm-dd Título", extrae la fecha, el título y la url, que suele ser una url local del tipo "/gemlog/artículo.gmi" o "/artículo.gmi", casi nunca "gemini://dominio.com/gemlog/artículo.gmi". La dirección "raiz" suele tener el formato "gemini://dominio.com", "gemini://dominio.com/gemlog/" o similar.
El script une la url local de cada artículo con la dirección raiz obteniendo la url completa. Después publica, en el archivo agregador.gmi un listado con todas las entradas encontradas en cada gemlog, con el formato "=> url_completa_del_artículo aaaa-mm-dd AUTOR, Título del artículo"
Finalmente se ordenan de más nueva a más antigua todas las filas del archivo agregador.gmi e inserta una fila en blanco entre cada nuevo día.
Es muy fácil de instalar, sólo debes descargar el binario, hacerlo ejecutable y dejarlo en una carpeta incluída en el PATH.
Este es el script que utilizo, no es el mejor pero al menos lo comprendo. Te agradezco cualquier comentario o sugerencia que tengas. Si quieres usarlo estúdialo antes, cambia los nombres de archivos y carpetas y adáptalo a tus necesidades, de lo contrario no funcionará.
#!/bin/bash DESCARGAS=/home/usuario/bin/suscripciones/descargas/ FEED=/home/usuario/bin/suscripciones/feedsagrupados touch $FEED # Establecer la coma como el separador de campos IFS=',' # Extraer del archivo "feeds" en el que tendo el listado de feeds a agregar las url, nombre y raiz, \ y usar un bucle para que gemget descargue los archivos índice de cada feed a agregar while read -r line; do # Leer cada línea y asignar los valores a las variables "url" y "name" url=$(echo $line | awk '{print $1}') name=$(echo $line | awk '{print $2}') raiz=$(echo $line | awk '{print $3}') #Aplicar gemget gemget -q -d $DESCARGAS $url find $DESCARGAS -type f -exec sed -i "s/ / /g" {} \; # añadir $name a todas las líneas del archivo generado en descargas find $DESCARGAS -type f -exec sed -i "s/^\([^ ]* [^ ]* [^ ]*\) /\1 $name , /" {} \; # borro => de todo el archivo find $DESCARGAS -type f -exec sed -i "s/=> //g" {} \; # añado al principio de todas las líneas la raiz find $DESCARGAS -type f -exec sed -i "s|^|=> $raiz|" {} \; # creo archivo de feeds y borro los archivos descargados cat $DESCARGAS* >> $FEED rm $DESCARGAS* done < "feeds" # elimino cualquier línea que no tenga la fecha aaaa-mm-dd, elimino también algunos caracteres sed -i '/ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} /!d' $FEED sed -i 's/ -/ /g' $FEED sed -i 's/ : / /g' $FEED # ordeno el resultado y limito el número de líneas del archivo, lo guardo en el archivo resultado.gmi less $FEED | sort -r -k3 -t ' ' | sed '1i\### 📰 JUNTALETRAS, agregador de feeds.' | sed '300,$d' > \ /home/usuario/bin/suscripciones/resultado.gmi # añado una línea en blanco cada vez que cambia la fecha, una aportación de chatGPT 🙂 prev_date="" while read line; do current_date=$(echo $line | cut -d ' ' -f 3) if [ "$prev_date" != "$current_date" ]; then echo "" fi echo "$line" prev_date="$current_date" done < /home/usuario/bin/suscripciones/resultado.gmi > /home/usuario/gemini/content/juntaletras.gmi rm $FEED IFS=$'\ t\n'
Pues aquí hay un problema, no funciona con cron, así que deberás usar otro método. Se podría crear un servicio systemd, pero en mi caso he optado por usar el comando "nohup" para que se repita el script cada cierto tiempo, este es el comando:
nohup bash -c "while true; do /home/usuario/bin/suscripciones/script; sleep 7200; done" &
Las parte del script que agrupa las líneas por fecha añadiendo líneas en blanco es cosa de chatGPT. El nombre del agregador , "JuntaLetras" es también cosa de chatGPT.
-- Response ended
-- Page fetched on Fri May 17 01:43:58 2024