Skip to content

martirale/podcast-server-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Podcast Server Proxy

Express.js

Este proyecto es un servidor proxy creado en Express para obtener el contenido de la fuente RSS de Spotify Podcasters (o cualquier fuente RSS a priori) y ser utilizada en el reproductor web personalizado de podcasts de Creatyum Media.

Características principales

  • Obtención del contenido: Obtiene el contenido completo de la fuente RSS de tu proveedor de podcast.
  • Resolución de CORS: Resuelve el problema de CORS generado cuando tu front-end solicita directamente a la fuente el contenido empleando una técnica de proxy.
  • API propia: Al realizar la implementación obtienes el contenido exacto como lo proporciona tu proveedor con tu propio dominio y servidor, lo que te permite emplear tu propia API para alimentar tu proyecto.

Cómo usar

Requisitos

  • Node.js v20
  • NPM 10*
  • Git
  • Nginx Proxy Manager + Certbot*
  • PM2*

(*) Puedes usar PNPM, Yarn o el gestor de paquetes de Node.js que más prefieras. Nginx Proxy Manager y Certbot pueden ser reemplazados por Apache u otra tecnología de servidor para tus dominios y certificados SSL. PM2 es muy común para gestionar procesos en segundo plano en proyectos de Node.js pero puedes usar cualquiera que te guste más.

Instalación

  1. Clona el repositorio
git clone https://github.com/martirale/podcast-server-proxy.git
  1. Instala los paquetes de NPM
npm install
  1. Ajusta el puerto (o déjalo por defecto en 3010)
// server.js

const port = process.env.PORT || 3010;
  1. Ajusta tu fuente RSS (URL)
// server.js

const rssUrl = "YOUR RSS SOURCE";
  1. Ejecuta el servidor proxy (asegúrate de tener PM2 instalado globalmente en tu servidor)
npm install -g pm2
  • En el directorio raíz del proyecto de Express ejecuta el siguiente comando
pm2 start server.js --name podcast-proxy
  • Guarda el proceso con PM2
pm2 save
  1. Configura un dominio (o sub-dominio) para tu servidor proxy utilizando Nginx Proxy Manager y Certbot para el SSL y así poder utilizar la API en tu front-end sin riesgos de seguridad al utilizar directamente la IP del servidor o un protocolo HTTP plano.

Explicación

Express actúa como intermediario (proxy) entre el front-end (en mi caso, mi reproductor web) y la fuente de datos de Spotify (o el feed RSS de tu podcast).

Este servidor Express hace lo siguiente:

  1. Solicita el feed RSS desde Spotify utilizando rss-parser.
  2. Aplica cors para permitir que nuestro dominio acceda a la API sin restricciones.
  3. Reenvía el contenido al front-end como si fuera una API interna desde nuestro servidor.

Por lo que, estamos creando un intermediario que omite las restricciones de CORS. De esta forma, el navegador no interactúa directamente con Spotify (que no permite acceder a sus datos directamente), sino que con nuestro servidor, el cual está autorizado para hacer la petición y devolvernos los datos sin el mencionado problema de CORS.

¿Por qué?

La razón de esta solución es debido a un problema de CORS (Cross-Origin Resource Sharing). Este problema ocurre cuando el navegador bloquea solicitudes hechas desde nuestro dominio hacia otro dominio, ya que el otro dominio no está autorizado explícitamente para compartir recursos con nuestro dominio.

Tras una búsqueda bastante grande en foros y blogs e innumerables iteraciones con ChatGPT y Claude, logré una amalgama de configuraciones que tras limpiarlas y probarlas logré dar con esta solución y espero que pueda servir como solución para otros pérdidos como yo.

Descargo de responsabilidad

Esta solución está hecha y probada para funcionar correctamente con fuentes RSS y ha sido probada únicamente con la de Spotify Podcasters para ser usada en mi reproductor de podcast web propio y no doy garantía de que funcione con otras fuentes RSS. A priori, sí debería funcionar con cualquier fuente RSS ya que el servidor hace únicamente la función de proxy, por lo que dependerá de la lógica en tu front-end y en la estructura de la fuente RSS que estés empleando el cómo vas a trabajar los datos. Este servidor proxy es únicamente un intermediario que resuelve el problema de CORS mencionado con anterioridad.

About

Proxy server for fetch and CORS content from RSS sources.

Topics

Resources

License

Stars

Watchers

Forks