Блог веб-разработчика: в помощь программистам

Rutube – получаем изображение ролика (thumbnail)

Стала необходимость получить картинку для роликов вставленных с youtube / rutube, с youtub-ом всё быстро и понятно, а вот с rutub-ом мне пришлось повозится, поэтому и решил написать, может кому то поможет и сэкономит время.
Есть 2 варианта – клиентский и серверный, так как я работаю с PHP, мне нужен 2й, оказалось всё довольно просто, необходимая информация лежит по урлу

http://rutube.ru/cgi-bin/xmlapi.cgi?rt_mode=movie&rt_movie_id=ID_Ролика&utf=1

ну тут всё понятно подставляем свой урл и парсим XML, где помимо ссылок на картинки к роликам рутюба, лежит и вся остальная инфа о ролике, всё просто :)

Далее инфа с http://rodionblog.ru

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

, где $data – html-код для встраивания видео (обычно, начинается с <object> или <iframe>)
getVideoThumbUrl($url)

, где $url – src видеофайла

Выкладываю как есть:

function getVideoUrl ($data) {
if (preg_match("/&lt;iframe.*?src=\"([^\"]+)\".*?&gt;&lt;\/iframe&gt;/i", $data, $matches)) {
$url = $matches[1];
}
if (preg_match("/&lt;object.*?&gt;.*?&lt;param name=\"movie\" value=\"([^\"]+)\"( \/&gt;|&gt;&lt;\/param&gt;).*?&lt;\/object&gt;/i", $data, $matches)) {
$url = $matches[1];
}
return $url;
}
 
function getVideoThumbUrl ($url) {
if (!is_string($url) || empty($url)) return false;
$url = str_replace("&amp;amp;", "&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&amp;rt_movie_id=".$matches[1]."&amp;utf=1");
if ($xml) {
$url = (string) $xml-&gt;response-&gt;movie-&gt;thumbnailLink;
}
}
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";
}
//$url = "http://img-1.rutube.ru/thumbs/".$link[0].$link[1]."/".$link[2].$link[3]."/".$link."-2.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-&gt;video-&gt;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-&gt;video-&gt;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″ />

  • Очень может пригодится для видео портала!

  • Спасибо за статью, очень помогло! Жалко только что они превьюшки из середины ролика не делают(

You can follow any responses to this entry through the RSS 2.0 feed.