66 lines
1.7 KiB
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>"
|
|
}
|