Получение самого высокого разрешения миниатюр 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" не отображается.

Author: Jim, 2013-08-03

4 answers

Причина в том, что разрешение Для максимального использования карт не превышает 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";.

 18
Author: David Chen, 2013-08-03 05:54:57

Вы можете использовать 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.

 6
Author: Amal Murali, 2016-01-06 03:44:21

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

Для этого вам следует использовать Data API v3. Вы должны пойти с запросом видео->список с идентификатором=видеоид и частью=фрагмент. В ответе вы проверите фрагмент.эскизы.['высокий'].url-адрес

 6
Author: Ibrahim Ulukaya, 2018-09-11 10:21:58

Благодаря ответу Ибрагима Улукая я смог понять, почему ранее правильный ответ Дэвида Чена больше не работает; Google устарел этот предыдущий рабочий API. ( Злой, плохой, непослушный, злой, Google.)

Следующий URL-адрес вернет список объектов миниатюр с использованием Data API v3:

https://www.googleapis.com/youtube/v3/videos?id={VIDEO_ID}&key={API_KEY}&part=snippet&fields=items/snippet/thumbnails

{VIDEO_ID} можно найти как часть любого URL-адреса видео на YouTube, и {API_KEY} требует, чтобы вы:

Как только у вас будет URL-адрес с вашими VIDEO_ID и API_KEY, заменяющими заполнители, вы должны вернуть JSON, который выглядит примерно так:

{
 "items": [
  {
   "snippet": {
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/default.jpg",
      "width": 120,
      "height": 90
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/mqdefault.jpg",
      "width": 320,
      "height": 180
     },
     "high": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/hqdefault.jpg",
      "width": 480,
      "height": 360
     },
     "standard": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/sddefault.jpg",
      "width": 640,
      "height": 480
     },
     "maxres": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/maxresdefault.jpg",
      "width": 1280,
      "height": 720
     }
    }
   }
  }
 ]
}

Оттуда, я полагаю, вы будете знать, что делать...?

Надеюсь, это поможет.

 1
Author: MikeSchinkel, 2018-06-02 04:39:41