Проблема с Onebox и Youtube

Например,

Превью YouTube не отображается в списке тем, например, для темы Fakebook или плагина TLP.

Шаги воспроизведения:

Опубликовать видео с YouTube, переключиться на тему Fakebook — превью не появляется.

Временное решение:

Пересобрать пост, и превью появится. Однако, учитывая, что пользователи ожидают немедленного отображения превью без вмешательства поддержки, это не лучший вариант.

Дополнительная информация:

Topic.image_url кажется равным nil.

Проблема возникла недавно, после начала августа… Кажется, что до 5 августа всё работало (но точно не знаю, когда именно сломалось). Я заметил, что это примерно совпадает с выходом новой версии Onebox…

Я протестировал это на предыдущей сборке, и проблема отсутствовала, что исключает ошибки в ответах Open Graph от YouTube. Также тема Fakebook демонстрирует то же поведение, что и плагин TLP, что исключает плагин TLP. Поэтому я подозреваю, что это недавняя регрессия в Discourse или Onebox.

Это реальная проблема для пользователей предпросмотра списков тем.

4 лайка

Обновление: я выполнил Git Bisect, и, похоже, проблема в этом коммите:

3 лайка
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 почему мы больше не используем здесь метод post.post_analyzer.found_oneboxes??

Все onebox, использующие либо oembed, либо iframe, не будут работать с новым режимом селекторов CSS, и это также приводит к тому, что наш детектор onebox работает по-разному в разных частях кодовой базы.

4 лайка

Я согласен с @nbianca, это выглядит как чрезвычайно хрупкое изменение. Почему был выбран именно этот метод?

2 лайка

Проблема заключалась в том, что First Onebox присваивался любой размещённой ссылке, независимо от того, была она Onebox или нет. Это происходит потому, что PrettyText добавляет class="onebox" ко всем ссылкам, а затем Oneboxer пытается разобрать все ссылки с классом onebox.

Внесённое мной изменение проверяет, есть ли в итоговом документе какие-либо Oneboxes (Oneboxes — это элементы aside с классом onebox). Я ещё раз изучу ситуацию, чтобы понять, что именно и почему сломалось, и вернусь с изменением, которое исправит обе проблемы.

7 лайков

Я внес некоторые улучшения и создал этот PR.

Я только что протестировал v2.3.2, и похоже, что ссылки на YouTube не устанавливают атрибут image_url темы. Причина в том, что изображение извлекается из атрибута src тега img, но при ссылке на видео YouTube используется <div> с CSS-атрибутом background-image.

Вы уверены, что image_url раньше устанавливался?

5 лайков

Спасибо, что обратили внимание на это. Давайте я проверю на своей стороне и вернусь с ответом.

@nbianca извините, это, вероятно, сочетание двух проблем.

Работало до этого и с плагином TLP:

После этого коммита с TLP происходит сбой.

Я согласен с вами, что для YouTube это свойство по умолчанию не заполняется.

Получается, что TLP лучше справлялся со своими переопределениями, но полагался на что-то, что теперь изменилось.

К сведению, соответствующие переопределения находятся здесь: https://github.com/angusmcleod/discourse-topic-previews/blob/master/lib/cooked_post_processor_edits.rb

Думаю, мне потребуется провести дополнительный анализ, но похоже, что изменений было достаточно, чтобы нарушить работу TLP.

Давайте я немного подробнее изучу это и снова отменю изменения. К сожалению, у меня может не быть возможности сделать это в ближайшие пару дней.

1 лайк

Не понимаю, как этот коммит может сломать плагин TLP :thinking: Вы уверены на 100% в результатах вашего bisect?

1 лайк

Очень странно, что бисекция обнаружила изменение в cooked_post_processor… Я перепроверю и отменю это.Да, подтверждено:С этим коммитом происходит сбой: 7c83d2eeb261ac676a8320e6a704752c56fd242eС предыдущим коммитом всё в порядке: 922c40f87cdceb8197dd61361334e0def23f13d5

1 лайк

Проблема была исправлена здесь:

7 лайков