Как программно получить HTML-код для видео, размещенного на YouTube - PullRequest
9 голосов
/ 28 января 2011

Как программно получить HTML-код для видео, размещенного на YouTube.Какой Java API доступен

Ответы [ 3 ]

12 голосов
/ 31 января 2011

Используйте API данных YouTube (есть предварительно встроенные клиентские библиотеки GData , или вы можете самостоятельно выполнять HTTP / XML).

Одна из <media:content/> записей будет содержать URL для встраиваемого SWF-файла, если видео встраиваемое.

7 голосов
/ 31 января 2011

Предполагая, что у вас есть URL видео, его довольно просто создать.Вам нужен конец URL (часть после / watch? V = , назовем его ID ).Чтобы сгенерировать встроенный HTML-код iframe, просто поместите его в соответствующее место (в атрибуте src не включайте скобки):

<iframe title="YouTube video player" class="youtube-player" type="text/html" width="640"
height="390" src="http://www.youtube.com/embed/{ID}" frameborder="0"
allowFullScreen></iframe>

Есть несколько способов получить параметр v изURL.Регулярное выражение будет работать.

0 голосов
/ 10 января 2018

Хотя принятый ответ работает, если вы хотите сделать это программно, вам нужно правильное соотношение сторон, чтобы генерировать оптимальные размеры iframe для вашего видео.Я написал следующую функцию php, которая может генерировать для вас ссылку на лету.Он использует утилиту bash youtube-dl для получения информации о видео по любой ссылке на YouTube, поэтому вам необходимо убедиться, что она установлена ​​(apt-get install youtube-dl должна работать в Ubuntu или других версиях Debian)

function getYoutubeEmbed($link, $size = [], $options = [], $privacy = false) {

    $options += [
        'rel'      => true, // Show suggested videos when the video finishes.
        'controls' => true, // Show player controls.
        'showinfo' => true, // Show video title and player actions.
    ];

    $json = json_decode(exec('youtube-dl -j --no-warnings ' . $link . ' 2>/dev/null'));
    if ($json && !empty($id = $json->id) && !empty($width = $json->width) && !empty($height = $json->height)) {

        $args = [];
        foreach ($options as $option => $value) {
            if (!$value) {
                $args[] = $option . '=0';
            }
        }

        if ($size) {
            if (!empty($size['width']) && !empty($size['height'])) {
                $width  = $size['width'];
                $height = $size['height'];
            } else if (!empty($size['width'])) {
                $height = ceil(($height * $size['width']) / $width);
                $width  = $size['width'];
            } else if (!empty($size['height'])) {
                $width  = ceil(($width * $size['height']) / $height);
                $height = $size['height'];
            }
        }

        $url = ($privacy ? 'www.youtube-nocookie.com/embed/' : 'www.youtube.com/embed/') . $id . ($args ? '?' . implode('&amp;',$args) : '');
        $iframe = '<iframe width="' . $width . '" height="' . $height . '" src="//' . $url . '" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>';
        return $iframe;
    } else {
        return false;
    }
}

Функция довольно понятна, но вот ее разбивка:

  • Как минимум, вам необходимо указать ссылку для первого аргумента.
  • Второй аргументявляется массивом ширины, высоты или обоих.Если вы укажете только один, он сохранит соотношение сторон по умолчанию и рассчитает для вас другое измерение (именно так я обычно его использую).
  • Третий аргумент - необязательный массив аргументов, которые задокументированы.в самой функции.
  • Параметр fourt является необязательным логическим аргументом для «конфиденциальности», который объясняется следующим образом:

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

Пример использования:

$link = 'https://www.youtube.com/watch?v=adAqQct3vRI';
echo getYoutubeEmbed($link, ['width' => 560], ['rel' => false]);

Выход:

<iframe width="560" height="315" src="//www.youtube.com/embed/605gdJGdaPE?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

...