Buscando imagens do onebox localmente

Olá a todos,

Criei um plugin que estende a funcionalidade onebox para um site muito utilizado pelos usuários do meu fórum.

Esse onebox também exibe uma imagem do site mencionado. Existe alguma maneira de armazenar a imagem localmente para que o onebox não quebre quando a imagem mudar no site de origem?

Vi que tal recurso está disponível no fórum, mas não consigo encontrar como acessá-lo no plugin que criei.

Muito obrigado antecipadamente! :smiley:


PS: Aqui está o repositório do GitHub do plugin que criei. Qualquer feedback sobre meu código será muito apreciado.

(É a primeira vez que programo em Ruby, vindo de um background de backend em NodeJS).

Onebox e Discourse farão isso nativamente, sem necessidade de plugins adicionais.

Você só precisa garantir que o site de destino gere as meta tags og apropriadas. Se houver algo a ser modificado para que isso funcione, será no site de destino, não no Discourse.

Por exemplo:

O site da BBC gera essas meta tags para cada página. O Discourse e o Onebox irão buscar o site_name, image, description e title e gerar o onebox.

Basta garantir que seu site de destino siga esse padrão, e você não precisará fazer mais nada.

Faz sentido fazer isso, pois assim seu site estará preparado para todas as pré-visualizações em outras plataformas também, como o Facebook.

Estou assumindo que você tenha controle ou influência sobre esse site, embora isso possa ser uma grande suposição!

Se isso não for possível, você terá que criar um mecanismo personalizado no Onebox capaz de reconhecer as particularidades desse site e fazer o crawling para obter os metadados apropriados. A biblioteca Nokogiri é a ferramenta adequada para essa tarefa.

Ele não gera :sweat_smile:

Infelizmente não :confused: E além disso, quero personalizar um pouco a visualização do onebox. Isso não seria possível se eu estivesse usando o mecanismo padrão.

Mas…
Eu já desenvolvi a extensão onebox. Ela faz todo o trabalho de busca e funciona muito bem!

A pergunta é: Como posso ter certeza de que a imagem buscada será armazenada localmente? Acredito que precise escrever algum código extra no plugin.

Algumas direções para explorar:

O Cooked Post Processor enfileira um job para fazer isso, veja:

O código dos jobs está aqui: discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Se você conseguiu retornar as imagens hotlinked ao post, as imagens atendem aos critérios e as configurações garantem que imagens externas sejam enviadas, isso deve funcionar.

image

Critérios aqui: discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Se isso ainda não estiver funcionando, mas você está exibindo com sucesso as imagens externas no onebox, minha suspeita é que as imagens não atendem aos critérios para serem enviadas.