Problema con Onebox y Youtube

p.ej.

La miniatura de YouTube no aparece en la lista de temas, por ejemplo, con el tema Fakebook o el plugin TLP.

Pasos para reproducir (STR):

Publicar un video de YouTube, cambiar al tema Fakebook y la miniatura no aparece.

Solución temporal:

Reconstruir la publicación y la miniatura aparece; sin embargo, dado que los usuarios esperan que la miniatura se muestre de inmediato sin intervención del personal, esta no es una buena solución.

Más información:

Topic.image_url parece ser nil.

Esto parece haberse roto recientemente, después de principios de agosto… Creo que funcionaba antes del 5 de agosto (aunque no estoy seguro de cuándo exactamente dejó de funcionar). He notado que esto coincide aproximadamente con una nueva versión de Onebox…

Lo probé en una versión anterior y el problema no estaba presente, lo que descarta respuestas og de YouTube (lo espero). Además, el tema Fakebook muestra el mismo comportamiento que el plugin TLP, lo que descarta al plugin TLP, por lo que sospecho que se trata de una regresión reciente en Discourse o Onebox.

Este es un problema real para los usuarios de Vistas Previas de la Lista de Temas.

4 Me gusta

Actualización: He realizado un Git Bisect y parece que este es el commit problemático:

3 Me gusta
diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb
index ac16eb82c16..46050a69e40 100644
--- a/lib/cooked_post_processor.rb
+++ b/lib/cooked_post_processor.rb
@@ -28,7 +28,7 @@ def initialize(post, opts = {})
     @cooking_options = @cooking_options.symbolize_keys
 
     @doc = Nokogiri::HTML::fragment(post.cook(post.raw, @cooking_options))
-    @has_oneboxes = post.post_analyzer.found_oneboxes?
+    @has_oneboxes = @doc.css("aside.onebox").count > 0
     @size_cache = {}

@nbianca, ¿por qué ya no utilizamos el método post.post_analyzer.found_oneboxes? aquí?

Todos los oneboxes que usan oembed o iframe fallarán con el nuevo modo de selector CSS, y eso también hace que nuestro detector de Onebox sea inconsistente en toda la base de código.

4 Me gusta

Estoy de acuerdo con @nbianca, esto parece un cambio increíblemente frágil. ¿Por qué se seleccionó este método?

2 Me gusta

El problema era que el First Onebox se otorgaba por cualquier enlace publicado, independientemente de si era o no un Onebox. Esto ocurre porque PrettyText añade class="onebox" a todos los enlaces y luego Oneboxer intenta analizar todos los enlaces con la clase onebox.

El cambio que realicé verifica si el documento final tiene algún Onebox (los Oneboxes son aside con la clase onebox). Lo revisaré nuevamente para ver qué y por qué está roto, y volveré con un cambio que solucione ambos problemas.

7 Me gusta

He realizado algunas mejoras aquí y he creado esta PR.

Acabo de probar la v2.3.2 y no parece que los enlaces de YouTube establezcan el atributo image_url del tema. La razón es que la imagen se extrae del atributo src de una etiqueta img, pero cuando se enlaza un video de YouTube, hay un <div> con un atributo CSS background-image.

¿Estás seguro de que image_url solía establecerse?

5 Me gusta

Gracias por revisar esto. Déjame verificar de mi parte y te respondo.

@nbianca, disculpa, esto podría ser una combinación de dos problemas.

Funciona en esta versión y anteriores con el plugin TLP:

Después de este commit, falla con TLP.

Estoy de acuerdo contigo en que, para YouTube, esa propiedad no se rellena de forma predeterminada.

Parece que TLP estaba haciendo un mejor trabajo con sus sobrescrituras, pero dependía de algo que ahora ha cambiado.

Para tu información, las sobrescrituras relevantes están aquí: https://github.com/angusmcleod/discourse-topic-previews/blob/master/lib/cooked_post_processor_edits.rb

Creo que necesitaré hacer un poco más de análisis, pero parece que ha habido suficientes cambios para romper TLP.

Déjame investigar esto un poco más y revertir de nuevo. Lamentablemente, es posible que no tenga oportunidad en los próximos días.

1 me gusta

No veo cómo ese commit puede romper el plugin TLP :thinking: ¿Estás 100% seguro de tu bisect?

1 me gusta

Es muy extraño que el bisect haya encontrado un cambio en cooked_post_processor… Lo verificaré de nuevo y revertiré.

Sí, confirmado:

Con este commit falla: 7c83d2eeb261ac676a8320e6a704752c56fd242e
Con este commit anterior está bien: 922c40f87cdceb8197dd61361334e0def23f13d5

1 me gusta

El problema se solucionó aquí:

7 Me gusta