Как получить миниатюру видео YouTube из API YouTube?
Если у меня есть URL-адрес видео на YouTube, есть ли способ использовать PHP и cURL для получения соответствующего эскиза из API YouTube?
37 ответов
Каждое видео на 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) для получения миниатюр изображений.
Вы можете использовать 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, которые вы планируете сделать. Тем не менее, несколько миллионов запросов в день бесплатны.
То, что сказал Асаф, верно. Однако не каждое видео на 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 с помощью PHP
- Получите информацию о видео YouTube с помощью JavaScript - JSON & API v2
Вы также можете использовать инструмент Генератор видеоинформации YouTube, чтобы получить всю информацию о видео 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, вы можете использовать:
https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp
И если вы не можете использовать .webp
Расширение вы можете сделать это так:
https://i.ytimg.com/vi/<video id>/mqdefault.jpg
Также, если вам нужна немасштабированная версия, используйте maxresdefault
вместо mqdefault
,
Примечание: я не уверен насчет соотношения сторон, если вы планируете использовать maxresdefault
,
Если вам нужно самое большое изображение с 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
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;
}
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
В API данных YouTube v3 вы можете получить эскизы видео с помощью функции videos->list. Из snippet.thumbnails.(Ключ) вы можете выбрать миниатюру по умолчанию, среднее или высокое разрешение, и получить ее ширину, высоту и URL.
Вы также можете обновить миниатюры с помощью миниатюр -> установить функциональность.
В качестве примеров вы можете ознакомиться с проектом примеров API YouTube. ( PHP.)
Вы можете получить запись видео, которая содержит URL-адрес миниатюры видео. Пример кода в ссылке. Или, если вы хотите разобрать XML, здесь есть информация. Возвращенный XML имеет media:thumbnail
элемент, который содержит 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 обслуживает эскизы с двух серверов. Вам просто нужно заменить
https://img.youtube.comhttps://i.ytimg.com
Примеры приведены с сервером https://i.ytimg.com только потому, что он короче, без какой-либо другой конкретной причины. Вы можете использовать оба.
Значок фонового изображения игрока (480x360):
WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/0.webp
JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/0.jpg
Эскизы видеокадров (120x90)
WebP:
Start: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/1.webp
Middle: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/2.webp
End: https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/3.webp
JPG:
Start: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/1.jpg
Middle: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/2.jpg
End: https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/3.jpg
Значок самого низкого качества (120x90)
WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/default.webp
JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/default.jpg
Миниатюра среднего качества (320x180)
WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/mqdefault.webp
JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg
Миниатюра в высоком качестве (480x360)
WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/hqdefault.webp
JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg
Миниатюра стандартного качества (640x480)
WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/sddefault.webp
JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg
Немасштабированное разрешение миниатюр
WebP
https://i.ytimg.com/vi_webp/<YouTube_Video_ID_HERE>/maxresdefault.webp
JPG
https://i.ytimg.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg
Еще одна хорошая альтернатива - использование API-интерфейса oEmbed, поддерживаемого YouTube.
Вы просто добавляете свой URL-адрес YouTube в URL-адрес oEmbed, и вы получите JSON, включая эскиз и HTML-код для встраивания.
Пример:
http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DDLzxrzFCyOs
Даст вам:
{
thumbnail_url: "https://i.ytimg.com/vi/DLzxrzFCyOs/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
}
Прочитайте документацию для получения дополнительной информации.
YOUTUBE API VERSION 3 ** ВВЕРХ И РАБОТАЕТ В 2 МИНУТАХ **
Если все, что вы хотите сделать, это поиск на YouTube и получить соответствующие свойства:
- Получить ПУБЛИЧНЫЙ API - эта ссылка дает хорошее направление
2. Используйте ниже строку запроса. Поисковый запрос (обозначаемый q =) в строке URL-адреса является стекоперемещающим для примера. Затем YouTube отправит вам ответ в формате json, где вы сможете проанализировать миниатюру, фрагмент, автора и т. Д.
https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackru&key=YOUR_API_KEY_HERE
Я использовал эскизы YouTube следующим образом:
$url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg';
$img = dirname(__FILE__) . '/youtubeThumbnail_' . $youtubeId . '.jpg';
file_put_contents($img, file_get_contents($url));
Помните, YouTube запрещает включать изображения непосредственно со своего сервера
Вы можете получить идентификатор видео из URL- адреса YouTube с помощью parse_url, parse_str, а затем вставить его в прогнозирующие URL-адреса для изображений. Спасибо YouTube за прогнозируемые URL
$videoUrl = "https://www.youtube.com/watch?v=8zy7wGbQgfw";
parse_str( parse_url( $videoUrl, PHP_URL_QUERY ), $my_array_of_vars );
$ytID = $my_array_of_vars['v']; //gets video ID
print "https://img.youtube.com/vi/<?php print $ytID?>/maxresdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/mqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/hqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/sddefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/default.jpg";
Вы можете использовать этот инструмент для создания миниатюр YouTube
Использование:
https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100®ionCode=us&key=**Your YouTube ID**
Выше ссылка. Используя это, вы можете найти характеристики YouTube видео. Найдя характеристики, вы можете получить видео выбранной категории. После этого вы можете найти выбранные видеоизображения, используя ответ Асафа.
Попробуйте описанный выше подход, и вы сможете проанализировать все из API YouTube.
API данных YouTube
YouTube предоставляет нам 4 сгенерированных изображения для каждого видео через Data API (v3), например:
https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg
https://i.ytimg.com/vi/V_zwalcR8DU/sddefault.jpg
https://i.ytimg.com/vi/V_zwalcR8DU/hqdefault.jpg
https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.jpg
Получение доступа к изображениям через API
- Сначала получите свой открытый ключ API в консоли Google API.
- Согласно справочнику по миниатюрам YouTube в документации API, вам необходимо получить доступ к ресурсам в snippet.thumbnails.
В соответствии с этим вам нужно сформулировать ваш URL следующим образом:
www.googleapis.com/youtube/v3/videos?part=snippet&id=
yourVideoId
и ключ =yourApiKey
Теперь замените yourVideoId и yourApiKey на ваш соответствующий идентификатор видео и api-ключ, и его ответом будет вывод в формате JSON, предоставляющий вам 4 ссылки в миниатюрах переменной сниппета (если все доступны).
https://i.ytimg.com/vi/<--Video ID-->/default.jpg
Размер изображения Вес 120 пикселей Высота 90 пикселей
https://i.ytimg.com/vi/<--Video ID-->/mqdefault.jpg
Размер изображения Вес 320 пикселей Высота 180 пикселей
https://i.ytimg.com/vi/<--Video ID-->/hqdefault.jpg
Размер изображения Вес 480 пикселей Высота 360 пикселей
https://i.ytimg.com/vi/<--Video ID-->/sddefault.jpg
Вес 640 пикселей Высота 480 пикселей
https://i.ytimg.com/vi/<--Video ID-->/maxresdefault.jpg
Размер изображенияРазмер изображения Вес 1280 пикселей Высота 720 пикселей
Просто чтобы добавить / расширить представленные решения, я считаю необходимым отметить, что, поскольку я сам столкнулся с этой проблемой, на самом деле можно получить несколько видеоклипов 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, которую я создал для эскиза 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;}
Я нашел этот отличный инструмент, который позволяет создавать изображение с помощью кнопки воспроизведения YouTube, размещенной над изображением:
- Установлено на сервере для скриптинга: https://github.com/halgatewood/youtube-thumbnail-enhancer
Хотя ответов уже много, но для новых посетителей оставлю свой с двумя вариантами получения миниатюры.
Получение миниатюры через YouTube Data API
- Зарегистрируйте свое приложение в Google Cloud Platform и активируйте библиотеку YouTube Data API v3 .
- Создайте ключ API в разделе «Учетные данные». Таким образом вы получите ключ для доступа к API
- И отправьте запрос на получение информации о видео, в том числе на получение миниатюры.
$api_key = 'YOUR_API_KEY';
$youtube_video_id = 'jNQXAC9IVRw';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://www.googleapis.com/youtube/v3/videos?key='.$api_key.'&part=snippet&id='.$youtube_video_id,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
curl_close($curl);
$response = json_decode($response,true);
print_r($response); // result with video information and thumbnails
Получение миниатюры по прямой ссылке без API
Помимо API, миниатюры можно получить по прямой ссылке, вот :
такhttps://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg
Рассмотрим этот вариант подробно:
https://i.ytimg.com/vi/<YOUTUBE_VIDEO_ID>/<SIZE_VALUE>.jpg
Где:
-
YOUTUBE_VIDEO_ID
: идентификатор вашего видео -
SIZE_VALUE
: Размер эскиза. Переменная может содержать такие значения:default
,mqdefault
,hqdefault
,sddefault
,maxresdefault
$youtube_video_id = 'jNQXAC9IVRw';
$size = 'hqdefault';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://i.ytimg.com/vi/{$youtube_video_id}/{$size}.jpg",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$response = curl_exec($curl);
curl_close($curl);
// Write the file
$handle = fopen("image/filename.jpg", 'w'); // set your directory and filename
fwrite($handle, $response);
fclose($handle);
Если вы используете публичный 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';
}
Я думаю, что это много ответов для миниатюр, но я хочу добавить несколько других 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
Надеюсь, это поможет кому-то в ближайшем будущем.
Способ 1:
Вы можете найти на YouTube видео со всей информацией на странице json, на которой есть даже "thumbnail_url" http://www.youtube.com/oembed?format=json&url={ваш URL-адрес видео находится здесь}
как окончательный вид URL + тестовый код PHP
$data = file_get_contents("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=_7s-6V_0nwA");
$json = json_decode($data);
var_dump($json);
Выход
object(stdClass)[1]
public 'width' => int 480
public 'version' => string '1.0' (length=3)
public 'thumbnail_width' => int 480
public 'title' => string 'how to reminder in window as display message' (length=44)
public 'provider_url' => string 'https://www.youtube.com/' (length=24)
public 'thumbnail_url' => string 'https://i.ytimg.com/vi/_7s-6V_0nwA/hqdefault.jpg' (length=48)
public 'author_name' => string 'H2 ZONE' (length=7)
public 'type' => string 'video' (length=5)
public 'author_url' => string 'https://www.youtube.com/channel/UC9M35YwDs8_PCWXd3qkiNzg' (length=56)
public 'provider_name' => string 'YouTube' (length=7)
public 'height' => int 270
public 'html' => string '<iframe width="480" height="270" src="https://www.youtube.com/embed/_7s-6V_0nwA?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>' (length=171)
public 'thumbnail_height' => int 360
подробнее вы также можете посмотреть https://www.youtube.com/watch?v=mXde7q59BI8 видеоурок 1
Способ 2: использование ссылки на YouTube с помощью ссылки https://img.youtube.com/vi/"insert-youtube-video-id-here" /default.jpg
Способ 3: использование исходного кода браузера для получения миниатюр с использованием URL-ссылки на видео - перейдите к исходному коду видео и найдите thumbnailurl Теперь вы можете использовать этот URL-адрес в своем коде sorce: {img src="https://img.youtube.com/ VI / "вставка-YouTube-видео-Ид здесь"/default.jpg"}
для получения дополнительной информации вы также можете посмотреть http://hzonesp.com/php/get-youtube-video-thumbnail-using-id/ или https://www.youtube.com/watch?v=9f6E8MeM6PI видеоурок 2
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');
Топ ответ оптимизирован для ручного использования. Идентификатор видео-токена без разделителей позволяет выбирать двойным щелчком мыши.
Каждое видео на YouTube имеет 4 сгенерированных изображения. Они предсказуемо отформатированы следующим образом:
https://img.youtube.com/vi/YOUTUBEVIDEOID/0.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/1.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/2.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/3.jpg
Первым в списке является полноразмерное изображение, а остальные - миниатюрные изображения. Миниатюрное изображение по умолчанию (т.е. один из 1.jpg
, 2.jpg
, 3.jpg
) является:
https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg
Для высококачественной версии эскиза используйте URL-адрес, подобный следующему:
https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg
Существует также версия эскиза среднего качества, использующая URL, похожий на HQ:
https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg
Для стандартной версии миниатюры используйте URL-адрес, подобный следующему:
https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg
Для версии эскиза с максимальным разрешением используйте URL-адрес, подобный следующему:
https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg
Все вышеперечисленные URL также доступны по http. Кроме того, немного более короткое имя хоста i3.ytimg.com
работает вместо img.youtube.com
в примере URL выше.
Кроме того, вы можете использовать API данных YouTube (v3) для получения миниатюр изображений.
Сохраните этот код в пустом файле.php и проверьте его.
<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
switch ($size) {
case 'medium':
$size = 'mqdefault';
break;
case 'high':
$size = 'hqdefault';
break;
case 'standard':
$size = 'sddefault';
break;
default:
$size = 'default';
break;
}
if ($ID) {
return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
}
return 'https://img.youtube.com/vi/ERROR/1.jpg';
}
Спасибо.
Это мое клиентское решение, не требующее ключа API.
YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))
Код:
import { parseURL, parseQueryString } from './url'
import { getImageSize } from './image'
const PICTURE_SIZE_NAMES = [
// 1280 x 720.
// HD aspect ratio.
'maxresdefault',
// 629 x 472.
// non-HD aspect ratio.
'sddefault',
// For really old videos not having `maxresdefault`/`sddefault`.
'hqdefault'
]
// - Supported YouTube URL formats:
// - http://www.youtube.com/watch?v=My2FRPA3Gf8
// - http://youtu.be/My2FRPA3Gf8
export default
{
parse: async function(url)
{
// Get video ID.
let id
const location = parseURL(url)
if (location.hostname === 'www.youtube.com') {
if (location.search) {
const query = parseQueryString(location.search.slice('/'.length))
id = query.v
}
} else if (location.hostname === 'youtu.be') {
id = location.pathname.slice('/'.length)
}
if (id) {
return {
source: {
provider: 'YouTube',
id
},
picture: await this.getPicture(id)
}
}
},
getPicture: async (id) => {
for (const sizeName of PICTURE_SIZE_NAMES) {
try {
const url = getPictureSizeURL(id, sizeName)
return {
type: 'image/jpeg',
sizes: [{
url,
...(await getImageSize(url))
}]
}
} catch (error) {
console.error(error)
}
}
throw new Error(`No picture found for YouTube video ${id}`)
},
getEmbeddedVideoURL(id, options = {}) {
return `https://www.youtube.com/embed/${id}`
}
}
const getPictureSizeURL = (id, sizeName) => `https://img.youtube.com/vi/${id}/${sizeName}.jpg`
Полезность image.js
:
// Gets image size.
// Returns a `Promise`.
function getImageSize(url)
{
return new Promise((resolve, reject) =>
{
const image = new Image()
image.onload = () => resolve({ width: image.width, height: image.height })
image.onerror = reject
image.src = url
})
}
Полезность url.js
:
// Only on client side.
export function parseURL(url)
{
const link = document.createElement('a')
link.href = url
return link
}
export function parseQueryString(queryString)
{
return queryString.split('&').reduce((query, part) =>
{
const [key, value] = part.split('=')
query[decodeURIComponent(key)] = decodeURIComponent(value)
return query
},
{})
}