Превью видео (youtube, rutube, vimeo)

Иногда требуется получить превью-, thumbnail-картинку (или, по-другому, уменьшенную версию кадра) видеофайла. Описанные в данной статье функции позволяют вытащить превьюшки видеофайлов с таких популярных сервисов как youtube, rutube, vimeo.

Как это работает:

getVideoUrl($data) – функция для получения ссылки из кода плеера. $data — html-код для встраивания видео (обычно, начинается с <object> или <iframe>)
getVideoThumbUrl($url) – функция для определения файла миниатюры. $url — src видеофайла, полученный из функции getVideoUrl($data)

Если Вы передаете прямую ссылку (без кода плеера), тогда можете не использовать функцию getVideoUrl($data), а сразу передать значение в функцию getVideoThumbUrl($url).

function getVideoUrl($data) {
    if (preg_match("/<iframe.*?src=\"([^\"]+)\".*?><\/iframe>/i", $data, $matches)) {
        $url = $matches[1];
    }
    if (preg_match("/<object.*?>.*?<param name=\"movie\" value=\"([^\"]+)\"( \/>|><\/param>).*?<\/object>/i", $data, $matches)) {
        $url = $matches[1];
    }
    return $url;
}

function getVideoThumbUrl($url) {
    if (!is_string($url) || empty($url)) return false;
    $url = str_replace("&amp;", "&", $url);
    $arr = parse_url($url);
    $arr[host] = str_replace('www.', '', $arr[host]);
    $url = "";
    switch ($arr[host]) {
        case 'rutube.ru':
            if (preg_match("/\/tracks\/(.+)\.html/i", $arr[path], $matches)) {
                $xml = simplexml_load_file("http://rutube.ru/cgi-bin/xmlapi.cgi?rt_mode=movie&rt_movie_id=".$matches[1]."&utf=1");
                if ($xml) {
                    $url = (string) $xml->response->movie->thumbnailLink;
                }
            }
			if (preg_match("/\/video\/(.+)\.html/i", $arr[path], $matches)) {
                $xml = simplexml_load_file("http://rutube.ru/cgi-bin/xmlapi.cgi?rt_mode=movie&rt_movie_id=".$matches[1]."&utf=1");
                if ($xml) {
                    $url = (string) $xml->response->movie->thumbnailLink;
                }
            } else {
				$html = file_get_contents("http://rutube.ru" . $arr[path]);
				if (preg_match('/thumbnail_url&quot;: &quot;(.+)&quot;, &quot;viewer/i', $html, $matches)) {
					$url = $matches[1];
				}
			}
            break;
        case 'video.rutube.ru':
            if (preg_match("/\/(.+)/i", $arr[path], $matches)) {
                $s[0] = substr($arr[path], 1, 2);
                $s[1] = substr($arr[path], 3, 2);
                $url = "http://tub.rutube.ru/thumbs/".$s[0]."/".$s[1]."/".$matches[1]."-1-1.jpg";
            }
            break;
        case 'youtube.com':
            if (preg_match("/\/(embed|v)\/(.+)\/?/i", $arr[path], $matches)) {
                $url = "http://img.youtube.com/vi/".$matches[2]."/0.jpg";
            }
            break;
        case 'player.vimeo.com':
            if (preg_match("/\/video\/(.+)\/?/i", $arr[path], $matches)) {
                $clip_id = $matches[1];
            }
            $xml = simplexml_load_file('http://vimeo.com/api/v2/video/'.$clip_id.'.xml');
            if ($xml) {
                $url = (string) $xml->video->thumbnail_medium;
            }
            break;
        case 'vimeo.com':
            parse_str($arr[query], $query);
            $clip_id = $query['clip_id'];
            $xml = simplexml_load_file('http://vimeo.com/api/v2/video/'.$clip_id.'.xml');
            if ($xml) {
                $url = (string) $xml->video->thumbnail_medium;
            }
            break;
        default:
            $url = "";
            break;
    }
    return $url;
}

Как применить эти функции на практике:

// вытаскиваем src видеофайла
$url = getVideoUrl($html);
// генерируем ссылку на превьюшку
$th_url = getVideoThumbUrl($url);
// $th_url теперь содержит ссылку на уменьшенную копию кадра из видео $url
echo '<img src="/', $th_url, '" border="0" />';

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

Первоисточник: rodionblog.ru

Демо


Оставьте свой комментарий

Оставить комментарий от имени гостя

0 / 2500 Ограничение символов
Ваш текст должен быть в пределах 10-2500 символов
Комментарии | Добавить свои
  • Комментарии не найдены