Как получить миниатюру видео YouTube из API YouTube? - PullRequest
2210 голосов
/ 15 января 2010

Если у меня есть URL-адрес видео на YouTube, есть ли способ использовать PHP и cURL для получения соответствующего эскиза из API YouTube?

Ответы [ 31 ]

4265 голосов
/ 15 января 2010

Каждое видео на YouTube содержит 4 сгенерированных изображения. Они предсказуемо отформатированы следующим образом:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg

Первым в списке является полноразмерное изображение, а остальные - уменьшенные изображения. По умолчанию миниатюрное изображение (т. Е. Одно из 1.jpg, 2.jpg, 3.jpg):

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

Для высококачественной версии эскиза используйте URL-адрес, подобный следующему:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

Существует также версия эскиза среднего качества, использующая URL, аналогичный HQ:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Для стандартной версии миниатюры используйте URL-адрес, подобный следующему:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Для версии эскиза с максимальным разрешением используйте URL-адрес, подобный следующему:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Все вышеперечисленные URL-адреса также доступны по http. Кроме того, немного более короткое имя хоста i3.ytimg.com работает вместо img.youtube.com в приведенных выше URL-адресах.

Кроме того, вы можете использовать API данных YouTube (v3) для получения миниатюр изображений.

376 голосов
/ 21 января 2010

Вы можете использовать API данных YouTube для получения миниатюр видео, подписи, описания, рейтинга, статистики и многого другого. API версии 3 требует ключ *. Получите ключ и создайте видео: список запрос:

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

Пример PHP-кода

$data = file_get_contents("https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=T0Jqdjbed40");
$json = json_decode($data);
var_dump($json->items[0]->snippet->thumbnails);

выход

object(stdClass)#5 (5) {
  ["default"]=>
  object(stdClass)#6 (3) {
    ["url"]=>
    string(46) "https://i.ytimg.com/vi/T0Jqdjbed40/default.jpg"
    ["width"]=>
    int(120)
    ["height"]=>
    int(90)
  }
  ["medium"]=>
  object(stdClass)#7 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/mqdefault.jpg"
    ["width"]=>
    int(320)
    ["height"]=>
    int(180)
  }
  ["high"]=>
  object(stdClass)#8 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/hqdefault.jpg"
    ["width"]=>
    int(480)
    ["height"]=>
    int(360)
  }
  ["standard"]=>
  object(stdClass)#9 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/sddefault.jpg"
    ["width"]=>
    int(640)
    ["height"]=>
    int(480)
  }
  ["maxres"]=>
  object(stdClass)#10 (3) {
    ["url"]=>
    string(52) "https://i.ytimg.com/vi/T0Jqdjbed40/maxresdefault.jpg"
    ["width"]=>
    int(1280)
    ["height"]=>
    int(720)
  }
}

* Мало того, что вам нужен ключ, вас могут попросить предоставить платежную информацию в зависимости от количества запросов API, которые вы планируете сделать. Тем не менее, несколько миллионов запросов в день бесплатны.

Источник статьи .

225 голосов
/ 12 декабря 2013

То, что сказал Асаф, верно. Однако не каждое видео на YouTube содержит все девять миниатюр. Кроме того, размеры уменьшенных изображений зависят от видео (приведенные ниже цифры основаны на одном).

Существует семь миниатюр, которые гарантированно существуют:

| Thumbnail Name      | Size (px) | URL                                              |
|---------------------|-----------|--------------------------------------------------|
| Player Background   | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/0.jpg         |
| Start               | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/1.jpg         |
| Middle              | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/2.jpg         |
| End                 | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/3.jpg         |
| High Quality        | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg |
| Medium Quality      | 320x180   | https://i1.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg |
| Normal Quality      | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/default.jpg   |

Кроме того, две другие миниатюры могут существовать или не существовать. Их присутствие, вероятно, основано на том, высокое ли качество видео.

| Thumbnail Name      | Size (px) | URL                                                  |
|---------------------|-----------|------------------------------------------------------|
| Standard Definition | 640x480   | https://i1.ytimg.com/vi/<VIDEO ID>/sddefault.jpg     |
| Maximum Resolution  | 1920x1080 | https://i1.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg |

Вы можете найти скрипты JavaScript и PHP для получения миниатюр и других Информация YouTube в:

Вы также можете использовать Генератор видеоинформации YouTube , чтобы получить всю информацию о видео YouTube, отправив URL или идентификатор видео.

70 голосов
/ 23 августа 2013

В YouTube API V3 мы также можем использовать эти URL-адреса для получения миниатюр ... Они классифицируются по качеству.

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/default.jpg -   default
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg - medium 
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg - high
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/sddefault.jpg - standard

А для максимального разрешения ..

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Одним из преимуществ этих URL-адресов перед URL-адресами в первом ответе является то, что эти URL-адреса не блокируются брандмауэрами.

50 голосов
/ 22 декабря 2010

Если вам нужно самое большое изображение с YouTube для определенного идентификатора видео, тогда URL-адрес должен быть примерно таким:

http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg

Используя API, вы можете выбрать миниатюру изображения по умолчанию. Простой код должен выглядеть примерно так:

//Grab the default thumbnail image
$attrs = $media->group->thumbnail[1]->attributes();
$thumbnail = $attrs['url'];
$thumbnail = substr($thumbnail, 0, -5);
$thumb1 = $thumbnail."default.jpg";

// Grab the third thumbnail image
$thumb2 = $thumbnail."2.jpg";

// Grab the fourth thumbnail image.
$thumb3 = $thumbnail."3.jpg";

// Using simple cURL to save it your server.
// You can extend the cURL below if you want it as fancy, just like
// the rest of the folks here.

$ch = curl_init ("$thumb1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata = curl_exec($ch);
curl_close($ch);

// Using fwrite to save the above
$fp = fopen("SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg", 'w');

// Write the file
fwrite($fp, $rawdata);

// And then close it.
fclose($fp);
42 голосов
/ 08 июня 2015

Если вы хотите избавиться от «черных полос» и сделать это так, как это делает YouTube, вы можете использовать:

https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp

И если вы не можете использовать расширение .webp, вы можете сделать это так:

https://i.ytimg.com/vi/<video id>/mqdefault.jpg

Также, если вам нужна немасштабированная версия, используйте maxresdefault вместо mqdefault.

Примечание: я не уверен насчет соотношения сторон, если вы планируете использовать maxresdefault.

32 голосов
/ 18 декабря 2013

Я сделал функцию только для загрузки существующих изображений с YouTube

function youtube_image($id) {
    $resolution = array (
        'maxresdefault',
        'sddefault',
        'mqdefault',
        'hqdefault',
        'default'
    );

    for ($x = 0; $x < sizeof($resolution); $x++) {
        $url = '//img.youtube.com/vi/' . $id . '/' . $resolution[$x] . '.jpg';
        if (get_headers($url)[0] == 'HTTP/1.0 200 OK') {
            break;
        }
    }
    return $url;
}
30 голосов
/ 28 мая 2013

В API данных YouTube v3 вы можете получить эскизы видео с помощью функции videos-> list . Из snippet.thumbnails. (Ключ) вы можете выбрать миниатюру по умолчанию, среднее или высокое разрешение и получить ее ширину, высоту и URL.

Вы также можете обновить эскизы с помощью функции thumbnails-> set .

Например, вы можете ознакомиться с проектом Примеры API YouTube . ( PHP единицы .)

28 голосов
/ 15 января 2010

Вы можете получить Запись видео , которая содержит URL-адрес миниатюры видео. Пример кода в ссылке. Или, если вы хотите разобрать XML, есть информация здесь . Возвращенный XML содержит элемент media:thumbnail, который содержит URL-адрес миниатюры.

23 голосов
/ 04 июля 2013
// Get image form video URL
$url = $video['video_url'];

$urls = parse_url($url);

//Expect the URL to be http://youtu.be/abcd, where abcd is the video ID
if ($urls['host'] == 'youtu.be') :

    $imgPath = ltrim($urls['path'],'/');

//Expect the URL to be http://www.youtube.com/embed/abcd
elseif (strpos($urls['path'],'embed') == 1) :

    $imgPath = end(explode('/',$urls['path']));

//Expect the URL to be abcd only
elseif (strpos($url,'/') === false):

    $imgPath = $url;

//Expect the URL to be http://www.youtube.com/watch?v=abcd
else :

    parse_str($urls['query']);

    $imgPath = $v;

endif;
...