Если у меня есть URL-адрес видео YouTube, есть ли способ использовать PHP и cURL для получения соответствующего эскиза из API YouTube?
Как получить миниатюру видео YouTube из API YouTube?
Ответы (32)
Каждое видео YouTube имеет четыре сгенерированных изображения. Они предсказуемо отформатированы следующим образом:
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) для получения уменьшенных изображений.
mqdefault
, _2_, _3_, _4_, _5_ или _6_.
- person tomtastico; 25.02.2014
sddefault
, но это просто субъективно ...
- person Ne AS; 09.11.2016
maxres2.jpg
вместо hq2.jpg
для getJSON. Это не удается из-за неправильной структуры JSON.
- person Hernan; 09.02.2019
Вы можете использовать API данных YouTube для получения эскизов видео, субтитров, описание, рейтинг, статистика и многое другое. API версии 3 требует ключа *. Получите ключ и создайте видео: список a > запрос:
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, которые вы планируете сделать. Однако несколько миллионов запросов в день бесплатны.
jsonc
. Примеры jQuery и PHP ДОЛЖНЫ использовать json
. И я обновил код, чтобы он соответствовал новой структуре JSON. Я использую код прямо сейчас, и он работает в прямом эфире. поэтому не говорите, что это не работает, не прочитав изменения. Спасибо!
- person mauris; 24.06.2012
jsonc
) отвечает за изменения API.
- person mauris; 24.06.2012
То, что сказал Асаф, верно. Однако не каждое видео YouTube содержит все девять эскизов. Кроме того, размеры изображений миниатюр зависят от видео (числа ниже основаны на одном). Гарантированно существуют некоторые эскизы:
Width | Height | URL
------|--------|----
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/1.jpg
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/2.jpg
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/3.jpg
120 | 90 | https://i.ytimg.com/vi/<VIDEO ID>/default.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mq1.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mq2.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mq3.jpg
320 | 180 | https://i.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/0.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hq1.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hq2.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hq3.jpg
480 | 360 | https://i.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg
Кроме того, некоторые другие эскизы могут существовать, а могут и не существовать. Их присутствие, вероятно, зависит от качества видео.
Width | Height | URL
------|--------|----
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sd1.jpg
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sd2.jpg
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sd3.jpg
640 | 480 | https://i.ytimg.com/vi/<VIDEO ID>/sddefault.jpg
1280 | 720 | https://i.ytimg.com/vi/<VIDEO ID>/hq720.jpg
1920 | 1080 | https://i.ytimg.com/vi/<VIDEO ID>/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
вместо mqdefault
.
Примечание. Я не уверен в соотношении сторон, если вы планируете использовать maxresdefault
.
Я сделал функцию, чтобы получать только существующие изображения с 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;
}
Вы можете получить запись видео, которая содержит URL-адрес видео эскиз. В ссылке есть пример кода. Или, если вы хотите проанализировать XML, есть информация здесь. Возвращенный XML содержит элемент media:thumbnail
, который содержит URL-адрес эскиза.
В API данных YouTube v3 вы можете получить эскизы видео с помощью videos-> list. Из snippet.thumbnails. (Ключ) , вы можете выбрать эскиз по умолчанию, среднего или высокого разрешения и получить его ширину, высоту и URL-адрес.
Вы также можете обновить эскизы с помощью функции эскизов-> установить.
В качестве примеров вы можете ознакомиться с образцами API YouTube проект. (PHP.)
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 oEmbed, поддерживаемого YouTube.
Вы просто добавляете URL-адрес YouTube к URL-адресу oEmbed, и вы получаете JSON, включая миниатюру и HTML-код для встраивания.
Пример:
http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DxUeJdWYdMmQ
Дала бы вам:
{
"height":270,
"width":480,
"title":"example video for 2020",
"thumbnail_width":480,
"html":"...",
"thumbnail_height":360,
"version":"1.0",
"provider_name":"YouTube",
"author_url":"https:\/\/www.youtube.com\/channel\/UCza6VSQUzCON- AzlsrOLwaA",
"thumbnail_url":"https:\/\/i.ytimg.com\/vi\/xUeJdWYdMmQ\/hqdefault.jpg",
"author_name":"Pokics",
"provider_url":"https:\/\/www.youtube.com\/",
"type":"video"
}
Прочтите документацию для получения дополнительной информации.
YouTube API версии 3 готов к работе за 2 минуты
Если все, что вам нужно, это выполнить поиск на YouTube и получить связанные свойства:
Получите общедоступный API - Эта ссылка дает хорошее направление
Используйте строку запроса ниже. Например, поисковый запрос (обозначенный q =) в строке URL - это stackoverflow. Затем YouTube отправит вам ответ JSON, в котором вы сможете проанализировать значок, фрагмент, автора и т. Д.
Использовать:
https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100®ionCode=us&key=**Your YouTube ID**
Выше ссылка. Используя это, вы можете узнать характеристики видео YouTube. Найдя характеристики, вы можете получить видео выбранной категории. После этого вы можете найти выбранные видеоизображения с помощью Ответ Асафа.
Попробуйте описанный выше подход, и вы сможете анализировать все из API YouTube.
Я использовал эскизы 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 запрещает включать изображения прямо со своего сервера.
Просто чтобы добавить / расширить представленные решения, я считаю необходимым отметить, что, поскольку у меня сама была эта проблема, на самом деле можно получить несколько видеороликов 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);
?>
API данных YouTube
YouTube предоставляет нам четыре сгенерированных изображения для каждого видео через Data API (v3), например,
Получение доступа к изображениям через API
- Сначала получите свой открытый ключ API на консоли Google API.
- Согласно ссылке на значок YouTube в документации API, вам необходимо получить доступ к ресурсам на snippet.thumbnails.
В соответствии с этим вам нужно сформулировать свой URL следующим образом:
www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`
Теперь измените свой идентификатор видео и ключ API на соответствующий идентификатор видео и ключ API, и его ответом будет вывод JSON, содержащий четыре ссылки в эскизах переменной фрагмента (если все они доступны).
Я нашел этот отличный инструмент, который позволяет создавать изображение с помощью кнопки воспроизведения YouTube, расположенной над изображением:
- Установлено на сервере для написания сценариев: https://github.com/halgatewood/youtube-thumbnail-enhancer < / а>
Вы можете получить идентификатор видео из 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/$ytID/maxresdefault.jpg";
print "https://img.youtube.com/vi/$ytID/mqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/hqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/sddefault.jpg";
print "https://img.youtube.com/vi/$ytID/default.jpg";
Вы можете использовать этот инструмент для создания эскизов YouTube
https://youtube-thumbnail-tool.com
Простая функция PHP, которую я создал для миниатюры YouTube, типы:
- hqdefault
- mqdefault
- sddefault
- maxresdefault
- Если вы используете общедоступный API, лучший способ сделать это - использовать операторы
.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;}
дефолт
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;}
Если видео является общедоступным или частным, вы устанавливаете миниатюру с помощью метода URL. Если видео является частным, вы используете API для получения миниатюры.
YouTube обслуживает эскизы с двух серверов. Вам просто нужно заменить ‹YouTube_Video_ID_HERE› на свой собственный идентификатор видео YouTube. В наши дни webP - лучший формат для быстрой загрузки изображений из-за небольшого размера изображения.
<?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';
}
https://img.youtube.com https://i.ytimg.com
Примеры - с сервером https://i.ytimg.com только потому, что он короче, без какой-либо другой конкретной причины. Вы можете использовать оба.
Миниатюра фона проигрывателя (480x360):
Эскизы видеокадров (120x90)
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
Уменьшенное изображение самого низкого качества (120 x 90)
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
Миниатюра среднего качества (320 x 180)
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
Миниатюра в высоком качестве (480x360)
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
Миниатюра стандартного качества (640 x 480)
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
Немасштабированное разрешение миниатюр
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
Я думаю, что это большой ответ на миниатюры, но я хочу добавить несколько других URL-адресов, чтобы очень легко получить миниатюру YouTube. Я просто беру текст из ответа Асафа. Вот несколько URL-адресов для получения эскизов YouTube:
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
Для высококачественной версии миниатюры используйте URL-адрес, подобный этому:
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-адрес, подобный этому:
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
Метод 1:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Вы можете найти всю информацию о видео YouTube на странице JSON, на которой есть даже "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {здесь находится URL вашего видео}
Как конечный URL-адрес + тестовый код PHP
Подробнее см. В разделе Как получить YouTube уменьшенное изображение видео с использованием идентификатора или https://www.youtube.com/watch?v=mXde7q59BI8 видеоурок 1
$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
Метод 2:
Используя ссылку на изображение YouTube, https://img.youtube.com/vi/ "insert-youtube -video-id-here "/default.jpg
Метод 3:
Использование исходного кода браузера для получения миниатюры с помощью URL-ссылки видео - перейдите к исходному коду видео и выполните поиск по миниатюре. Теперь вы можете использовать этот URL в своем исходном коде:
Подробнее см. Как получить видео с YouTube уменьшенное изображение с использованием идентификатора или https://www.youtube.com/watch?v=9f6E8MeM6PI 2
{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}
Выход
Каждое видео YouTube имеет четыре сгенерированных изображения. Они предсказуемо отформатированы следующим образом:
Первый в списке - это полноразмерное изображение, а остальные - миниатюрные изображения. Изображение эскиза по умолчанию (т. Е. Одно из 1.jpg
, 2.jpg
, 3.jpg
):
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
Для высококачественной версии миниатюры используйте URL-адрес, подобный этому:
https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg
Существует также версия миниатюры среднего качества с URL-адресом, аналогичным HQ:
https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg
Для версии эскиза со стандартным определением используйте URL-адрес, подобный этому:
https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg
Для версии миниатюры с максимальным разрешением используйте URL-адрес, подобный этому:
https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg
Все вышеперечисленные URL-адреса также доступны через HTTP. Кроме того, немного более короткое имя хоста i3.ytimg.com
работает вместо img.youtube.com
в приведенных выше примерах URL.
https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg
Кроме того, вы можете использовать API данных YouTube (v3) для получения миниатюрных изображений.
Это мое решение, предназначенное только для клиентской стороны и не требующее ключа API.
Код:
YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))
Утилита image.js
:
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`
Утилита url.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
})
}
Используйте 1_
// 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
},
{})
}
Здесь форматы изображений разные, такие как default, hqdefault, maxresdefault.
Вот простая функция, которую я создал для получения эскизов. Его легко понять и использовать.
$ link - это ссылка YouTube, скопированная точно так же, как в браузере, например, https://www.youtube.com/watch?v=BQ0mxQXmLsk
Сохраните этот код в пустом файле .php и проверьте его.
function get_youtube_thumb($link){
$new = str_replace('https://www.youtube.com/watch?v=', '', $link);
$thumbnail = 'https://img.youtube.com/vi/' . $new . '/0.jpg';
return $thumbnail;
}
Спасибо.
<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';
}
Сохранить файл как
<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';
}
Вот простая функция PHP, которая спускается с самого высокого качества до самого лучшего, которое она находит на YT. Возможно, кому-то это поможет. Вы также можете добавить ошибки с помощью cURL, чтобы они даже не отображались, когда видео больше нет в YT. (Это может не работать с видео, не внесенными в список: иногда изображение отображается, но видео все равно будет недоступно для всех.)
var maxVideos = 5;
$(document).ready(function(){
$.get(
"https://www.googleapis.com/youtube/v3/videos",{
part: 'snippet,contentDetails',
id:'your_video_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>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<div class="main">
<ul id="thumbnail"> </ul>
</div>
</body>
</html>
Использовать так же просто, как:
Функция:
echo '<img src="';
echo get_yt_thumb($ytVidCode);
echo '">';
Вот несколько функций PHP, которые я создал, чтобы получить лучший эскиз, доступный из метода URL без проверки связи с API, на основе множества хороших ответов на этой странице: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
function get_yt_thumb($ytVidCode) {
$url = "https://img.youtube.com/vi/$ytVidCode/maxresdefault.jpg";
if(remote_file_exists($url)) {
$vid_thumb = "https://img.youtube.com/vi/$ytVidCode/maxresdefault.jpg";
}
else {
$url = "https://img.youtube.com/vi/$ytVidCode/sddefault.jpg";
if(remote_file_exists($url)) {
$vid_thumb = "https://img.youtube.com/vi/$ytVidCode/sddefault.jpg";
}
else {
$url = "https://img.youtube.com/vi/$ytVidCode/hqdefault.jpg";
if(remote_file_exists($url)) {
$vid_thumb = "https://img.youtube.com/vi/$ytVidCode/hqdefault.jpg";
}
else {
$url = "https://img.youtube.com/vi/$ytVidCode/default.jpg";
if(remote_file_exists($url)) {
$vid_thumb = "https://img.youtube.com/vi/$ytVidCode/default.jpg";
}
}
}
}
return $vid_thumb;
}