Видео с facebook.com и других сайтов не встраивается

Один из моих участников опубликовал эту ссылку на Facebook отдельно, и Discourse попытался её обработать, но это не сработало.

Давайте попробую ту же ссылку на отдельной строке:

На всякий случай, если вы не видите её выше, вот что отображается:

Проблема также проявляется на нескольких взрослых сайтах, где участники пытались делиться ссылками; я провёл быстрое тестирование, вставив множество видео-URL с разных платформ, и оказалось, что несколько крупных взрослых сайтов тоже не работают.

Это кажется относительно серьёзной ошибкой, поскольку она влияет на встраивание видео с Facebook. Моим участникам (менее технически подкованным) нравится делиться ссылками на Facebook, отчасти потому, что эта платформа очень популярна и универсальна. :frowning: Кроме того, если кто-то публикует такой URL в сообщении, он преобразуется в нерабочий формат, а исходная ссылка исчезает. Так что даже если вы захотите перейти по этому URL, это будет невозможно — он больше недоступен.

Так… возможно ли настроить Discourse так, чтобы он НЕ пытался автоматически встраивать видео с этих доменов? Я искал настройку вроде «черный список URL с этими словами для запрета встраивания медиа», где можно было бы добавить эти домены. (Или, возможно, белый список одобренных URL, таких как YouTube и Vimeo, чтобы предотвратить будущие проблемы с новыми сайтами.)

Если это невозможно, есть ли какое-то быстрое решение, которое я могу применить на своих форумах?

Firefox (настольная версия)

Здесь на моём компьютере, используя Firefox 75 на Mac… у меня появляется серый блок с ошибкой.

Safari (настольный компьютер)

Здесь, в Safari, отображается первый кадр видео, но при нажатии кнопки «Play» ничего не происходит.

Chrome (настольный компьютер)

Используя Chrome v81 на настольном Mac… то же самое… вы видите видео, но оно никогда не воспроизводится.

iPhone - Safari iOS

То же самое, что и в Chrome или Safari (на компьютере)… видео отображается, но не воспроизводится.

Discourse официально не поддерживает встраивание видео с Facebook через onebox.

Возможно, стоит посмотреть:

2 лайка

Можем ли мы заменить вывод onebox, чтобы он не создавал неработающего плеера? Думаю, нам стоит сделать так, как это работало ранее

3 лайка

Да, я бы сказал, что это критично. Для меня не проблема, если Discourse не поддерживает видео с Facebook. Проблема в том, когда участник вставляет ссылку (что совсем не редкость), появляется сообщение об ошибке… и исходная ссылка исчезает. У меня в форуме сейчас несколько таких сообщений. Мы, администраторы, исправляем их вручную по мере обнаружения, но, очевидно, это не лучшее решение.

Я считаю, что это серьёзный баг, но только потому, что Facebook (как и другие видеосайты, которые я тестировал) чрезвычайно популярен.

Мне бы очень хотелось найти быстрое решение… Дайте знать, если я могу помочь?

4 лайка

Самое быстрое решение здесь — добавить www.facebook.com в настройку: onebox domains blacklist. Таким образом, onebox не будет пытаться встраивать видео с facebook.com.

3 лайка

Суть изменений в том, что Facebook обновил метаданные OpenGraph, добавив ссылки на видео со слишком строгими ограничениями:

<meta property="og:video:secure_url" content="https://video.fjai1-2.fna.fbcdn.net/v/t42.9040-2/10000000_626864624535070_4779621138076532736_n.mp4?_nc_cat=107&amp;_nc_sid=985c63&amp;efg=eyJybHIiOjM1MiwicmxhIjoxMzI5LCJ2ZW5jb2RlX3RhZyI6InN2ZV9zZCJ9&amp;_nc_oc=AQkUihmrvyg1wU9qH_NjqkLUzl0XSYJGE6JREtPH7jxKc1aXEIuGLSbauCEPM-hI-DCuJRacr1hCB6HHZre1lxto&amp;rl=352&amp;vabr=196&amp;_nc_ht=video.fjai1-2.fna&amp;oh=3fd1d5e14f27d55bc0d2a91d4714148b&amp;oe=5EA6E533" />

Приведённая выше ссылка на видео выдаёт ошибку: Bad URL timestamp. :man_facepalming:

Даже ссылка в теге og:image выдаёт ту же ошибку.

У нас нет никакой информации для отображения в однобоксе Facebook, кроме заголовка видео. Думаю, нам стоит жёстко прописать в однобоксе чёрный список ссылок на видео Facebook.

6 лайков

Отлично, спасибо… это идеально.

Кстати, напоминаю, что это происходит и на других сайтах, кроме Facebook; один участник попытался опубликовать ссылку на страницу видео на xvideos.com, и это тоже не сработало. (Предупреждение 18+! Это ОЧЕНЬ взрослый сайт!) Я протестировал несколько других сайтов и обнаружил то же самое.

1 лайк

Для Facebook можем ли мы взять атрибут twitter:player и использовать его для iframe? Похоже, что это URL, который не истекает:

Screenshot 2020-04-27 at 12.26.42

(Сколько иронии в том, что Facebook отдает неработающие данные Open Graph, но рабочие данные для Twitter :joy:)

Или, как вариант, применить ту же логику, что и для Instagram. Показать большое изображение-заглушку с кнопкой :play_or_pause_button:, которая является ссылкой.

4 лайка

Я пробовал это, но получил битые ссылки для тегов twitter:image и twitter:player. У вас они работают?

1 лайк

В примере видео от @pnoeric я вижу

<meta name="twitter:player" content="https://www.facebook.com/plugins/video.php?height=222&width=400&href=https://www.facebook.com/dccarmen/videos/10222567743521148/">

Которое кажется, работает нормально.

Но если вы нашли какие-то неработающие, то нам, вероятно, стоит их избегать.

1 лайк

По той же ссылке я вижу:

https://www.facebook.com/plugins/video.php?height=222&amp;width=400&amp;href=https://www.facebook.com/dccarmen/videos/10222567743521148/

Обратите внимание на &amp;, который ломает URL… Замена его на & решает проблему. Так что да, мы можем обойти это.

Ссылки twitter:image всё ещё не работают (вот пример).

Итак, у нас есть два варианта:

  1. использовать ссылки twitter:player для встраивания видео с Facebook
  2. добавить видео с Facebook в чёрный список в onebox и отображать их как обычные ссылки

Какой вариант вы предпочитаете, @codinghorror?

3 лайка

Мы можем попробовать это, но уверены ли мы, что ссылки не истекут?

Я не думаю, что ссылка устареет, так как URL в основном указывает на плагин Facebook, который встраивает видео для любой ссылки на видео, переданной в параметре href.

https://www.facebook.com/plugins/video.php?height=222&width=400&href=https://www.facebook.com/dccarmen/videos/10222567743521148/

Поэтому мы можем использовать iframe для встраивания видео Facebook.

1 лайк

Нет, это исправление будет специфичным для Facebook.

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

Мы обычно обходим такие ошибки только для очень популярных сайтов (например, Instagram), чтобы выгоды могли получить более широкие сообщества. Если сайт не является популярным, а вам нужно встроить его на свой ресурс, рекомендуемый способ — создать собственный плагин, добавив кастомный движок Onebox для этого сайта.

2 лайка

Хорошо.

Хм. Есть ли способ добавить домены в белый список, чтобы onebox пытался встраивать их содержимое? Если нет, то получается следующая ситуация:

  1. Я администрирую форум сообщества, где участники любят ссылаться на сайты с видео. (Это могут быть любые сайты, разумеется… сейчас мы этого не знаем.)

  2. Если на сайте есть ошибка в коде, из-за которой встраивание не работает, Discourse искажает вставку (выглядит плохо), и, что ещё хуже, удаляет исходную ссылку, поэтому другие не могут увидеть, что именно хотел поделиться автор темы.

Разве шаг 2 не должен звучать так: «Если на сайте есть ошибка в коде, из-за которой встраивание не работает, Discourse прекращает попытки встраивания и просто оставляет ссылку как есть?»

Я не могу исправить это с помощью чёрного списка, потому что не знаю, какие домены затронуты этой проблемой, и, конечно, любой сайт может столкнуться с такой проблемой в будущем. Точно так же, как мы видели это здесь с Facebook.

Конечно, вы можете это исправить — просто добавьте проблемные домены в чёрный список. Это вовсе не невозможная задача.

2 лайка

Хорошо, это приемлемо. У меня нет четкого представления о том, насколько это серьезная проблема; ручная обработка — отличное решение, если таких доменов немного.

Тем не менее, я по-прежнему считаю, что Discourse должен обрабатывать некорректные внешние данные более изящно, чем просто «создавать огромное сообщение об ошибке и удалять самое важное содержимое из первого сообщения темы» — и, думаю, вы тоже так считаете. :slight_smile: Но пока черный список — это допустимое обходное решение. Спасибо.

2 лайка