Plugin Gatsby para usar o Discourse como CMS headless

Criei um plugin, não para o Discourse, mas para o Gatsby. O plugin busca listas de tópicos de uma instalação do Discourse e as transforma em nós do Gatsby. Ele simplifica o uso do Discourse como um CMS headless.

Usamos isso em um projeto para criar um microblog e um calendário que se atualiza automaticamente quando novo conteúdo é adicionado ao fórum.

Aqui está o microblog:

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

E, aqui está o calendário:

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

Espero que alguém mais encontre útil!


npm version npm downloads

gatsby-source-discourse-topic-list ajuda você a buscar listas de tópicos da plataforma de fórum de discussão Discourse e transformá-las em nós do Gatsby.

Além da lista de tópicos fornecida pela API do Discourse, o plugin também busca o texto bruto de cada tópico.

Começando

  1. Instale o pacote com yarn ou npm

yarn add gatsby-source-discourse-topic-list

  1. Adicione aos plugins no seu gatsby-config.js
module.exports = {
    plugins: [
        {
            resolve: "gatsby-source-discourse-topic-list",
            options: {
                url: "https://meu-servidor-discourse.com"
                endPoint: 'top.json',
            }
        }
    ]
};

Opções

Nome Tipo Descrição
url objeto ou string Obrigatório. URL da sua instalação do Discourse como uma string. Se você tiver duas APIs diferentes para desenvolvimento e produção, defina um objeto com as chaves production e development.
endPoint string Obrigatório. Qualquer endpoint da API do Discourse que retorne uma topic_list.
rootKey string Opcional. Nomeie sua API.

Exemplos de endpoints da API do Discourse

Tópicos mais recentes em uma categoria:

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

Tópicos mais recentes em uma categoria, filtrados por tag:

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

Tópicos principais em uma categoria:

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

Veja a documentação da API do Discourse para uma lista completa de endpoints.

Exemplo de resultado

Observe o campo raw adicionado contendo o texto completo do tópico do post sem processamento.

{
  "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": "O texto completo do tópico sem processamento no formato markdown", 
        ...
      }
    ]
  }
}

Múltiplas Fontes? Múltiplas Instâncias!

Se você deseja buscar vários endpoints no seu projeto, basta instanciar o plugin várias vezes. Apenas certifique-se de definir uma rootKey diferente para cada instância.

Créditos

Este plugin é baseado no excelente gatsby-source-custom-api de Andreas Faust. :folded_hands:

Contribuindo

Toda contribuição é muito apreciada.
Sinta-se à vontade para reportar bugs, recursos e solicitações de pull.

:heart: Se este plugin for útil para você, dê uma estrela no GitHub.

11 curtidas

Isso parece legal. Isso funciona com tópicos de categorias privadas? Estou falando do cenário de usar o Discourse como um CMS headless.

2 curtidas

Atualmente não, mas é uma boa ideia. Não seria difícil adicionar. O acesso a conteúdo privado requer autenticação. Um nome de usuário e uma chave de API poderiam ser adicionados ao arquivo de configuração do Gatsby.

2 curtidas