Markdown, BBCode e Emoji não renderizando em postagens da API

Estou usando a API do Discourse para atualizar uma postagem via PUT; as atualizações são feitas, mas apenas as tags HTML aceitas são analisadas. Markdown, BBCode e emojis não são renderizados corretamente. Estou passando a solicitação PUT com um tipo de conteúdo de application/json porque, na verdade, é uma carga útil JSON e é o único tipo de conteúdo que parece ser aceito para a solicitação PUT, apesar da documentação dizer que era uma das três opções.

Alguém tem alguma ideia de por que o mecanismo de renderização não está analisando as coisas quando as atualizações são feitas via API?

1 curtida

Eu daria uma olhada nos logs e também veria o que foi parar no campo de markdown bruto.

3 curtidas

Não vejo erros nos logs e o payload bruto é exatamente o que estou especificando na solicitação cURL que faz o PUT. Quando eu puxo a visualização JSON do tópico, eu vejo isto:


<p><img src="https://global.discourse-cdn.com/standard10/uploads/wysterialane/original/1X/284fb6069edededf16b0830d468eaf03bc261616.webp" alt="mother of god shades GIF" data-base62-sha1="5KBSuBIpIj3xlACzeZINBKw7wEu" width="262" height="200" class="animated"></p><br>Por que isso não funciona? :face_with_symbols_over_mouth: <br>

O GIF lá foi algo que coloquei no OP e o motor de renderização o traduziu para HTML e tudo está bem. Quando eu adiciono o <br>Por que isso não funciona? :face_with_symbols_over_mouth: <br> via API, o texto bruto é postado, mas o motor de renderização não faz nada com ele. Isso é um comportamento esperado? Acho que uma solução alternativa é fazer com que meu serviço formule o payload HTML completo e passe isso, o que é meio ruim.

Vale ressaltar também que tenho um serviço separado que publica em um thread de chat ao vivo via webhook de entrada e os emojis são renderizados corretamente no painel de chat. Isso parece ser específico da API de posts.

Emojis e HTML

Eu acho que o problema que você está enfrentando com shortcodes de emoji que estão envolvidos em tags HTML é o comportamento esperado. Ele pode ser reproduzido em uma postagem criada dentro do editor de postagens do Discourse. Por exemplo, :face_with_symbols_over_mouth: será renderizado como :face_with_symbols_over_mouth: dentro deste parágrafo.

Se eu usar tags p para criar um parágrafo em vez de depender do mecanismo de markdown para fazer isso, o shortcode não será renderizado. Por exemplo:

<p>Esta frase contém um shortcode de emoji :face_with_symbols_over_mouth:</p>

Esta frase contém um shortcode de emoji :face_with_symbols_over_mouth:

Markdown

O problema com a postagem de markdown via API parece solucionável, mas talvez complicado de trabalhar. Usando curl do terminal, algo como isto deve funcionar:

m="### este é um título
                                                                                                                                                           
Este é um parágrafo muito curto com alguma _ênfase_ em uma palavra.

Este é outro parágrafo com um emoji :slight_smile:

- este
- é
- uma
- lista
- não ordenada

Seguido por outro parágrafo.

1) e
2) uma
3) lista
4) ordenada"

curl -X POST "http://localhost:4200/posts.json" -H "Api-Key: $api_key" -H "Api-Username: simon" -F "title=Teste de Markdown um" -F "category=6" -F "skip_validations=true" -F "raw=$m"

O parâmetro skip_validations na solicitação acima está lá apenas para evitar erros como “corpo muito curto” ou “título duplicado” durante os testes. Ele ignora várias configurações do site (comprimento mínimo da postagem, entropia mínima do corpo, comprimento mínimo do título do tópico, etc.)

Não tenho certeza sobre o problema do BBCode. As tags BBCode que você está tentando renderizar funcionam quando adicionadas ao editor de postagens do seu site Discourse?

1 curtida