Если у меня есть 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 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 и получение связанных свойств:
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®ionCode=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, и типы
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> Unlisted'; } elseif($video_status == 'public'){ $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg'; $video_status = '<i class="fa fa-eye"></i> Public'; } elseif($video_status == 'private'){ $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url']; $video_status = '<i class="fa fa-lock"></i> 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
Надеюсь, что это поможет кому-то в ближайшем будущем.
YouTube Предоставляет нам 4 сгенерированных изображения для каждого видео через API данных (v3), For Ex –
В соответствии с этим вам нужно будет рассказать свой 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>