Видео с YouTube в onebox больше не отображаются

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

Что может происходить

Одна из теорий заключается в том, что наш сервер был идентифицирован YouTube как потенциально занимающийся фармингом музыкальных видео, и нам ограничили доступ или заблокировали его.

Мы — совершенно незаметный маленький форум в Великобритании с ничтожным трафиком, но у нас есть несколько тем (на самом деле одна, разбитая на две из-за размера) с 10 тысячами и 2 тысячами сообщений о музыкальных видео. Это музыкальная цепочка, где следующий пользователь просто публикует песню, связанную, часто лишь косвенно, с предыдущим постом.

Конечно, у нас есть и другие темы со ссылками на YouTube, но эта особенно (~100%) насыщена музыкой.

После пересборки в выходные я предполагаю, что YouTube проанализировал активность Oneboxer’а, пытавшегося получить заголовки для множества музыкальных видео, и его алгоритм поставил нас на «наказательную скамейку».

Позже я попытался снова выполнить пересборку постов, что, вероятно, подтвердило подозрения YouTube в том, что мы с этого IP-адреса пытаемся только скачивать музыкальные видео.

Возможно, это связано с Digital Ocean

Если поискать ошибки 429 на YouTube, игнорируя все результаты по YouTube API, то в итоге можно найти группу похожих проблем, где говорится, что их IP-адреса были добавлены в серый/черный список или забанены из-за использования виртуальных серверов. В частности, упоминалось название Digital Ocean.

Предполагается, что YouTube может «забанить» серию IP-адресов, и другие легитимные серверы часто попадают под удар как collateral damage (побочный ущерб).

Вот одна из таких проблем и возможное решение.

https://support.google.com/youtube/thread/21697789?hl=en

А вот еще одна от разработчика с medium.com, работающего над embed.ly API.

https://support.google.com/youtube/thread/21939228?hl=en

В первом посте в качестве рекомендуемого решения предлагалось отключить IPv6 на дроплете.

Знает ли кто-нибудь, насколько это вероятно, или вызовет ли это какие-либо проблемы?

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

Что должно происходить?

Во-первых, я понимаю, что реакция здесь, скорее всего, будет такой: мой случай — это крайняя ситуация, и никаких изменений не требуется.

Я это понимаю. Но если @marcozambi и я обнаружили одну и ту же проблему за относительно короткий период, это может означать, что с этим столкнутся и другие. Возможно, YouTube недавно стал более строгим в контроле за встраиванием?

Я прошу вас помнить, что в данный момент мой форум находится в полном подвешенном состоянии. У меня десятки тысяч ссылок, которые не были обработаны через Onebox, но я не знаю, где они находятся, и могу придумать только полную пересборку, чтобы найти их все, что почти наверняка привлечет еще больше негативного внимания со стороны YouTube.

По крайней мере, Onebox не должен молчать при ошибке ограничения скорости (rate-limit). Он должен привлечь внимание администраторов и, по возможности, приостановить процесс, вызвавший проблему ограничения скорости.

Варианты привлечения внимания владельца форума

Я не думаю, что это легко. Совсем нет.

Я вижу, что Onebox выполняет несколько совершенно разных ролей:

a) создает Onebox в реальном времени при составлении постов,
b) обрабатывает пересборку старых постов (часто с уже известными ссылками) в фоновом режиме и без участия пользователя,
c) обрабатывает массовые фоновые задания во время миграции или пересборки.

Если ошибка ограничения скорости произойдет в сценарии a), то автор заметит, что Onebox не развернулся, и может пожаловаться администраторам форума — проблема может быть замечена. Также, возможно, можно перехватить единичную ошибку во время составления и отправить уведомление или сообщение администраторам?

В сценарии b) сбой может произойти во время фоновой обработки поста, поэтому его нужно либо повторить, либо, если лимит повторений исчерпан, зафиксировать сбой и уведомить администраторов форума.

В сценарии c) необходимо учитывать более широкий контекст множества одновременных сбоев. На данный момент я не считаю, что существует какой-то общий контроль над процессом пересборки постов, чтобы 10 000 ошибок 429, возвращаемых Onebox, могли быть распознаны как более серьезная проблема, чем отправка 10 000 отдельных сообщений администраторам.

В реальности такой сбой означал бы, что все вызовы Onebox для расширения видео YouTube (возможно, и других провайдеров) должны быть приостановлены, пока мы не снимем ограничение скорости.

Альтернативные подходы

Ограничение исходящих запросов

Я предполагаю, что принцип «предотвращение лучше лечения» может диктовать необходимость установки ограничителя скорости (rate-limiter) в Discourse перед запросами, чтобы Discourse мог удерживать запросы на основе настроек конфигурации.

Это создаст хаос при пересборках и миграциях.

Onebox Assistant

Возможно, всем нам нужны коммерческие отношения с организациями, которые кэшируют и проксируют встраиваемый контент, например, тот, который использует @merefield в своем плагине Onebox Assistant?

Включение ‘бота’ в белый список

Может быть, мы сможем найти способ включить ‘бота’ Discourse в белый список YouTube? Вероятно, это слишком открыто для злоупотреблений.

YouTube API

Так же, как Onebox работает с Twitter, возможно, мы могли бы использовать YouTube API, если там лимиты выше?

Хорошее исследование, спасибо.

Не знаю, заметили ли вы, но я уже поднимал вопрос о том, что даже Signal Messenger сталкивается с проблемами при работе с YouTube, и эта проблема до сих пор не решена:

https://meta.discourse.org/t/onebox-assistant-crawl-for-those-previews-reliably/107405/9?u=merefield

Это также происходит в WhatsApp.

Хотел лишь добавить, что нас регулярно «банят» на YouTube каждые 2–3 недели. Бан длится около недели, после чего нас разбанивают, и цикл повторяется.
У нас всего несколько сотен ссылок на видео с YouTube, наши пользователи публикуют не более нескольких ссылок в день…

Так что, если не использовать плагин OneBox Assistant, нет способа предпросматривать ссылки youtu.be в базовом Discourse?

Все форматы ссылок на YouTube должны раскрываться через Onebox.

У вас это не работает?

Если да, то с какими проблемами вы столкнулись?

Я использую последнюю версию Discourse и только что создал пост со ссылкой youtu.be, но предварительный просмотр для неё не появился. Обычные ссылки на YouTube работают.

Посмотрим

https://youtu.be/gLCduDJVksc выглядит нормально

Да, это работает на meta.discourse. Я пытаюсь понять, почему у меня не работает. Есть ли какие-то настройки для конфигурации этого через панель администратора?

Как обсуждалось выше, YouTube, вероятно, заблокировал ваш сервер или диапазон IP-адресов.

Но обычные ссылки на YouTube работают. Если бы они были запрещены, разве все они не перестали бы работать?

Это не так, @AntiMetaman.

Как предложил выше @codinghorror, похоже, что YouTube ограничивает скорость / блокирует определённые форматы ссылок YouTube, в то время как другие продолжают работать.

В моём случае работает формат с ‘/embed’, а другие — нет.

Кажется, что YouTube применяет разные лимиты скорости в зависимости от формата. Формат ‘/embed’, похоже, позволяет большее количество запросов. Это лишь anecdotal наблюдение, у меня нет никаких твёрдых данных по этому поводу.

Несколько вопросов:

Вы размещаете сайт на Digital Ocean?

Вы используете IPv6?

Проверили ли вы, что ID видео сформирован правильно — 11 символов? (глупый вопрос, но вы удивитесь).

Для конкретного видео YouTube пробовали ли вы все три поддерживаемых формата?

Какой сработал, а какой нет?

Я уже неделю бьюсь головой об эту проблему, но всё же нашёл рабочее решение — хотя до сих пор не понимаю, почему оно работает.

Предполагая, что у вас та же проблема, попробуйте установить Onebox Assistant, включите его, но не настраивайте.

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

В такой конфигурации, которая вообще-то не должна работать, мои видео YouTube, которые иначе были бы ограничены по скорости (в любом формате), расширяются через Onebox, но я не понимаю, как это работает.

Я обсуждал эту проблему с @merefield (автором) здесь…

https://meta.discourse.org/t/onebox-assistant-crawl-for-those-previews-reliably/107405/36?u=bletch

ЕСЛИ, и это большое ЕСЛИ, это тоже поможет вам, то это не правильное решение, так как это просто особенность возврата значений метода, и на неё нельзя полагаться в долгосрочной перспективе.

Отдельно я также использовал плагин Onebox Assistant по назначению — подписавшись на embed.rocks, и он работает как по волшебству.

Можете, пожалуйста, объяснить разницу между обычными и нестандартными ссылками YouTube?

Если это так, почему Onebox не может преобразоваться в формат, который работает, прежде чем опрашивать данные?

Может быть, я полагаю, но это не «исправление».

Все форматы, похоже, имеют ограничение по частоте запросов и в конечном итоге перестают работать. Даже формат «/embed» перестал работать у меня после того, как я попытался повторно обработать все встраивания YouTube, которые не сработали при предыдущей повторной обработке.

Кроме того, я видел лишь два случая, когда путь «/embed» сработал, хотя другие не сработали — включая мой собственный.

Пока недостаточно доказательств и недостаточно «пострадавших», чтобы предлагать какие-либо изменения.

Вы тоже сталкиваетесь с этой проблемой, @Terrapop, или просто интересуетесь?

Я заинтересованная сторона, так как мы скоро переносим наше популярное сообщество на Discourse. Сейчас мы находимся на этапе тестирования, и это работает, но мы хотим сразу настроить всё правильно. Поэтому, скорее всего, мы настроим Onebox Assistant на работу с нашим собственным конечным узлом, который будет ретранслировать и кэшировать ответы от embeds.rock. Если это не сработает, мы будем получать данные через Iframely.

Хорошо, я просто экспериментировал и смог воспроизвести это здесь, на meta.discourse! Думаю, дело в markdown. Ссылки на youtu.be на моём форуме работают как положено, но не в приведённых ниже примерах. YouTube вообще не блокирует мой хост.

  1. Это не будет работать даже на meta.discourse: https://youtu.be/MLpyi-oVoI

Видите? Со ссылкой на видео всё в порядке. Если разместить ссылку на следующей строке, она всё равно не будет работать.

  1. Это тоже не будет работать:
    https://youtu.be/MLpyi-oVoIY

Видите? А если я вставлю эту же ссылку сюда, она заработает:

Рад, что вас не блокирует YouTube. Думаю, всё работает как положено — это проблема форматирования.

По моему мнению, для разворачивания Onebox ссылка должна: а) находиться в начале строки сама по себе и б) если она находится в середине списка, перед ней должен быть дополнительный перевод строки.

Если вы посмотрите на исходную версию вашего сообщения

https://meta.discourse.org/raw/153748/36

Ok, so I was just playing around and I was able to reproduce it here on meta.discourse! I believe it has something to do with markdown. My youtu.be links do in fact work my forum as intended just not in the examples below. Youtube isn't blocking my host at all.

1. This won't work even on meta.discourse: https://youtu.be/MLpyi-oVoI

See? There's nothing wrong with the video link. If you put the link on the next line, it still won't work.

2. This won't work either:
https://youtu.be/MLpyi-oVoIY

You see? Now if I paste this same link here, it will work:

https://youtu.be/MLpyi-oVoIY

Вы увидите, что в первом пункте (1.) ссылка находится в середине строки, поэтому она не развернётся. Ссылка должна быть первым элементом строки.

А во втором пункте (2.) перед ссылкой YouTube только один перевод строки, поэтому она тоже не развернётся.

Если вы посмотрите на отформатированную версию вашего сообщения, то, возможно, заметите, что у ссылки YouTube есть висячий отступ…

…что означает, что Markdown всё ещё воспринимает ссылку как часть маркированного пункта 2, поэтому она не развернётся.

Вы можете сделать так.

  1. Это какой-то заполнитель текста
  2. Эта ссылка сработает, так как я оставил два перевода строки после этой строки и перед ссылкой YouTube

Да, мне просто придётся научиться работать с Markdown и размещать ссылки на YouTube на отдельной строке. Мои пользователи ещё привыкают к этому, и всё началось с того, что я обратил внимание на пост одного из них, в котором ссылка youtu.be не работала.

Привет! Я начал повторную обработку более 1 миллиона постов два дня назад, и с сегодняшнего дня превью YouTube больше не работают. Похоже, мой IP-адрес заблокирован.
Что в таком случае рекомендуется делать? Стоит ли просто дождаться завершения повторной обработки и связаться с YouTube, чтобы узнать, можно ли разблокировать IP?
Или лучше использовать "Onebox Assistant", crawl for those previews reliably!?

Это, безусловно, вариант, если вы можете себе это позволить.