"Después del juego es antes del juego"
Sepp Herberger

domingo, 29 de noviembre de 2020

Pasar a PDF el contenido de un blog de Blogger.

Tras 266 entradas he pensado que es un buen momento de hacer un backup de los datos del blog y tenerlos en una versión offline y legible.

Blogger tiene una función de backup, que genera un XML monstruoso, con una combinación de HTMLy XML para hacerlo visible en un navegador web, pero en un formato muy poco estructurado y que no incluye las imágenes. De todas maneras no es mala práctica bajar de vez en cuando este XML para tener una salvaguarda por si acaso.

Buscando en Internet, hay servicios online que te permiten convertir tu blog en un documento PDF o DOC, como BlogBooker, pero son de pago. Tienen un modo demo en que te permiten convertir varias entradas y la verdad es que quedan bastante bien.

Yo voy a intentar hacer algo mas modesto, pero que me salga gratis. Lo primero es descargar el XML del que hablamos antes, ya que ahí están todos los posts realizados al blog. La idea es extraer la URL de todas las entradas y convertirlas una a una en PDF.

1. Encontrar la URL de cada artículo del blog.

La URL de cada entrada del blog está dentro del galimatías del XML, probando y probando he logrado extraerlas todas con esta expresion regular de grep:
# grep -Eoi "'https://2tazasdelinux[^']+html'" blog-11-21-2020.xml
....
'https://2tazasdelinux.blogspot.com/2019/02/configuracion-e-impresion-con-impresora.html'
'https://2tazasdelinux.blogspot.com/2020/05/otra-herramienta-de-control-remoto.html'
'https://2tazasdelinux.blogspot.com/2020/05/otra-herramienta-de-control-remoto.html'
'https://2tazasdelinux.blogspot.com/2018/01/poner-las-aplicaciones-de-manjaro-en.html'
'https://2tazasdelinux.blogspot.com/2016/04/recopilar-mediante-puppet-de-forma.html'
....
Luego los ordenamos y eliminamos repetidos con:
#  grep -Eoi "'https://2tazasdelinux[^']+html'" blog-11-21-2020.xml | sort | uniq
2. Convertir una URL en un PDF claro y legible.

Con esto ya tenemos las URL de todas las entradas del blog. Ahora hay que iterar sobre ellas y convertirlas a PDF. Para ello usaremos wkhtmltopdf. El problema de convertirlas a PDF es que las páginas web son bastante barrocas entre cabeceras, pies, menús laterales, ventanas emergentes de aviso de cookies (maldigo desde aquí al que tuvo esa ocurrencia). Por ejemplo:
# wkhtmltopdf 'https://2tazasdelinux.blogspot.com/2020/11/usando-polkit-para-permitir-o.html' out.pdf
Genera un documento pdf como este:




La información está, pero es muy poco legible. Hay varios problemas que resolver:
  • El fondo del blog molesta visualmente: se puede quitar ejecutando wkhtmltopdf con la opción --no-background.
  • El texto no ocupa todo el ancho de la página: habría que modificar el diseño del blog para aumentar el ancho.
  • Los menús y paneles de la parte derecha de la página también molestan y deben ser ocultados.
  • El aviso de las cookies y la barra de navegacion superior también deberían desaparecer.
Para aumentar el ancho de la página y quitar los menús y paneles de la parte derecha hay que modificar el diseño del blog. Esto es muy personal, ya que cada uno tiene el tema de blog que le sale de las narices. En mi caso tengo el Simple Pale un poquitín personalizado. Antes de nada se aconseja hacer un backup del tema del blog, cosa que también se explica en el enlace que hemos pasado al principio del mensaje. Una vez hecho vamos a meternos a retocar el tema. Mostraré donde he tocado para despejar el mío:

Pinchando en Personalizar iríamos luego a Ajustar ancho y Diseño.
Ponemos el diseño en una sola columna:
Luego aumentando el ancho a 1200, nos quedaría:
Así queda bastante mas despejado. Todos los paneles laterales se han ido al final de la página y seguirían saliendo. Podríamos eliminar esos paneles sacándolos del diseño, pero veremos ahora otro sistema para ocultarlos.

Al hacer la captura nos aparece la ventanita de las cookies y la barra de navegacion superior. Eso no se puede quitar tocando el tema del blog, pero wkhtmltopdf permite ocultarlo por otra vía: el parámetro "--user-style-sheet estilo.css", que nos permite modificar los estilos de la página original antes de hacer la captura. Usando el siguiente fichero estilo.css nos libramos de ambas ventanitas y de todo lo que hay en el pie de la pagina (los antiguos paneles del lado derecho):
# cat estilo.css 
#cookieChoiceInfo { display: none; visibility: hidden; }
#b-navbar { display: none; visibility: hidden; }
#footer-1 { display: none; visibility: hidden; }
#footer-2-1 { display: none; visibility: hidden; }
#footer-2-2 { display: none; visibility: hidden; }
#footer-3 { display: none; visibility: hidden; }
Como vemos, seleccionamos diferentes elementos de estilo y los ocultamos. Evidentemente, hay que saber un poco de CSS para esto, pero no es complicado. Mirando en el diseño del Tema, podemos saber el nombre de muchos los elementos indeseables:

Para encontrar algún elemento rebelde (por ejemplo, la ventanita de las cookies), usando el Inspector de Página de Firefox es sencillo saber el nombre o clase CSS del objeto a ocultar (en nuestro caso son "#cookieChoiceInfo" y "#b-navbar".

Una vez afinado, lanzamos el wkhtmltopdf:
# wkhtmltopdf --no-background --user-style-sheet estilo.css 'http://2tazasdelinux.blogspot.com/2020/11/libro-digital-de-oxford-en-verde.html' out.pdf
Como se puede observar, esto tiene mucha mejor pinta:
Como ejemplo, aquí se puede descargar el fichero pdf resultante.

Bueno, pues el resto es pan comido: iterar sobre la lista de URL obtenidas en la primera parte y generar un pdf para cada una.
# cat blog-to-pdf 
#!/bin/bash

url="https://2tazasdelinux.blogspot.com/"
long=${#url}
backup="blog-11-21-2020.xml" # Backup XML del blog descargado desde Blogger

for url_entrada in $(grep -Eoi "'${url}[^']+html'" $backup | sort | uniq | tail -4)
do
  #A partir de la URL formamos un nombre legible para el fichero .pdf
  url_entrada=${url_entrada:1:-1} #Quitamos las comillas simples, dan problemas con wkhtmltopdf
  name=${url_entrada%.html}
  name=${name:$long}
  name=$(echo ${name}.pdf | tr '/' '-')
  echo "Descargando $url_entrada a $name"
  wkhtmltopdf --no-background --user-style-sheet estilo.css $url_entrada $name
done
exit 0
Pues con esto en un rato tenemos nuestro blog listo en PDF fáciles de leer. No olvidemos dejar el Tema del blog otra vez en orden al acabar la descarga de todos los artículos.

Out!

No hay comentarios:

Publicar un comentario