Вопрос: Как получить миниатюру видео YouTube с помощью API YouTube?


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


2005


источник


Ответы:


На каждом видеоролике 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в приведенных выше примерах.

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


3837



Вы можете использовать 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, которые вы планируете сделать. Тем не менее, несколько миллионов запросов в день бесплатны.

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


356



То, что сказал Асаф, прав. Однако не все видеоролики YouTube содержат все девять миниатюр, но для каждого видео есть семь миниатюр. Они есть:

(Размер изображения зависит от видео.)

  • Значок фона проигрывателя (480x360 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/0.jpg

  • Начать эскиз (120x90 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/1.jpg

  • Средний миниатюрный (120x90 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/2.jpg

  • End Thumbnail (120x90 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/3.jpg

  • Высокое качество Thumbnail (480x360 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/hqdefault.jpg

  • Миниатюра среднего качества (320x180 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/mqdefault.jpg

  • Нормальное качество Thumbnail (120x90 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/default.jpg

Кроме того, следующие два миниатюры могут быть или не существовать. Для видео HQ они существуют.

  • Миниатюра стандартного разрешения (640x480 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/sddefault.jpg

  • Максимальное разрешение Thumbnail (1920x1080 пикселей)
    https://i1.ytimg.com/vi/G0wGs3useV8/maxresdefault.jpg

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

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


198



В 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-адреса не блокируются брандмауэрами.


66



If you want the biggest image from YouTube for a specific video ID, then the URL should be something like this:

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

Using the API, you can pick up default thumbnail image. Simple code should be something like this:

//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);

46



If you want to get rid of the "black bars" and do it like YouTube does it, you can use :

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

And if you can't use .webp extension you can do it like this :

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

Also, if you need the unscaled version use maxresdefault instead of mqdefault.

Note: I'm not sure about the aspect ratio if you're planning to use maxresdefault.


39



In YouTube Data API v3, you can get video's thumbnails with the videos->list function. From snippet.thumbnails.(key), you can pick the default, medium or high resolution thumbnail, and get its width, height and URL.

You can also update thumbnails with the thumbnails->set functionality.

For examples, you can check out the YouTube API Samples project. (PHP ones.)


26



I made a function to only fetch existing images from 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;
}

26