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

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

На каждом видеоролике 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) для получения миниатюр.

Вы можете использовать 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) "http://img.ruphp.com/php/default.jpg" ["width"]=> int(120) ["height"]=> int(90) } ["medium"]=> object(stdClass)#7 (3) { ["url"]=> string(48) "http://img.ruphp.com/php/mqdefault.jpg" ["width"]=> int(320) ["height"]=> int(180) } ["high"]=> object(stdClass)#8 (3) { ["url"]=> string(48) "http://img.ruphp.com/php/hqdefault.jpg" ["width"]=> int(480) ["height"]=> int(360) } ["standard"]=> object(stdClass)#9 (3) { ["url"]=> string(48) "http://img.ruphp.com/php/sddefault.jpg" ["width"]=> int(640) ["height"]=> int(480) } ["maxres"]=> object(stdClass)#10 (3) { ["url"]=> string(52) "http://img.ruphp.com/php/maxresdefault.jpg" ["width"]=> int(1280) ["height"]=> int(720) } } по object(stdClass)#5 (5) { ["default"]=> object(stdClass)#6 (3) { ["url"]=> string(46) "http://img.ruphp.com/php/default.jpg" ["width"]=> int(120) ["height"]=> int(90) } ["medium"]=> object(stdClass)#7 (3) { ["url"]=> string(48) "http://img.ruphp.com/php/mqdefault.jpg" ["width"]=> int(320) ["height"]=> int(180) } ["high"]=> object(stdClass)#8 (3) { ["url"]=> string(48) "http://img.ruphp.com/php/hqdefault.jpg" ["width"]=> int(480) ["height"]=> int(360) } ["standard"]=> object(stdClass)#9 (3) { ["url"]=> string(48) "http://img.ruphp.com/php/sddefault.jpg" ["width"]=> int(640) ["height"]=> int(480) } ["maxres"]=> object(stdClass)#10 (3) { ["url"]=> string(52) "http://img.ruphp.com/php/maxresdefault.jpg" ["width"]=> int(1280) ["height"]=> int(720) } } 

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

Исходная статья .

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Как получить информацию о видео YouTube с помощью PHP
  • Получить информацию о видео YouTube с помощью JavaScript – JSON & API v2

Также используйте инструмент YouTube Video Information Generator для получения всей информации о видео YouTube, отправив URL-адрес или идентификатор видео.

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

Если вы хотите получить наибольшее изображение с 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); 

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

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

И если вы не можете использовать расширение .webp вы можете сделать это следующим образом:

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

Кроме того, если вам нужна maxresdefault версия, используйте maxresdefault вместо mqdefault .

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

В YouTube Data API v3 вы можете получить миниатюры видео с функцией video-> list . Из snippet.thumbnails. (Key) вы можете выбрать миниатюру по умолчанию, среднего или высокого разрешения и получить ее ширину, высоту и URL.

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

Например, вы можете просмотреть проект YouTube API Samples . ( PHP ).

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

Я сделал функцию для извлечения только существующих изображений с 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; } 
 // 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; 

YouTube принадлежит Google, и Google любит иметь разумное количество изображений для разных размеров экрана, поэтому его изображения хранятся в разных размерах, вот пример того, как ваш эскиз понравится ему

Миниатюра низкого качества:

 http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg 

Миниатюра среднего качества:

 http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg 

Миниатюра высокого качества:

 http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg 

Миниатюра максимального качества:

 http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg 

YOUTUBE API ВЕРСИЯ 3 ** ВВЕРХ И РАБОТА В 2 МИНУТ **

Если все, что вы хотите сделать, это поиск на YouTube и получение связанных свойств:

  1. Получить PUBLIC API – эта ссылка дает хорошее направление

2.Используйте строку запроса. Поисковый запрос (обозначаемый q = ) в строке url представляет собой stackoverflow для примера. Затем YouTube отправит вам ответ json, где вы сможете разобрать миниатюру, фрагмент, автор и т. Д.

 https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackoverflow&key=YOUR_API_KEY_HERE 

Использование:

 https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100&regionCode=us&key=**Your YouTube ID** 

Выше ссылка. Используя это, вы можете найти характеристики YouTube для видео. После определения характеристик вы можете получить видео из выбранной категории. После этого вы можете найти выбранные видеоизображения, используя ответ Асафа .

Попробуйте вышеупомянутый подход, и вы можете анализировать все из API YouTube.

Я использовал YouTube Thumbnails таким образом:

 $url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg'; $img = dirname(__FILE__) . '/youtubeThumbnail_' . $youtubeId . '.jpg'; file_put_contents($img, file_get_contents($url)); 

Помните, что YouTube запрещает включать Изображения непосредственно со своего сервера

Я нашел этот отличный инструмент, который позволяет вам создать изображение с помощью кнопки воспроизведения YouTube, размещенной над изображением:

Просто для добавления / расширения предлагаемых решений, я считаю, что необходимо отметить, что, поскольку у меня была эта проблема, можно фактически захватить несколько видеороликов YouTube, в данном случае миниатюр с одним HTTP-запросом:

Используя Rest Client, в этом случае HTTPFUL вы можете сделать что-то вроде этого:

 <?php header("Content-type", "application/json"); //download the httpfull.phar file from http://phphttpclient.com include("httpful.phar"); $youtubeVidIds= array("nL-rk4bgJWU", "__kupr7KQos", "UCSynl4WbLQ", "joPjqEGJGqU", "PBwEBjX3D3Q"); $response = \Httpful\Request::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."") ->send(); print ($response); ?> в <?php header("Content-type", "application/json"); //download the httpfull.phar file from http://phphttpclient.com include("httpful.phar"); $youtubeVidIds= array("nL-rk4bgJWU", "__kupr7KQos", "UCSynl4WbLQ", "joPjqEGJGqU", "PBwEBjX3D3Q"); $response = \Httpful\Request::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."") ->send(); print ($response); ?> 

простая php-функция, созданная для миниатюры youtube, и типы

  • по умолчанию
  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault

     function get_youtube_thumb($link,$type){ $video_id = explode("?v=", $link); if (empty($video_id[1])){ $video_id = explode("/v/", $link); $video_id = explode("&", $video_id[1]); $video_id = $video_id[0]; } $thumb_link = ""; if($type == 'default' || $type == 'hqdefault' || $type == 'mqdefault' || $type == 'sddefault' || $type == 'maxresdefault'){ $thumb_link = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg'; }elseif($type == "id"){ $thumb_link = $video_id; } return $thumb_link;} 

Если вы используете публичный api, лучший способ сделать это – использовать инструкции if.

Если видео является общедоступным или незарегистрированным, вы устанавливаете миниатюру с помощью метода url. Если видео является приватным, вы используете api для получения миниатюры.

 <?php if($video_status == 'unlisted'){ $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg'; $video_status = '<i class="fa fa-lock"></i>&nbsp;Unlisted'; } elseif($video_status == 'public'){ $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg'; $video_status = '<i class="fa fa-eye"></i>&nbsp;Public'; } elseif($video_status == 'private'){ $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url']; $video_status = '<i class="fa fa-lock"></i>&nbsp;Private'; } 

Еще одна хорошая альтернатива – использовать API oEmbed, который поддерживается YouTube.

Вы просто добавляете свой URL-адрес YouTube в oEmbed url, и вы получите JSON, включая миниатюру и html-код для встраивания.

Пример:

 http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DDLzxrzFCyOs 

Дала бы вам:

 { thumbnail_url: "http://img.ruphp.com/php/hqdefault.jpg", width: 459, author_name: "AllKindsOfStuff", version: "1.0", author_url: "https://www.youtube.com/channel/UCLNd5EtH77IyN1frExzwPRQ", thumbnail_width: 480, type: "video", provider_url: "https://www.youtube.com/", html: "<iframe width="459" height="344" src="https://www.youtube.com/embed/DLzxrzFCyOs?feature=oembed" frameborder="0" allowfullscreen></iframe>", title: "Some title bla bla foo bar", thumbnail_height: 360, provider_name: "YouTube", height: 344 } 

Прочтите документацию для получения дополнительной информации .

Я думаю, что у них много ответов на миниатюру, но я хочу добавить некоторые другие URL-адреса, чтобы получить эскиз youtube очень легко. Я просто беру текст из ответа Асафа. Вот несколько url для получения миниатюр youtube

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

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

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

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

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

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

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

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

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

Надеюсь, что это поможет кому-то в ближайшем будущем.

API данных YouTube

YouTube Предоставляет нам 4 сгенерированных изображения для каждого видео через API данных (v3), For Ex –

  1. http://img.ruphp.com/php/maxresdefault.jpg

  2. http://img.ruphp.com/php/sddefault.jpg

  3. http://img.ruphp.com/php/hqdefault.jpg

  4. http://img.ruphp.com/php/mqdefault.jpg

Получение доступа к изображениям через API

  1. Сначала получите свой общедоступный ключ API в консоли API Google .
  2. Как в ссылке на эскизы YouTube в документации по API , вам нужно получить доступ к ресурсам в snippet.thumbnails.
  3. В соответствии с этим вам нужно будет рассказать свой URL-адрес следующим образом:

    http://www.googleapis.com/youtube/v3/videos?part=snippet&id= yourVideoId & key = yourApiKey

Теперь измените yourVideoId и yourApiKey на свой соответствующий идентификатор видео и api-ключ, и его ответом будет вывод JSON, обеспечивающий 4 ссылки в миниатюрах переменной фрагмента (если все доступно).

  function get_video_thumbnail( $src ) { $url_pieces = explode('/', $src); if( $url_pieces[2] == 'dai.ly'){ $id = $url_pieces[3]; $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE); $thumbnail = $hash['thumbnail_large_url']; }else if($url_pieces[2] == 'www.dailymotion.com'){ $id = $url_pieces[4]; $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE); $thumbnail = $hash['thumbnail_large_url']; }else if ( $url_pieces[2] == 'vimeo.com' ) { // If Vimeo $id = $url_pieces[3]; $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php')); $thumbnail = $hash[0]['thumbnail_large']; } elseif ( $url_pieces[2] == 'youtu.be' ) { // If Youtube $extract_id = explode('?', $url_pieces[3]); $id = $extract_id[0]; $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg'; }else if ( $url_pieces[2] == 'player.vimeo.com' ) { // If Vimeo $id = $url_pieces[4]; $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php')); $thumbnail = $hash[0]['thumbnail_large']; } elseif ( $url_pieces[2] == 'www.youtube.com' ) { // If Youtube $extract_id = explode('=', $url_pieces[3]); $id = $extract_id[1]; $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg'; } else{ $thumbnail = tim_thumb_default_image('video-icon.png', null, 147, 252); } return $thumbnail; } get_video_thumbnail('https://vimeo.com/154618727'); get_video_thumbnail('https://www.youtube.com/watch?v=SwU0I7_5Cmc'); get_video_thumbnail('https://youtu.be/pbzIfnekjtM'); get_video_thumbnail('http://www.dailymotion.com/video/x5thjyz'); 
 public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg"; vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID); 

Сохранить файл как .js

  var maxVideos = 5; $(document).ready(function(){ $.get( "https://www.googleapis.com/youtube/v3/videos",{ part: 'snippet,contentDetails', id:'your_vedio_id', kind: 'youtube#videoListResponse', maxResults: maxVideos, regionCode: 'IN', key: 'Your_API_KEY'}, function(data){ var output; $.each(data.items, function(i, item){ console.log(item); thumb = item.snippet.thumbnails.high.url; output = '<div id="img"><img src="' + thumb + '"></div>'; $('#thumbnail').append(output); }) } ); }); 
 .main{ width:1000px; margin:auto; } #img{ float:left; display:inline-block; margin:5px; } 
 <!DOCTYPE html> <html> <head> <title>Thumbnails</title> </head> <body> <div class="main"> <ul id="thumbnail"> </ul> </div> </body> </html>