Plugin de Gatsby para usar Discourse como CMS headless

He creado un plugin, no para Discourse, sino para Gatsby. Este plugin obtiene listas de temas de una instalación de Discourse y las transforma en nodos de Gatsby. Simplifica el uso de Discourse como un CMS headless.

Lo utilizamos en un proyecto para construir un microblog y un calendario que se actualiza automáticamente cuando se agrega nuevo contenido al foro.

Aquí está el microblog:

Origen: https://foodshift.se/t/forenade-inkop-nyheter-blogg/290/9
Resultado: https://forenadeinkop.se/blogg

Y aquí está el calendario:

Origen: https://foodshift.se/tags/c/events/13/forenade-inkop/l/agenda
Resultado: https://forenadeinkop.se (en la parte inferior)

¡Espero que a alguien más le resulte útil!


versión de npm descargas de npm

gatsby-source-discourse-topic-list te ayuda a obtener listas de temas de la plataforma de foros de discusión Discourse y transformarla en nodos de Gatsby.

Además de la lista de temas proporcionada por la API de Discourse, el plugin también obtiene el texto sin procesar de cada tema.

Primeros pasos

  1. Instala el paquete con yarn o npm

yarn add gatsby-source-discourse-topic-list

  1. Agrega a los plugins en tu gatsby-config.js
module.exports = {
    plugins: [
        {
            resolve: "gatsby-source-discourse-topic-list",
            options: {
                url: "https://mi-servidor-discourse.com"
                endPoint: 'top.json',
            }
        }
    ]
};

Opciones

Nombre Tipo Descripción
url objeto o cadena Obligatorio. URL de tu instalación de Discourse como cadena. Si tienes dos APIs diferentes para desarrollo y producción, define un objeto con las claves production y development.
endPoint cadena Obligatorio. Cualquier punto final de la API de Discourse que devuelva una topic_list.
rootKey cadena Opcional. Nombra tu API.

Ejemplos de puntos finales de la API de Discourse

Temas más recientes en una categoría:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/1.json',
}

Temas más recientes en una categoría, filtrados por etiqueta:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'tags/c/bug/1/pr-welcome.json',
}

Temas principales en una categoría:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/support/6/l/top.json',
}

Consulta la documentación de la API de Discourse para obtener una lista completa de puntos finales.

Ejemplo de resultado

Observa el campo raw agregado que contiene el texto completo sin procesar del tema.

{
  "users": [
    {
      "id": 0,
      "username": "string",
      "avatar_template": "string"
    }
  ],
  "topic_list": {
    "can_create_topic": true,
    "draft": {},
    "draft_key": "string",
    "draft_sequence": 0,
    "for_period": "string",
    "per_page": 0,
    "topics": [
      {
        "id": 0,
        "title": "string",
        "fancy_title": "string",
        "slug": "string",
        "raw": "El texto completo sin procesar del tema en formato markdown", 
        ...
      }
    ]
  }
}

¿Múltiples fuentes? ¡Múltiples instancias!

Si deseas obtener varios puntos finales en tu proyecto, simplemente instancia el plugin varias veces. Asegúrate de establecer una rootKey diferente para cada instancia.

Créditos

Este plugin se basa en el excelente gatsby-source-custom-api de Andreas Faust. :folded_hands:

Contribuir

Agradecemos mucho cualquier contribución.
Siéntete libre de reportar errores, solicitudes de características y pull requests.

:heart: Si este plugin te resulta útil, dale una estrella en GitHub.

11 Me gusta

Se ve bien. ¿Funciona esto con temas de categorías privadas? Me refiero al escenario de usar Discourse como un CMS headless.

2 Me gusta

Actualmente no, pero es una buena idea; no sería difícil agregarlo. El acceso a contenido privado requiere autenticación. Se podría agregar un nombre de usuario y una clave de API a la configuración de Gatsby.

2 Me gusta