💾 Archived View for texto-plano.xyz › sdemingo › blog › sobre-este-blog.md.gmi captured on 2023-11-14 at 08:02:05. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
Hace casi dos años que empecé a publicar este blog. Anteriormente he tenido otros, en otros formatos: Wordpress, Blogger, Github, etc. Centrados en temáticas concretas y siempre quedaban abandonados por pereza y desánimo de escribir generalmente. Asà que al replantearme lo de escribir de nuevo en mi blog me centré en dos aspectos sobre los que harÃa girar esto:
Los contenidos deberÃan quedar plasmados en simples archivos en formato Markdown y de ahà construir una página principal, un Ãndice de artÃculos ordenados por fecha y alguna cosa más que se me ocurriera. Me puse manos a la obra con un simple script de Python de 500 lÃneas[2] (que podrÃa ser mucho más limpio y compacto) surgió esta web.
Hoy he aprovechado a darle una capa de pintura nueva y actualizar algo la visualización. Asà que aprovechando que tengo el salón recién pintado vengo a hablaros de como funciona el invento y asÃ, quien le apetezca tener un rincón personal, sencillo y práctico en Internet puede copiarme la idea. El script de construcción tiene la siguiente funcionalidad:
La base principal de la web claramente es el blog. Cuando pensé en como organizar mis artÃculos querÃa que cada uno de ellos estuviera aislado en un fichero diferente en mi disco. QuerÃa además poder nombrar ese fichero usando una cadena de letras que hiciera referencia al tÃtulo. Nada de numerajos para la fecha. Usar fechas en formato numérico para nombrar ficheros utilizando el formato `AAAAMMDD` (siendo AAAA el año, MM el mes y DD el dÃa) es obviamente la solución más sencilla para tener perfectamente ordenados los ficheros del blog. Te soluciona fácilmente el problema de ir procesándolos en orden también, pues el sistema operativo le dará a Python una lista ya ordenada con ellos. Pero yo no querÃa este formato.
Asà que en un directorio guardo todos mis artÃculos nombrados con palabras y guiones y además, almaceno un fichero adicional donde relaciono la fecha de publicación de cada artÃculo y el nombre del fichero donde escribà el artÃculo. Asà tengo el problema solucionado. Algo similar a:
25/04/2022 articulo-inicial.md libros,pensamientos 23/07/2022 otro-articulo-mas-sobre-otra-cosa.md novedades 30/11/2022 seguimos-escribiendo.md novedades ...
En este fichero guardo también una serie de palabras clave o categorÃas que definen la temática del artÃculo y que irán reflejadas en el Ãndice final del blog. Están colocadas en la tercera columna, tras el nombre del fichero de cada artÃculo. Para convertir cada documento Markdown en HTML simplemente utilizo la librerÃa Markdown[4] de Python. Y tras obtener el HTML en crudo le aplico una plantilla para adornarlo con la estructura HTML básica que quiero para mi artÃculo. Esto lo hago usando objetos `Template`. Evidentemente tengo guardado los ficheros plantilla en otro directorio aparte.
rawhtml = markdown.markdown(mdcontent) html=postTemplate.substitute(post=rawhtml,post_title=title) with open(HTML_ROOT + HTML_BLOG + "/" +mdfile+".html","w") as fh: fh.write(html) fh.close();
Cuando construà el blog querÃa también tener un feed RSS para permitir que todo aquel que quisiera pudiera suscribirse a mis actualizaciones. Para generarlo utilizo la librerÃa FeedGenerator[5]. Esta librerÃa es muy sencilla de usar y basta con ir artÃculo a artÃculo construyendo una entrada nueva en el feed con los datos que nos interesen de cada artÃculo:
for fileInfo in files: fe = fg.add_entry() url="http://"+urllib.parse.quote("panicerror.org/blog/"+fileInfo[0]+".html") fe.id(url) fe.title(fileInfo[1]) tdate=datetime.strptime(fileInfo[2],"#d/%m/%Y").replace(tzinfo=timezone.utc) fe.published(tdate) fe.updated(tdate) fe.content(fileInfo[5],type="html") fe.link(href=url)
Al principio no metÃa el texto completo de los artÃculos en el feed simplemente por no llenarlo en exceso pero luego cambié de opinión. Yo mismo soy de los que les gusta leer nuevos post directamente en el lector de feeds y no me gusta que me obliguen a salir de el, asà que cambié y ahora meto todo el contenido del artÃculo.
Una cosa que añadà más tarde es los últimos libros que he leÃdo. Estos los saco de mi feed de Goodreads. El feed lo obtengo a través de una url con todas mis lecturas que proceso con BeautifulSoup[6]. Esta archiconocida librerÃa es una de las mejores a la hora de *scrapear* fácilmente contenido web. Simplemente busco etiquetas con la clase `item` y de ahà extraigo los diferentes atributos de cada lectura: el tÃtulo, el autor, incluso la imagen de portada.
for item in soup.findAll("item"): title=item.title.text imglink=item.book_medium_image_url.text booklink=item.link.text author=item.author_name.text description=item.book_description.text read_at=item.user_read_at.text reads.append((title,author,imglink,booklink,description,read_at))
Todo esto lo querÃa también publicar en mi cápsula Gemini que tengo alojada en el tilde hispanohablante TextoPlano[7]. Para convertir a Gemtext cada archivo Markdown simplemente utilizo la librerÃa md2gemini[8]. Al principio yo mismo hacÃa la conversión pero resulta más sencillo utilizar esta librerÃa porque reconoce casos que yo no llegaba a terminar de procesar.
gemini = md2gemini(markdown, links="at-end")
La generación del Ãndice en la cápsula gemini lo realizo usando el mismo proceso de plantillas o *templates* que uso para la publicación en HTML.
El script es tremendamente artesanal y no creo que pueda ser utilizado directamente por nadie pero pongo todo esto por aquà por si os sirve de inspiración para crear vuestra propia web autoalojada. Existen multitud de generadores sencillos que os permitirán hacer cosas parecidas de forma mucho más profesional como Pelican, Github Pages, o Codeberg. Pero a mi, personalmente me encanta haber perdido el tiempo en hacerme mi propio apaño.
1: https://web0.small-web.org/
2: https://github.com/sdemingo/web/blob/main/build
3: https://geminiprotocol.net/docs/es/faq.gmi
4: https://pypi.org/project/Markdown/
5: https://pypi.org/project/feedgenerator/
6: https://www.crummy.com/software/BeautifulSoup/bs4/doc/
8: https://pypi.org/project/md2gemini/
---
Noviembre 2023