-- Leo's gemini proxy

-- Connecting to sl1200.dystopic.world:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es-ES

Publicación de respuestas a artículos en Gemini para cápsulas con servidor Agate

2023-01-05

#agate #bash

El objetivo es que las cápsulas que funcionan con servidor Agate tengan un método muy sencillo para que los visitantes puedan publicar comentarios a los artículos. Para ello me valgo de los registros que crea Agate al acceder a un documento que no existe, funcionaría así:


El visitante añade al final de la url del artículo que quiere comentar "/comment/" y después el contenido del comentario y su nombre. Esto crea un registro que puedo consultar con el comando journalctl.

El script Bash, programado con cron, filtra cada minuto el contenido del registro buscando líneas donde aparezca "gemini" y "/comment/". Esas líneas no son legibles para nosotros porque el cliente codifica el contenido de la url, así que determinados caracteres aparecen como un código. Por ejemplo los espacios en blanco aparecen como %20, las comillas %22...

Después se elimina todo el contenido del registro salvo la ruta del artículo comentado y el contenido del comentario.

El script decodifica entonces el mensaje para que sea legible, con el comando sed.

El script publica el comentario con este formato:

[AAAA-MM-DD HH:MM] [ruta/al/artículo.gmi]>>>[Texto del comentario. Autor del comentario]

Después yo puedo acceder al documento en el que se publican todos los comentarios, sabré cuando se publicaron, a qué artículo se refieren y podré responder a cada comentario.


Lo primero, debes asegurarte de que tu usuario tiene acceso a journalctl. Si no tienes los permisos necesarios deberás añadir tu usuario al grupo systemd-journal con el comando:

sudo usermod -a -G systemd-journal usuario

Este es el script en Bash para que los visitantes puedan publicar comentarios:

#!/bin/bash

# describo la función de decodificación de la url
function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }

# filtramos el contenido de los registros del último minuto y eliminamos lo que pueda ser problemático
comment=$(journalctl --since "1 min ago" | grep 'gemini' | grep '\/comment\/' | cut -d "\"" -f 2 | sed 's/%22//g' | sed 's/%5C//g' | sed 's/%7C//g' | sed 's/\;//g' | sed 's/\-//g' | sed 's|gemini://sl1200.dystopic.world||g' | sed 's|/comment/| \>\>\> |g' | sed 's/\//./g' )

# decodifico el contenido filtrado
decodedcomment=$( urldecode $comment )

# si el contenido está vacio finalizo el script para que no añada filas en blanco
if [ "$decodedcomment" = "" ];
	then exit
	else

# inserto el contenido decodificado, junto con la fecha, en la línea 13 del documento comentarios.gmi
sed -i "13i 💬 $(date +"%Y-%m-%d %H:%M") $decodedcomment" /home/user/gemini/content/comentarios.gmi

# inserto una fila en blanco tras el comentario recién publicado
sed -i '14i\ ' /home/user/gemini/content/comentarios.gmi

# limito el número de líneas del documento a 500
sed -i '500,$d' /home/user/gemini/content/comentarios.gmi
	fi

Das permiso de ejecución el script y lo programas con cron para que se ejecute cada cierto tiempo, lo mejor es que se haga cada minuto para que la persona que redacte el comentario lo vea publicado al cabo de pocos segundos. Recuerda que para que cron funcione bien las rutas descritas en el script deben ser absolutas, desde /home/...


Por lo que he probado parece que se pueden redactar comentarios con todo tipo de carácteres e incluso emoticonos.


Limitaciones

No hay un sistema que me notifique cuando alguien publica un comentario, aunque estoy en ello.

La longitud máxima de los comentarios viene dada por la longitud máxima aceptada para la url gemini. He estado haciendo pruebas y es posible publicar comentarios de hasta unos 700 caracteres. Creo que es más que suficiente.

Sólo puede escribirse un comentario por minuto, si se escriben varios o se repite el mismo se debe editar manualmente. No creo que sea un problema, la probabilidad de que dos personas redacten un mensaje en el mismo minuto es bantante baja, y si paso, pues lo edito.

No lo he probado en todos los clientes, es imposible, ya hay más clientes gemini que clientes web. Por ahora sé que funciona en Agate, Deedum, Lagrange, Geopard y Kristall. No funciona en Buran, parece que ese cliente no codifica la url.


Ejemplo de entrada de un comentario


url de un artículo cualquiera

url a la que añado un comentario

Aquí puedes ver cómo queda finalmente mi sección de comentarios



This work by SL1200 is licensed under CC BY 4.0


◄ BACK

🏠 Home

-- Response ended

-- Page fetched on Fri May 17 01:43:25 2024