-- Leo's gemini proxy

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

-- Connected

-- Sending request

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

Programando con chatGPT un agregador de etiquetas para mi cápsula

2023-01-25

#AI #gemini #vps #bash

Objetivo

Crear una sección de búsqueda por etiquetas para los artículos de mi cápsula.

Experimentar si es posible programar algo muy sencillo con chatGPT


Metodología para "programar" con chatGPT

Tras probar chatGPT en varias ocasiones me he quedado con la idea de que si eres capaz de explicar de forma precisa lo que quieres que haga, es muy probable que el resultado sea óptimo. Es más, cuando se equivoca suele ser porque la petición es incorrecta o contiene ambigüedades. Casi me atrevería a decir que las escuelas de Ingeniería Informática bien podrían hacer que el alumnado dedicara parte de su tiempo a escribir con corrección, porque me temo que la tendencia será a un empleo cada vez mayor de lenguaje natural para programar.

En mi caso la entrada con texto natural que envié a chatGPT fue exactamente esta, después cambié las rutas:

> Dado un directorio "~/test/gemini" en el que hay un directorio "art", dentro del cual hay una serie de archivos .gmi. La primera linea de esos archivos .gmi contiene el titulo, la segunda la fecha en formato AAAA-MM-DD y la tercera linea contiene un listado de hashtags, por ejemplo " #noticias #educación #mac"

> Necesito un script en bash que haga esto:

> - Leer cada archivo .gmi del directorio "art"

> - Crear dentro de una nueva carpeta "~/test/gemini/tags" un archivo .gmi para cada hashtag encontrado, noticias.gmi, educación.gmi, mac.gmi...

> - Publicar en cada línea de esos nuevos archivos de la carpeta "tags" un link a cada uno de los archivos de la carpeta "art" que contienen el hashtag correspondiente y publicar junto al link la fecha y el título. El formato de cada línea de esa publicación debe ser "=> link_al_artículo_que_contiene_el_hastag AAAA-MM-DD Título del artículo"

Con esta petición se supone que obtendría el script que crearía un archivo .gmi por etiqueta, y en cada fila de esos archivos los correspondientes links a los artículos que contienen esa etiqueta. Y así lo hizo, como si nada. Despúes sólo tuve que crear manualmente un archivo índice con links a esos archivos que crea el script, lo repasé, ajusté un par de cosillas y ya está, agregador de etiquetas hecho:


Búsqueda por etiquetas


Script

Este es el script resultante tras algunos pequeños ajustes:

#!/bin/bash
rm /home/usuario/gemini/content/hashtags/*

# Iterar a través de cada archivo .gmi en el directorio "art"
for file in "$HOME/gemini/content/art"/*.gmi; do

    # Obtener el título del archivo
    title=$(head -n 1 "$file" | sed 's/## //')
    echo $title

    # Obtener la fecha del archivo
    date=$(head -n 2 "$file" | tail -n 1)
    echo $date

    # Obtener los hashtags del archivo
    hashtags=$( sed -n '3p' "$file" )
    echo $hashtags
    IFS=' #'
    read -r -a array <<< "$hashtags"
    for hashtag in "${array[@]}"; do

        # Crear un archivo .gmi para el hashtag si no existe
        if [ ! -f "$HOME/gemini/content/hashtags/$hashtag.gmi" ]; then
            echo "" > "$HOME/gemini/content/hashtags/$hashtag.gmi"
        fi

        # Insertar línea con la ruta al artículo, la fecha y el título en el archivo del hashtag
        echo "=> $file $date $title" >> "$HOME/gemini/content/hashtags/$hashtag.gmi"
    done
done

# Borro las líneas duplicadas
for file in $HOME/gemini/content/hashtags/*; do
    awk '!seen[$0]++' "$file" > "${file}_temp" && mv "${file}_temp" "$file"
done

# Ordeno por fecha todas las líneas de los archivos gmi creados para cada hashtag
for file in $HOME/gemini/content/hashtags/*; do
    sort -r -k3,3 "$file" > "${file}_temp" && mv "${file}_temp" "$file"
done

# Borro la parte de la ruta de la raiz al directorio de contenidos de mi servidor gemini
sed -i 's/\/home\/usuario\/gemini\/content//g' $HOME/gemini/content/hashtags/*

El script lo ejecuto manualmente cada vez que publico nuevos artículos. También se puede programar con cron.



This work by SL1200 is licensed under CC BY 4.0


◄ BACK

🏠 Home

-- Response ended

-- Page fetched on Fri May 17 06:25:47 2024