Existe um caminho para obter um post cozido, mas sem oneboxes renderizadas?

Para um gerador externo de artigos instantâneos do Facebook, precisamos do HTML dos posts já processado, mas sem as oneboxes renderizadas…

Já existe alguma rota ou endpoint de API para posts como esse?

Talvez isso possa ajudar GitHub - discourse/raw-post-button · GitHub

Olá @adopilot, muito obrigado pelo seu feedback. Poderia, por favor, detalhar?

Parece ser um componente para visualizar a postagem bruta.

Estamos procurando algo para renderizar uma postagem formatada, mas sem os oneboxes.

Peço desculpas, achei que você precisasse do post bruto. Mais tarde percebi que estava errado e que já havia sido postado.

Alguém? Isso pode ser feito de alguma forma?

Ei @Terrapop

Você pode criar um plugin para ocultar (ou remover) o elemento DOM da One Box quando a string do User Agent da solicitação corresponder à string do User Agent do bot do FB.

Espero que isso ajude.

Você precisará fazer o pós-processamento do HTML; as postagens processadas já contêm todo o HTML das oneboxes expandidas.

Esse é exatamente o problema. Como as postagens processadas (cooked) contêm os oneboxes (que não possuem mais os links de mídia originais; apenas o raw tem os links originais), não conseguimos transformá-las em um formato válido para a IA do Facebook.

O Iframely está gerando IFRAMEs válidos para IA a partir dos links independentes. Tentamos usar as postagens raw com um parser de Markdown em PHP (Markdown-It para PHP) mais o Iframely para os links independentes, mas o parser de Markdown do Discourse faz muito mais do que isso, e não queremos replicar toda a mágica que o Discourse aplica ao Markdown. Assim, estamos buscando um caminho para obter as postagens processadas (cooked), mas sem os oneboxes já processados (já que queremos pós-processá-los via Iframely).

Nossa abordagem atual funciona para postagens simples, ou seja: pegar o raw como base, usar o PHP Markdown-It para transformar em HTML, usar o Iframely para gerar cards de mídia válidos para IA (os oneboxes não são), e então transformar o HTML em HTML válido para a IA do Facebook e transmitir via o SDK PHP do Facebook. No entanto, como o Discourse aplica muitas regras adicionais ao parsing do Markdown, seria ótimo conseguir obter o HTML já processado diretamente do Discourse, mas apenas sem os oneboxes.

Você não precisa publicar seu post fora do Discourse. Basta fazer monkey patch no método responsável e excluir a parte onde os oneboxes são gerados. Ideia geral.

Bem, não queremos alterar o comportamento de renderização em geral no Discourse, mas precisamos de um endpoint (API) que gere uma postagem renderizada sem oneboxes (mas mantendo os links originais autônomos, por exemplo, como hrefs).

Basta ocultar ou remover o elemento DOM. É uma tarefa bastante simples.

  1. Compare a string do User Agent com Ruby e defina um booleano em caso de correspondência.
  2. Use JavaScript para ocultar o elemento DOM se o booleano for verdadeiro.

Essa é basicamente a maneira “padrão” de fazer isso e tarefas semelhantes, onde um desenvolvedor não deseja mostrar (ou deseja remover) qualquer elemento DOM.


**Nota:

O uso da gem Ruby ‘gon’ torna muito simples passar qualquer variável Ruby para JavaScript, mas eu só a utilizei em um aplicativo Rails, não com EmberJS na pilha (de qualquer forma, existem muitas maneiras de passar uma variável Ruby para JS).