263 - FreshRSS, Wallabag, Bash y Rust
Mi migración desde Todoist hasta Wallabag, migrando de TinyTiny RSS a Miniflux y posteriormente a FreshRSS, junto con algo de Bash y Rust
Este episodio del podcast, es un episodio piloto, en tanto en cuanto, está grabado a lo Ángel de uGeek. Si te gusta, haré mas episodios del podcast en este formato. La cuestión es que hace unos días te hablé de como consumo las noticias, básicamente te hablé de agregadores de feed. Y esto es precisamente de lo que te vengo a hablar en este episodio del podcast.
Pero no solo de agregadores de feed, también te contaré sobre como hice la migración de mis páginas pendientes de visitar desde TodoIst hasta Wallabag. En fin, como ves todo una mezcla de temas variados, sin apenas relación entre si.
FreshRSS, Wallabag, Bash y Rust
De Tiny Tiny RSS a FreshRSS
Como sabes en un episodio reciente del podcast te hablé de Miniflux, en concreto en el episodio titulado leyendo tus noticias RSS con Miniflux. La cuestión de cambiar de Tiny Tiny RSS a Miniflux, era por probar otras alternativas, y teniendo que este segundo está implementado en Go, esperaba que la experiencia fuera mucho mas satisfactoria.
Sin embargo, otra alternativa a Tiny Tiny RSS me rondaba y era precisamente FreshRSS. Y es que aunque no estaba implementada en Go, sino que también está implementado en PHP, me llamaba mucho la atención. Y esto de que me llamara la atención, por supuesto, que es también responsabilidad de Ángel. Así que me decidí a darle una oportunidad.
Wallabag, otra servicio mas en la familia
Y ya que me ponía, ya que comenzaba a cambiar con el stack de servicios que utilizaba decidí, darle la oportunidad a otro servicio, que hasta el momento tampoco le había prestado suficiente atención. Lo cierto que es un servicio que he instalado en alguna ocasión, pero que no he llegado a utilizar durante mucho tiempo.
Sin embargo, me llamaba la atención que tanto Ángel de uGeek, como Fran de Batería 2%, le tuvieran tanto cariño.Algo estaba haciendo yo mal.
Como te he comentado en alguna ocasión, para esto de guardar las noticias que me interesa utilizaba TodoIst. La razón de utilizar una herramienta de productividad, es porque realmente esto marcaba los asuntos que me interesaban y la prioridad con la que los debía abordar.
Sin embargo, no hacía nada mas con estas noticias. Tampoco tenía tanto sentido a esta herramienta. Así, que decidí cambiar esta pieza en mi stack tecnológico, por una herramienta específica de marcado de url.
¿Que me aporta Wallabag?
La cuestión era saber que me iba aportar Wallabag frente a TodoIst. Y entonces me di cuenta que sería la experiencia en la lectura de las noticias. Wallabag, no solo guarda aquellas url que te resultan mas interesantes, sino que también guarda el contenido y lo depura, limpiándolo de elementos adicionales como CSS
o JavaScript
, que realmente no te aportan nada, y que en muchas ocasiones, lo único que hace es estropearte la experiencia de lectura.
Por supuesto, esta herramienta también me permite señalar aquellas noticias que son mas importantes, con lo que el beneficio es doble.
¿Como monté Wallabag?
Si, como te imaginabas lo monté con una imagen Docker y detrás de mi proxy inverso de cabecera Traefik. El docker-compose.yml
que utilizo es el siguiente,
version: '3'
services:
wallabag:
image: wallabag/wallabag
container_name: wallabag
env_file:
./wallabag.env
volumes:
- ./images:/var/www/wallabag/web/assets/images
- ./data:/var/www/wallabag/data
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.wallabag.entrypoints=http"
- "traefik.http.routers.wallabag.rule=Host(`wallabag.miservidor.es`)"
- "traefik.http.middlewares.wallabag-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.wallabag.middlewares=wallabag-https-redirect"
- "traefik.http.routers.wallabag-secure.entrypoints=https"
- "traefik.http.routers.wallabag-secure.rule=Host(`wallabag.miservidor.es`)"
- "traefik.http.routers.wallabag-secure.tls=true"
- "traefik.http.routers.wallabag-secure.tls.certresolver=myresolver"
networks:
proxy:
external: true
El archivo de variables de entorno wallabag.env
es el siguiente,
SYMFONY__ENV__DOMAIN_NAME=https://wallabag.miservidor.es
SYMFONY__ENV__SERVER_NAME="Mi instancia Wallabag"
La migración de TodoIst
El problema es como llevarme todos las url que tenía en TodoIst a Wallabag. Tampoco era cuestión de perderlas. Evidentemente, aquí necesitaba alguna herramienta que me echara una mano.
En este caso tiré mano de un cliente implementado en Python y un mini script en Bash, que unidos ambos me darían la herramienta que simplificaría mi vida a la hora de pasar enlaces de un lado a otro.
La herramienta Python a la que me refiero es wallabag-client, y su instalación es tan sencilla como ejecutar la siguiente instrucción directamente en un terminal,
pip3 install --user wallabag-client
Una vez instalada la herramienta, el siguiente paso es el script en bash,
#!/bin/bash
input=urls.txt
while IFS= read -r line;
do
echo $line
wallabag add $line
done < "$input"
En el archivo urls.txt
es donde se encuentran todas mis url que quería importar. Para exportar desde Todoist, había un enlace en el menú. Aunque, ahora que lo digo, no tengo claro, si esto lo hacía en un archivo JSON
o directamente como listado.
En cualquier caso, si era con un archivo JSON
seguro que utilicé la herramienta por defecto jq
sobre la que te hablé en tratar archivos json en Bash.
Mi propio cliente cli en Rust
Por supuesto, que esto no podía quedar así, tenía que dar un paso mas. Un script en Bash, está bien, pero yo quería mi propio cliente. Las opciones eran hacerlo en Python o en Rust. Y evidentemente, lo que que tenía que ser fue. Comencé con la primera versión de mi primera aplicación en Rust, wbcli
. Se trata de una aventura muy interesante, que te contaré en un tutorial que he decidido llamar El crustáceo crujiente, en honor a ese local del fondo del mar.
Esta herramienta, ya está disponible en crates.io como wbcli
, pero por el momento hace poquito… Pero las bases están puestas, ahora solo queda dedicarle un poco de tiempo y cariño para convertirla en una herramienta suficientemente potente para el terminal.
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.