Задача — добавить rutube как embed провайдера в медиа библиотеку, чтобы можно было создать медиа тип Rutube, где будет поле для ввода ссылки. Медиа поля после этого позволят добавлять еще один тип содержимого — Rutube.
Будем использовать модуль oembed_providers для настройки rutube провайдера. Плагин уже поддерживает 10/11 Drupal, так что подойдет для новых проектов.
1 2 |
composer require drupal/oembed_providers drush en oembed_providers |
Custom provider Rutube
/admin/config/media/oembed-providers/custom-providers
В настройках кастомных провайдеров, нужно создать описание для oembed сервиса rutube. Почему rutube до сих под нет в списке провайдеров https://oembed.com/providers.json — остаётся загадкой. Возможно, они не соответствуют полной спецификации.
Итак, добавляем:
Provider name: Rutube
Provider URL: https://rutube.ru
Далее описываем endpoint:
Schemas: https://rutube.ru/video/*/
Discovery: True
JSON: True
Можно JSON/XML галочки не ставить. Но я проверил, что JSON работает на rutube, поставил там галку.
Провайдер готов, теперь его нужно оформить как Media Source.
Provider Bucket
/admin/config/media/oembed-providers/buckets
В плагине oembed_providers медиа источники создаются через объявление «провайдерских ведер», что бы это не значило.
В бакете вы создаёте медиа источник, который может представлять сразу нескольких провайдеров. Здесь будет показан весь список с oembed.com плюс созданный нами провайдер rutube. Отмечаем его галочкой.
Ведро я обозвал — Rutube Provider.
Создаём тип медиа
/admin/structure/media/add
Теперь, когда мы создали медиа источник, основанный на кастомном провайдере rutube, мы можем создать новый медиа тип, который принимает объекты нужного нам типа.

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

В секции field mapping не так много можно сделать как хотелось бы, обычно в выпадающем списке доступно только поле Name, которое сопоставляется с «Resourсe title».
Создание медиа контента
Теперь в медиа вам доступно создание новых элементов типа «Rutube Video Media Type».
Пример создания контента:

Обратите внимание, что URL должна заканчиваться «/». Указанная нами схема и не позволит иного варианта, но некоторых смущают ошибки вроде «The provided URL does not represent a valid oEmbed resource.»
Oembed подтянет иконку для видео автоматически. Вот так это примерно выглядит в медиа библиотеке:

Теперь можно создавать медиа поля в публикациях и прикреплять видосы с рутуба. Рендер будет зависеть от выбранного формата поля.

Rendered entity — выведет дефолтовый html, который передаётся oembed сервисом. Thumbnail — выведет тизер.