💾 Archived View for sl1200.dystopic.world › art › juntaletras_aggregator.gmi captured on 2023-12-28 at 15:12:43. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-01-29)

-=-=-=-=-=-=-

JuntaLetras, agregador de feeds en BASH con Gemget

2023-01-24

#aggregator #vps #gemini #bash #gemget #chatGPT #AI

Objetivo

Tener un agregador de feeds hecho por mi mismo a partir de un archivo de texto, gemget y un script en BASH.

Metodología

Gemget

Es muy fácil de instalar, sólo debes descargar el binario, hacerlo ejecutable y dejarlo en una carpeta incluída en el PATH.

Gemget, a command line downloader for the Gemini protocol

Script

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'

Programació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" &

chatGPT

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.

This work by SL1200 is licensed under CC BY 4.0

◄ BACK

🏠 Home