В Drupal 10/11 поддержка Oembed провайдеров в ядре (модуль media) позволяет легко и непринуждённо читать данные о медиа прямо из провайдера.
Ранее я рассказывал как зарегистрировать oembed для rutube, чтобы иметь возможность оперировать видео контентом с этого видео-хостинга.
На примере этого oembed провайдера, я покажу как извлечь json данные, о видео по его url.
К примеру, вы получили ID от media entity, и убедились, что это медиа контент нужного типа по его bundle, и теперь собираетесь прочитать метаданные о видео, которые предоставляются oembed сервером.
1 2 3 4 5 6 7 8 9 10 |
$media_id = ...; $media = Media::load($media_id); $bundle = $media->bundle(); if ($bundle == 'rutube_video_media_type') { $oembed_url = $media->get('field_media_oembed_video')->value; // далее нужно обратиться к сервисам модуля media // для вычисления oembed ссылки и загрузить данные ... } |
Медиа модуль предоставляет ряд сервисов, которые решают нашу задачу. Вы можете построить resource url просто по url видео.
1 2 3 4 5 6 7 8 9 |
$resource_url = \Drupal::service('media.oembed.url_resolver')->getResourceUrl($oembed_url); if ($resource_url) { $oembed_resource = \Drupal::service('media.oembed.resource_fetcher')->fetchResource($resource_url); if ($oembed_resource) { // выводим, к примеру, html код вставки видео print_r($oembed_resource->getHtml()); } } |
media.oembed.url_resolver — предоставляет метод getResourceUrl, который пропускает ваш oembed_url через всех зарегистрированных провайдеров, а возвращает ссылку на oembed сервер.
media.oembed.resource_fetcher — позволяет считать данные с сервера (fetchResource), возвращая объект Drupal\media\OEmbed\Resource. Он также выполняет кеширование запросов, так что вам не нужно заботиться об этой рутинной операции.
Resource содержит все необходимые методы для чтения нужных полей oembed данных.