terranova/gemfeed.awk

66 lines
1.7 KiB
Awk

# genera atom feed desde índice gemini
#
# modo de uso:
# awk -f gemfeed.awk -v url=gemini://blabla/ index.gmi > atom.xml
#
# index.gmi: índice gemini de acuerdo a la especificación
# atom.xml: atom feed correspondiente
BEGIN{
# número de entry
n = 0
}
# primera línea, extrae el título de la feed
NR == 1 {
# borra el "# " del inicio
sub("#[[:blank:]]+","",$0)
titulofeed = $0
}
# links con fecha
# regex sencilla: "líneas cuyo tercer campo sea una fecha YYYY-MM-DD"
# $3 ~ /[0-9]{4}-[0-9]{2}-[0-9]{2}/{
# regex completa de acuerdo a la spec (?) :
$0 ~ /^=>[[:blank:]]*[[:graph:]]+gmi[[:blank:]]+[0-9]{4}-[0-9]{2}-[0-9]{2}.+$/{
# borra flecha del inicio
sub("^=>","",$0)
# el primer campo es el nombre del archivo/link
archivo[n] = $1
# el segundo campo es la fecha YYYY-MM-DD
fecha[n] = $2
# del tercer campo en adelante son el título de la entrada.
# concatena los elementos que corresponden al título
titulo = $3
for(i=4; i<=NF; i++){
titulo = titulo" "$i
}
title[n] = titulo
# aumenta el índice de la "entry"
n++
}
END{
# genera la atom feed
print "<?xml version='1.0' encoding='UTF-8'?>"
print "<feed xmlns='http://www.w3.org/2005/Atom'>"
print ""
print "<id>"url"</id>"
print "<title>"titulofeed"</title>"
print "<updated>"strftime("%Y-%m-%dT12:00:00Z")"</updated>"
print "<link href='"url"atom.xml' rel='self'/>"
print "<link href='"url"' rel='alternate'/>"
print ""
# por cada entrada
for(i=0; i<n; i++){
entryurl=url archivo[i]
print "<entry>"
print "<id>"entryurl"</id>"
print "<title>"title[i]"</title>"
print "<updated>"fecha[i]"T12:00:00Z</updated>"
print "<link href='"entryurl"' rel='alternate'/>"
print "</entry>"
print ""
}
print "</feed>"
}