
Стала необходимость получить картинку для роликов вставленных с 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("/<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;
}
}
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->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″ />