Інтеграція Rutube-відео у картку товару 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція Rutube-відео у картку товару 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція RuTube-відео в карточку товара 1С-Бітрікс

RuTube — російська відеоплатформа, яка все частіше використовується як альтернатива YouTube на вітчизняних проектах. Технічно інтеграція з RuTube у карточку товара Бітрікс відрізняється від YouTube: інший формат Video ID, інша структура embed-посилань, відсутність публічного CDN для мініатюри. Розберемо, як це реалізується без зайвих залежностей.

Структура посилання RuTube та Video ID

RuTube використовує UUID (32 символи без дефісів) як ідентифікатор відео. Формати посилань:

  • https://rutube.ru/video/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4/ — стандартне посилання
  • https://rutube.ru/play/embed/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 — уже embed-посилання

Парсинг Video ID:

function parseRutubeId(string $url): ?string
{
    if (preg_match(
        '/rutube\.ru\/(?:video|play\/embed)\/([a-f0-9]{32})/',
        $url,
        $m
    )) {
        return $m[1];
    }
    return null;
}

function getRutubeEmbedUrl(string $videoId): string
{
    return 'https://rutube.ru/play/embed/' . $videoId
         . '?rel=0&showControls=1&skinColor=ff0000&startFrom=0&mute=0';
}

Параметри embed у RuTube значно бідніші за YouTube: основні — rel (не показувати схожі відео), skinColor (колір елементів плеєра в HEX без #), mute.

Зберігання у інфоблоці Бітрікс

Аналогічно YouTube — властивість типу «Строка» з кодом VIDEO_RUTUBE, при необхідності множинна:

CIBlockProperty::Add([
    'IBLOCK_ID'     => CATALOG_IBLOCK_ID,
    'NAME'          => 'RuTube-відео',
    'CODE'          => 'VIDEO_RUTUBE',
    'PROPERTY_TYPE' => 'S',
    'MULTIPLE'      => 'Y',
    'SORT'          => 210,
]);

Якщо на проекті використовуються обидва джерела (YouTube + RuTube), можна завести одне універсальне властивість VIDEO_URL та визначати платформу за доменом посилання.

Отримання мініатюри через API

На відміну від YouTube, у RuTube немає публічного CDN для превью за шаблонним посиланням. Мініатюра потрібна отримати через API:

GET https://rutube.ru/api/video/{VIDEO_ID}/?format=json

Відповідь містить поле thumbnail_url — прямим посилання на обкладинку. Також доступні поля title, description, duration.

function getRutubeVideoInfo(string $videoId): ?array
{
    $cacheKey = 'rutube_' . $videoId;
    $cache = \Bitrix\Main\Data\Cache::createInstance();

    if ($cache->initCache(3600 * 24, $cacheKey, '/rutube/')) {
        return $cache->getVars();
    }

    $http     = new \Bitrix\Main\Web\HttpClient();
    $response = $http->get("https://rutube.ru/api/video/{$videoId}/?format=json");

    if ($http->getStatus() !== 200) {
        return null;
    }

    $data = json_decode($response, true);
    if (empty($data['id'])) {
        return null;
    }

    $result = [
        'id'            => $data['id'],
        'title'         => $data['title'] ?? '',
        'thumbnail_url' => $data['thumbnail_url'] ?? '',
        'duration'      => $data['duration'] ?? 0,
    ];

    $cache->startDataCache(3600 * 24, $cacheKey, '/rutube/');
    $cache->endDataCache($result);

    return $result;
}

Кеш на 24 години обов'язковий — API RuTube не має опубліковані обмеженнями, але частих запитів при високому трафіку створювати навантаження та сповільнювати відповідь сторінки.

Вивід у шаблоні карточки товара

$rutubeUrls = (array)($arResult['PROPERTIES']['VIDEO_RUTUBE']['VALUE'] ?? []);

foreach ($rutubeUrls as $rutubeUrl) {
    $videoId = parseRutubeId($rutubeUrl);
    if (!$videoId) continue;

    $info     = getRutubeVideoInfo($videoId);
    $thumbUrl = $info['thumbnail_url'] ?? '/local/img/video-placeholder.jpg';
    $embedUrl = getRutubeEmbedUrl($videoId);

    echo '<div class="rutube-facade" data-embed="' . htmlspecialchars($embedUrl) . '">';
    echo '<img src="' . htmlspecialchars($thumbUrl) . '"
               alt="' . htmlspecialchars($info['title'] ?? 'Відеообзор') . '"
               loading="lazy" width="640" height="360">';
    echo '<button class="play-btn" aria-label="Дивитись відео"></button>';
    echo '</div>';
}

JavaScript-інітіалізація (аналогічно YouTube facade):

document.querySelectorAll('.rutube-facade').forEach(function(el) {
    el.addEventListener('click', function() {
        const iframe = document.createElement('iframe');
        iframe.src = this.dataset.embed + '&autoplay=1';
        iframe.width = '640';
        iframe.height = '360';
        iframe.allowFullscreen = true;
        iframe.allow = 'autoplay; encrypted-media';
        this.replaceWith(iframe);
    });
});

Спільне використання YouTube та RuTube

Якщо в карточці потрібна підтримка обох сервісів, уніфікуємо обробку через одне властивість VIDEO_URL:

function detectVideoSource(string $url): string
{
    if (str_contains($url, 'youtube.com') || str_contains($url, 'youtu.be')) {
        return 'youtube';
    }
    if (str_contains($url, 'rutube.ru')) {
        return 'rutube';
    }
    return 'unknown';
}

Це спрощує роботу менеджера: один тип властивості, вставити будь-яке посилання, система сама розберется з embed.

SEO-розмітка VideoObject для RuTube

Пошуковики приймають VideoObject розмітку і для RuTube:

if ($info) {
    $schema = [
        '@context'    => 'https://schema.org',
        '@type'       => 'VideoObject',
        'name'        => $info['title'],
        'thumbnailUrl'=> $info['thumbnail_url'],
        'embedUrl'    => getRutubeEmbedUrl($videoId),
        'duration'    => 'PT' . gmdate('H\Hi\Ms\S', $info['duration']),
        'uploadDate'  => date('c'),
    ];
    echo '<script type="application/ld+json">'
       . json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)
       . '</script>';
}

RuTube-відео індексується у пошуку Яндекса та може з'являтися у відеовидачі. Google поки не гарантує індексацію RuTube-контенту, але розмітка не навредить.

Строки реалізації

Варіант Склад робіт Строк
Базовий (одне відео, iframe без превью) Властивість + шаблон 0.5 дня
З API-превью та facade-паттерном Запит до API + кеш + JS 1–2 дні
Універсальний (YouTube + RuTube + SEO + галерея) Єдине властивість + маршрутизація за платформою + розмітка 2–3 дні