Cómo guardar un hilo completo de Reddit con JavaScript

¿Querés guardar un post de Reddit con sus comentarios y verlo ordenado, sin tener que lidiar con toda la interfaz de la web? Con un pequeño script en JavaScript podés obtener la información del post y recorrer los comentarios desde la consola del navegador.

La idea es bastante simple: el script toma la URL del hilo, consulta el endpoint JSON de Reddit, procesa el post original y después recorre los comentarios respetando sus niveles de respuesta.

Qué hace el script

El script obtiene la información de un post de Reddit y genera un texto plano con los principales datos del hilo:

  • Autor.
  • Fecha.
  • Título.
  • Contenido del post.
  • Comentarios y respuestas.
  • Enlace al hilo original.

En lugar de navegar por cada comentario desde la interfaz, el código transforma la estructura que devuelve Reddit en un texto más fácil de leer, guardar o procesar.

Cómo funciona paso a paso

  1. Lee la URL: obtiene el subreddit y el ID del post directamente de la dirección que tenés abierta en el navegador.
  2. Consulta a Reddit: construye una URL con el formato https://www.reddit.com/r/[subreddit]/comments/[postId].json.
  3. Procesa el post: extrae el autor, la fecha, el título y el cuerpo del post.
  4. Procesa los comentarios: una función recursiva recorre los comentarios y sus respuestas, manteniendo la jerarquía mediante indentaciones.
  5. Arma el texto final: combina el post, los comentarios y el enlace de origen.
  6. Muestra el resultado: imprime todo en la consola del navegador.

Para qué puede servir

Una herramienta así puede ser útil en distintas situaciones.

Guardar discusiones

Si encontraste un hilo interesante y querés conservarlo como texto, podés extraer su contenido sin tener que copiar manualmente cada comentario.

Analizar conversaciones

Al tener el hilo en texto plano, resulta más sencillo procesarlo con otras herramientas para buscar palabras, detectar temas recurrentes o revisar cómo se desarrolla una discusión.

Preparar resúmenes

El resultado también puede servir como entrada para otra herramienta que necesite trabajar sobre el contenido de una conversación de Reddit.

Revisar hilos largos

Cuando un hilo tiene muchas respuestas, disponer del contenido en un formato lineal puede resultar más práctico que recorrer continuamente la interfaz.

Ejemplo rápido

Supongamos que estás viendo un post como este:

https://www.reddit.com/r/javascript/comments/123abc/mi_proyecto_en_js/

Al ejecutar el script desde la consola del navegador, el resultado tendrá una estructura similar a esta:

POST ORIGINAL
User123
8/14/2025, 9:18:00 PM
Mi proyecto en JS
Este es mi nuevo proyecto en JavaScript, ¿qué opinan?

COMENTARIOS
DevGuru
8/14/2025, 9:20:00 PM
¡Buen trabajo! ¿Usaste alguna librería específica?

  CodeNinja
  8/14/2025, 9:25:00 PM
  Me gusta, pero probá con TypeScript para más seguridad.

User456
8/14/2025, 9:30:00 PM
Gran idea, pero el diseño podría mejorar.

Fuente: https://www.reddit.com/r/javascript/comments/123abc

La diferencia importante es que las respuestas aparecen indentadas. De esa manera podés distinguir visualmente quién respondió al comentario anterior y quién inició una nueva rama de la conversación.

Ideas para modificarlo

El script original es bastante sencillo de ampliar. Algunas modificaciones posibles son:

Guardar en un archivo .txt

En lugar de imprimir el resultado únicamente en la consola, podés modificar el código para generar un archivo de texto y descargarlo.

Esto resulta práctico si querés conservar varios hilos y trabajar con ellos después.

Mostrar el resultado en una página web

Otra posibilidad es tomar el texto generado y colocarlo dentro de una página HTML.

Así podrías agregar títulos, separación visual entre comentarios y otros elementos de formato sin depender de la consola.

Filtrar comentarios por palabras clave

También podés modificar el procesamiento para conservar solamente los comentarios que contengan determinadas palabras.

Por ejemplo, podrías buscar términos como error o bug en un hilo técnico largo y quedarte únicamente con las respuestas relacionadas.

Cosas a tener en cuenta

El código es deliberadamente sencillo y tiene algunas limitaciones.

  • Límites de consulta: Reddit aplica límites a las consultas realizadas contra sus servicios. Si vas a automatizar muchas consultas, hay que tener en cuenta esas restricciones.
  • URLs inválidas: el script supone que estás ejecutándolo sobre una URL de post con la estructura esperada.
  • Posts eliminados o respuestas no disponibles: determinados elementos pueden no estar disponibles en la respuesta obtenida.
  • Hilos muy grandes: una conversación con una enorme cantidad de respuestas puede requerir procesamiento adicional.
  • Mejoras posibles: se pueden agregar manejo de errores, contadores de comentarios, exportación a JSON o CSV y otras formas de filtrado.

La función recursiva es justamente la parte que permite recorrer las respuestas anidadas. Si un comentario tiene respuestas, la función vuelve a llamarse sobre ellas aumentando el nivel de indentación.

Script completo

(async () => {
  const urlParts = window.location.pathname.split('/');
  const postId = urlParts[4];
  const subreddit = urlParts[2];

  const apiUrl = `https://www.reddit.com/r/${subreddit}/comments/${postId}.json`;

  const response = await fetch(apiUrl);
  const data = await response.json();

  const post = data[0].data.children[0].data;
  const comments = data[1].data.children;

  function parseComments(commentsArray, depth = 0) {
    let result = '';

    for (const comment of commentsArray) {
      if (comment.kind !== 't1') continue;

      const c = comment.data;
      const date = new Date(c.created_utc * 1000).toLocaleString();
      const indent = '  '.repeat(depth);

      result += `${indent}${c.author}\n`;
      result += `${indent}${date}\n`;
      result += `${indent}${c.body}\n\n`;

      if (c.replies && c.replies.data) {
        result += parseComments(c.replies.data.children, depth + 1);
      }
    }

    return result;
  }

  let textoFinal = '';

  // Post original
  textoFinal += `POST ORIGINAL\n`;
  textoFinal += `${post.author}\n`;
  textoFinal += `${new Date(post.created_utc * 1000).toLocaleString()}\n`;
  textoFinal += `${post.title}\n`;

  if (post.selftext) {
    textoFinal += `${post.selftext}\n`;
  }

  textoFinal += '\nCOMENTARIOS\n';

  // Comentarios
  textoFinal += parseComments(comments);

  // Fuente
  textoFinal += `\nFuente: https://www.reddit.com/r/${subreddit}/comments/${postId}`;

  console.log(textoFinal);
})();

La gracia de este script está en que no intenta reemplazar Reddit, sino transformar la información de un hilo en un formato mucho más manejable. A partir de esa base podés agregar exportación de archivos, filtros, formatos diferentes o cualquier otro procesamiento que necesites.


¿Te gustó esta publicación?

Podés comentar, compartir la publicación, seguirme a través de mis redes sociales o fuentes RSS.