Получить максимальное разрешение миниатюр на YouTube
Я хочу получить наивысшее миниатюру youtube "maxresdefault.jpg"
Как этот
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
Я использую этот простой php-код
<?php
$youtub_id = "Cj6ho1-G6tw";
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
?>
Проблема с приведенным выше кодом есть видео, подобное этому http://youtu.be/VGazSZUYyf4 НЕ HD
И результатом будет серое маленькое 404 изображение youtube
http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg
Итак, как получить наивысший миниатюру youtube, поэтому, если "maxresdefault" недоступно, получите следующий большой значок "hqdefault", если не получите следующий "mqdefault" и т.д....
Я попытался использовать gdata youtube, но в любом случае видео hd или нет "maxresdefault" не отображается.
Ответы
Ответ 1
Причина в том, что разрешение Создание большинства карт составляет не менее 720p.
Глядя на api для этого конкретного видео, вы можете видеть, что нет maxresdefault
.
Только видео с разрешением 720p или выше имеют maxresdefault
. Это не указано в API в видео выше. Поэтому, чтобы получить максимальное разрешение, вы также должны проверить, работает ли maxresdefault
.
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/default.jpg' height='90' width='120' time='00:15:12.500' yt:name='default'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/mqdefault.jpg' height='180' width='320' yt:name='mqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg' height='360' width='480' yt:name='hqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/1.jpg' height='90' width='120' time='00:07:36.250' yt:name='start'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/2.jpg' height='90' width='120' time='00:15:12.500' yt:name='middle'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/3.jpg' height='90' width='120' time='00:22:48.750' yt:name='end'/>
Лучше всего использовать миниатюру самого высокого качества - использовать API и получить изображение с самым большим атрибутом yt:name
.
Порядок:
default
mqdefault
hqdefault
sddefault
Пример кода этого действия:
<?php
$youtub_id = "VGazSZUYyf4";
$images = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos/".$youtub_id."?v=2&alt=json"), true);
$images = $images['entry']['media$group']['media$thumbnail'];
$image = $images[count($images)-4]['url'];
$maxurl = "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
$max = get_headers($maxurl);
if (substr($max[0], 9, 3) !== '404') {
$image = $maxurl;
}
echo '<img src="'.$image.'">';
Это работает как на $youtub_id = "Cj6ho1-G6tw";
, так и на $youtub_id = "VGazSZUYyf4";
.
Ответ 2
Вы можете использовать getimagesize()
и проверить, существует ли изображение (там тоже file_exists()
, но в этом случае оно может работать не очень хорошо).
Вы можете использовать эту функцию для получения снимка с наибольшим разрешением для определенного видео.
Код:
function fetch_highest_res ($videoid) {
$resolutions = array('maxresdefault', 'hqdefault', 'mqdefault');
foreach($resolutions as $res) {
$imgUrl = "http://i.ytimg.com/vi/$videoid/$res.jpg";
if(@getimagesize(($imgUrl)))
return $imgUrl;
}
}
Применение:
echo fetch_highest_res('Cj6ho1-G6tw').'<br>';
echo fetch_highest_res('VGazSZUYyf4');
Вывод:
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg
Примечание. Это не может быть лучшим решением, и это будет работать, если вы не хотите использовать API.
Ответ 3
Все остальные ответы, которые зависят от статического URL-поиска, не поддерживаются. Они могут быть изменены, и вам может потребоваться изменить ваше приложение в любое время.
Для этого вы должны использовать Data API v3. Вы должны пойти с video- > list с id = videoId и part = snippet. В ответе вы проверите snippet.thumbnails. ['High']. Url
Загрузить значок миниатюр также содержит миниатюры.