Ссылка на IGTV в текущем виде будет обрабатываться через универсальный oneboxer, что, вероятно, будет работать для первых нескольких запросов с любого сайта. После небольшого числа запросов Instagram (вероятно) перенаправит эти запросы на экран входа, что и наблюдается у @renato.
Как отмечает @renato, движок onebox для Instagram не настроен на обработку ссылок в стиле IGTV. Я только что создал PR для решения этой проблемы:
Это означает, что движок onebox для Instagram будет получать URL видео IGTV через официальный oEmbed-эндпоинт Instagram. При условии, что вы настроили токен доступа, запрос URL onebox не должен перенаправляться на экран входа.
(PR с onebox потребует обновления версии onebox, а затем обновления файла Gemfile в ядре Discourse.)
Вот мысль: можно ли использовать возвращаемый og:video (в котором есть secure_url, type, width и height), чтобы отображать видеоплеер, как в generic engine?
Мы используем конечную точку Instagram oEmbed API, которая не возвращает тип медиа, URL-адрес видеофайла или какие-либо другие полезные данные, необходимые для создания однобокса с встроенным плеером.
Хотя при прямом доступе к странице эти метаданные присутствуют, многократные (более нескольких раз) обращения к ней без аутентификации, по-видимому, вызывают на стороне сервера состояние, при котором начинает требоваться аутентификация. Именно поэтому ссылка в вашем первом сообщении ведёт на страницу входа.
Что касается создания однобоксов, то на данный момент у нас довольно ограниченные возможности для работы со ссылками IGTV.
При использовании API oEmbed возвращается атрибут html. Я вижу, что в старой дискуссии предлагалось использовать этот возвращаемый html, но в итоге это привело к текущему решению.
Я понимаю, что текущий подход чище и безопаснее, поэтому логично оставить его в ядре.
Сейчас мне это не очень нужно, но если вдруг потребуется, будет ли реалистично создать кастомный плагин для использования этого «официального» встраивания Instagram — с фиксированной высотой и откатом к решению ядра? Могу ли я добавить ещё один движок Onebox с тем же matches_regexp или мне стоит попробовать «запатчить» (monkey patch) Onebox::Engine::InstagramOnebox?
priority может помочь контролировать, какие движки соответствуют определенным URL.
Также обратите внимание на подход, который использует RedditMediaOnebox. Он попытается вернуть пользовательский HTML, но в случае невозможности обработки конкретного типа результата вернётся к стандартному onebox.