RSS-Funnel. Uno para controlarlos a todos

· 5 min · @Self-Hosting · #VPS #Docker

No sé si lo habréis notado vosotros, pero escuchar podcast sobre tecnología, informática y dockers puede ser perjudicial para la salud y por extensión para vuestros servidores, o es solo una cosa que me pasa a mí solo?

Si os preguntaréis a qué viene esta afirmación, podéis seguir leyendo y todo quedará aclarado.

Uno de mis podcast favoritos, es el de uGeek, si leéis mis artículos, os daréis cuenta, porque muchas de las ideas y modificaciones que hago en mi servidor salen de escuchar sus podcast. Además, da a conocer smuchas aplicaciones que seguramente para el resto de los mortales son desconocidas, pero que cuando las conoces, pues no están tan mal y te pueden servir de ayuda como ha sido con la que explicaba él en este podcast.

Dicha aplicación es rss-funnel, que se la puede definir como un concentrador de podcas y así tener todos los feeds en uno solo y que puedes, primero tener en tu propio servidor y segundo, lo puedes controlar tú.

Si solo escuchas un solo podcast, pues no te ayudará mucho, pero si sigues unos 10, como es mi caso, pero si eso no es nada, para mí ya son muchos 😉 pues no viene nada mal la aplicación que nos aconseja uGeek, y lo mejor de todo, es que puedes disponer de ella en docker. Qué más se puede pedir.

Así que me lancé a por su instalación en el VPS que tenía (Google Cloud). La instalación es muy fácil, como todo en docker, aunque la configuración es un poco rebuscada, pero nada del otro mundo:

docker-compose.yml

rssFunnel:
  image: ghcr.io/shouya/rss-funnel:latest
  container_name: rssFunnel
  ports:
    - 4080:4080
  volumes:
    - ${HOME}/config/rss-funnel/funnel.yaml:/funnel.yaml
  environment:
    RSS_FUNNEL_CONFIG: /funnel.yaml
    RSS_FUNNEL_BIND: 0.0.0.0:4080

En mi caso, he cambiado el nombre del servicio y el nombre del contenedor, esto es porque lo voy a utilizar con traefik y así es más fácil a la hora de añadir los labels que afectan a traefik.

Una vez tienes el docker-compose.yml, solamente hacen falta las palabras mágicas:

usuari@debian:~$docker compose up -d rssFunnel && docker logs -f rssFunnel

La segunda instrucción siempre la pongo, porque así, puedo ver si el docker me da algún error. Que normalmente siempre me pasa, porque como nunca creo los ficheros que el contenedor necesita, pues. En este caso, el fichero que me faltaba era el funnel.yaml con toda la configuración de los podcast a seguir.

En mi caso, es la siguiente (que te puede servir de base a ti):

funnel.yaml

endpoints:
  - path: /rss_feed.xml
    source:
      format: rss
      title: Mi Feed de Podcasts que sigo.
    filters:
      - merge:
          source:
            - https://anchor.fm/s/5a5b39c/podcast/rss
            - https://anchor.fm/s/81022ad4/podcast/rss
            - https://anchor.fm/s/1218850/podcast/rss
            - https://feeds.redcircle.com/610e9ea8-edf0-407f-9e6c-72375a0e17db
            - https://anchor.fm/s/115eb3dc/podcast/rss
            - http://feeds.feedburner.com/papafriki
            # se que ya no existe, pero tiene algunos podcast que son geniales
            - https://podcastlinux.com/feed
            - https://anchor.fm/s/baa8920/podcast/rss
            - https://ugeek.github.io/podcast.xml
      # aqui indico los campos que no quiero que se carguen en el RSS para asi aligerar el peso del XML
      - js: |
          function modify_post(feed, post) {
            post.description = null;
            post.content = null;
            post.author = null;
            post.categories = [];
            post.comments = null;
            post.link = null;
            post.guid = null;
            post.source = null;
            post.extensions = {};
            post.itunes_ext = null;
            post.namespaces = {};
            post.dublin_core_ext = null;

            return  post;
          }
      # lo que intento aqui, es que como maximo me cargue 100 episodios de cada podcast, pero que no funciona
      - modify_feed: feed.items = feed.items.slice(0, 100);

En mi caso, añadí una opción para limitar los podcast que rss-funnel iba a añadir en el feed. Quería que fueran solamente 100, porque como añada los 550 que tiene atareao, el feed ocuparía 10Mb.

Había añadido, según la documentación era la que se tiene que usar modify_feed: feed.items = feed.idtems.slice(0, 100); pero como podía comprobrar, no funcionaba correctamente. Así que, siguiendo el consejo de uGeek fui a preguntar directamente a la fuente para saber, como se tenía que hacer, me respondió y me añadió una modificación, que le agradezco mucho, la modificación para el fichero funnel.yaml además de otras modificaciones:

funnel.yaml (modificado)

endpoints:
  - path: /rss_feed.xml
    source:
      format: rss
      title: Mi Feed de Podcasts que sigo.
    filters:
      - merge:
          source:
            - https://anchor.fm/s/5a5b39c/podcast/rss
            - https://anchor.fm/s/81022ad4/podcast/rss
            - https://anchor.fm/s/1218850/podcast/rss
            - https://feeds.redcircle.com/610e9ea8-edf0-407f-9e6c-72375a0e17db
            - https://anchor.fm/s/115eb3dc/podcast/rss
            - http://feeds.feedburner.com/papafriki
            - https://podcastlinux.com/feed
            - https://anchor.fm/s/baa8920/podcast/rss
            - https://ugeek.github.io/podcast.xml
          # MODIFICACIÓ PER A LIMITAR A 100 EPISODIS A CADA PODCAST
          filters:
            - modify_feed: feed.items = feed.items.slice(0, 100);
      # MODIFICACIÓ PER ELIMINA INFORMACIO NO NECESSARIA A VISUALITZAR AL FEED
      # AMB AIXO ACONSEGUIM UN FEED AMB POC PES
      # QUE SI FAS SERVIR DES DE UN MOVIL, SEMPRE VA BE
      - modify_post: |
          post.description = null;
          post.content = null;
          post.author = null;
          post.categories = [];
          post.comments = null;
          post.link = null;
          post.guid = null;
          post.source = null;
          post.extensions = {};
          post.itunes_ext = null;
          post.namespaces = {};
          post.dublin_core_ext = null;

Con esta pequeña modificación, ya tengo el servicio en funcionamiento.

Lo único que me quedaba por hacer era decidir como acceder al feed. Si a través de un proxy Cadddy o a través de una VPN WireGuard. Al final me decidí por el proxy a través de Caddy y de momento me funciona perfectamente. Y además, el fichero XML que me descarga es de menos de 1Mb. No se puede pedir nada más.

Estoy contento con este servicio, porque es inmejorable. Y como bien dice el título, y uno para controlarlos a todos, porque en un único feed tengo todos los podcast que sigo actualmente. Y en el caso de que quiera añadir uno más, solo lo tengo que añadir en el fichero YAML y a funcionar.

Aún le falta alguna mejoras, pero creo que creador está con ello y eso sí, si tienes cualquier duda te ayuda siempre (fue mi caso).

◇ Referencia