Imagens do Onebox têm proporção incorreta

Já tentei isso com links de páginas de alguns sites diferentes do Wordpress, e o efeito é o mesmo:

Ambos os sites definitivamente têm tags OG válidas. As fontes das imagens são quadradas. Não estamos especificando as dimensões da imagem nas tags OG.

O exemplo acima funciona bem no depurador de compartilhamento do Facebook e no iFramely. Clique no link abaixo para vê-lo no iFramely.

Revisei todas as configurações de onebox e de imagem, mas não vejo nada que pareça relevante.

Percorri os guias de solução de problemas e configuração de onebox aqui, mas nada ajudou.

Imagino que deva ser algo nas nossas configurações do Discourse, ou no próprio Discourse.

1 curtida

Vamos ver como esse link fica nesta instância do Discourse:

Quando colei isso, o onebox na prévia mostrou brevemente a imagem com a proporção correta. Um ou dois segundos depois, ela ficou achatada.

Portanto, o que quer que esteja acontecendo não se limita à nossa instância do Discourse. Acho que podemos precisar especificar as dimensões da imagem nas tags OG, mas não pensei que isso fosse necessário.

2 curtidas

Então… algum progresso nisso? Ainda está acontecendo. Se houver alguma solução alternativa, me avise. Se estivermos fazendo algo incorretamente, me avise.

1 curtida

Relatório de status: isso ainda acontece. Quando eu colo um link em um novo tópico, inicialmente a imagem associada parece boa na pré-visualização. Mas assim que eu pressiono Enter ou a barra de espaço, a imagem fica achatada. Eu verifiquei os passos de solução de problemas do onebox novamente e revisei mais uma vez todas as configurações substituídas, sem sucesso. Isso é loucura.

1 curtida

Essa CSS poderia ser considerada subótima ou algum tipo de compromisso. Estou com pressa, mas talvez ela esteja forçando 16:9 no momento. Não é ótimo para logotipos quadrados :slight_smile:

Será que a altura poderia ser definida como automática? (Embora isso possa apresentar desafios para imagens em formato retrato)

A qual CSS você está se referindo? Quer dizer, você pode estar certo, mas estou tentando determinar se é algo que posso corrigir em nossa instância do Discourse, ou se é algo no código-fonte do Discourse.

De volta à mesa:

image

Essa é presumivelmente uma forma codificada, então você precisaria investigar o código para descobrir como ela é definida.

Quando 600 / 600, seu logo fica quadrado…

Aqui está:

1 curtida

Interessante. Existe algum código aí que faz suposições sobre uma imagem se ela for quadrada. Talvez eu tente uma imagem não quadrada.

Imagem não quadrada usada com todo o resto igual: sem problemas de proporção. Continuarei experimentando.

Seria:

image

Usa as dimensões e proporção originais.

Isso é removido durante o processo de cozimento.

1 curtida

As dimensões vêm do oembed:

https://hookproductivity.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fhookproductivity.com%2Fhelp%2Fintegration%2Fother-app-developers%2F

Que tem:

Acho que o bug aqui é que, se o tipo for “rich”, e não estivermos capturando toda a apresentação do payload html do oembed, devemos pular a adição de dimensões, pois não estamos interessados nesses dados.

Isso corrige:

diff --git a/lib/onebox/engine/standard_embed.rb b/lib/onebox/engine/standard_embed.rb
index e3175d6247..fc8c300d81 100644
--- a/lib/onebox/engine/standard_embed.rb
+++ b/lib/onebox/engine/standard_embed.rb
@@ -159,8 +159,9 @@ module Onebox
         @json_ld ||= Onebox::JsonLd.new(html_doc)
       end
 
-      def set_from_normalizer_data(normalizer)
+      def set_from_normalizer_data(normalizer, skip_dimensions: false)
         normalizer.data.each do |k, _|
+          next if skip_dimensions && k.in?(%i[width height])
           v = normalizer.public_send(k)
           @raw[k] ||= v unless v.nil?
         end
@@ -179,7 +180,8 @@ module Onebox
 
       def set_oembed_data_on_raw
         oembed = get_oembed
-        set_from_normalizer_data(oembed)
+        skip_dimensions = oembed.data[:type] == "rich"
+        set_from_normalizer_data(oembed, skip_dimensions:)
       end
 
       def set_json_ld_data_on_raw

No entanto, não tenho certeza de quais outros efeitos colaterais isso teria, sinalizando a equipe de experiência do membro, que dará uma olhada nisso no próximo mês.

Estou relutante em simplesmente adicionar meu patch, pois há muitas camadas e complexidade aqui, alguém precisa garantir que possamos adicionar o patch de uma maneira muito segura e testada.


Isso é pri-médio, pois o impacto desse bug é bastante amplo, dado que o wp-json o expõe.

1 curtida

Legal! Esses dados oembed parecem ser a pista definitiva. Curiosamente, a documentação do Wordpress (software) fala sobre oembed apenas em termos de sites Wordpress incorporando conteúdo de outros sites, não o contrário. No entanto, a documentação do wordpress.com (serviço) diz “Cada postagem, página, anexo e vídeo VideoPress hospedado no WordPress.com suporta o formato oEmbed através da nossa API pública oEmbed.” Portanto, é seguro presumir que o software Wordpress faz isso por padrão.

Revisei todas as configurações do Wordpress e não consegui encontrar nada relacionado a oembed, então parece que quaisquer suposições feitas pelo Wordpress estão embutidas no código.

A API oembed do Wordpress também explica por que não há referência às dimensões 600/338 em nenhum lugar no código-fonte da página, o que eu achei desconcertante anteriormente.

Concordo que qualquer correção possível para isso no Discourse pode ter muitos efeitos colaterais (possivelmente indesejados) e precisa ser testada antes de ser lançada.

Além disso, nem tenho certeza se este é um problema do Discourse. A dimensão incorreta ‘338’ vem do Wordpress. Parece-me que deveria haver uma maneira no Wordpress de substituir padrões relacionados a oembed como este. Planejo procurar um plugin do Wordpress que permita mais controle sobre oembed.

Obrigado!

Por outro lado, já que esses links funcionam bem no iFramely e em outros lugares, talvez isso realmente seja algo que deva ser alterado no Discourse.