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


2400

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


Вот некоторые функции PHP, которые я создал, чтобы получить лучший эскиз, доступный из метода URL без проверки API, на основе многих хороших ответов на этой странице: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
squarecandy

Ответы:


4615

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


27
На всякий случай, если кто-то еще совершит эту глупую ошибку - вы не сможете ее использовать http://www.img.youtube.com, толькоhttp://img.youtube.com
Ciaran Phillips

36
@NickG mqdefault16: 9
tomtastico

57
это где-то официально документировано?
bjunix

14
Эскизы с более высоким разрешением не гарантируются.
Салман А

63
@ clami219, что тоже неверно - очевидно, работает (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , правда: sddefaultи maxresdefaultНЕ ВСЕГДА ДОСТУПНЫ, хотя некоторые видео имеют их…
jave.web

398

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

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


6
К вашему сведению: я не изменил код для соответствия новой структуре JSON. Код в вашем getJSON неверен. Вы использовали jsoncвместо jsongetJSON. Это происходит из-за неправильной структуры JSON.
Mauris

5
Только первый пример можно использовать jsonc. НЕОБХОДИМО использовать примеры jQuery и PHP json. И я обновил код, чтобы соответствовать новой структуре JSON. Я использую код прямо сейчас, и он работает в прямом эфире. так что не говорите, что это не работает без чтения изменений. Спасибо!
Mauris

7
Примеры JQuery и PHP ДОЛЖНЫ использовать json ... Можете ли вы дать ссылку? Кроме того, запрос определенного номера версии API ( v=2) заботится об изменениях API.
Салман А

4
Вызов gdata не возвращает, доступен ли maxresdefault.jpg для видео, где оно доступно, только mq / hq / sd.
Аарон

2
API v3 ОЧЕНЬ плохо документирован. Они дают вам пример кода, но в разделе «ссылки» очень мало деталей. Некоторые вещи, которые должны быть относительно «очевидными», требуют крайних решений.
CashCow

256

То, что сказал Асаф, верно. Однако не каждое видео на 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, чтобы получить всю информацию о видео YouTube, отправив URL-адрес или идентификатор видео.


5
Вы также можете добиться того же результата с помощью официальной ссылки на YouTube img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg, где mJ8tq8AnNis - идентификатор видео
Ragaisis

4
Иногда некоторые из них не существуют - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg - обман, хотя, например, i1.ytimg.com/vi/r5R8gSgedh4/0.jpg - это нормально.
NoBugs

Спасибо за публикацию этого. У вас есть источник для этих данных? Это правильно, но я бы хотел ссылку на что-то из Youtube / Google и не могу ее найти.
Джонатан Ванаско

@JonathanVanasco, прости. Если вы имеете в виду официальный ресурс для точного содержания, я не знаю ни одного. И я не думаю, что есть цель опубликовать что-то подобное с их точки зрения.
AGMG

4
Инструмент «Генератор видеоинформации YouTube» в настоящее время не работает. Попробуйте отредактировать ответ.
giovannipds

74

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


3
Предполагается ли, что эти изображения будут помещены в тег img и должны просто работать, потому что я пытаюсь включить ссылку с правильным идентификатором видео YouTube и поместить их в тег img, но я продолжаю получать 404
Lion789

5
@ Lion789 Эти URL-адреса работают нормально, если они помещены в тег img. Возможно, проблема в неправильном идентификаторе видео или запрашиваемое разрешение может быть недоступно, но вы не получите 404 с этими ошибками. Проверьте URL-адрес тег img.
Naren

2
Подтверждено ли, что URL будут продолжать работать после остановки API v2?
Даниэле Б

1
@DanieleB Эти URL все еще работают. Знаете ли вы, как проверить, будут ли эти URL работать после API v2?
Нарен

53

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

2
Я нашел пример, где 0.jpg имеет разрешение 480x360, а maxresdefault.jpg имеет разрешение 1280x720
Нико

45

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

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

И если вы не можете использовать .webpрасширение файла, вы можете сделать это так:

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

Также, если вам нужна немасштабированная версия, используйте maxresdefaultвместо mqdefault.

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


2
Это не доступно для многих видео. Например: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG: это работает, если вы удалите _webpи измените расширение на .jpg. Рабочий пример: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , я не уверен насчет соотношения сторон.
LuTz

34

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

32

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

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

В качестве примеров вы можете ознакомиться с проектом примеров API YouTube . ( PHP .)


1
Я думаю, что это правильный способ сделать это, так как он исходит от члена по связям с Google Dev для API YouTube
Adonis K. Kakoulidis

31

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


2
Я не могу получить его с помощью simpleXML. Это довольно сложно!
Депутат Адитья

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

2
это плохое решение! почему бы не использовать Youtube api v3?
mpgn

19

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

16

API YouTube версии 3 будет запущен через 2 минуты

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

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

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

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


16

Другой хорошей альтернативой будет использование oEmbed API-интерфейса , поддерживаемого 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"
}

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


15

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

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

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

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


14

Я использовал эскизы 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 запрещает включать изображения непосредственно со своего сервера.



13

Просто чтобы добавить / расширить представленные решения, я считаю необходимым отметить, что, поскольку я сам столкнулся с этой проблемой, на самом деле можно получить несколько видеоклипов 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);

?>

13

API данных YouTube

YouTube предоставляет нам четыре сгенерированных изображения для каждого видео через API данных (v3), например:

  1. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  2. https://i.ytimg.com/vi/V_zwalcR8DU/sddefault.jpg

  3. https://i.ytimg.com/vi/V_zwalcR8DU/hqdefault.jpg

  4. https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.jpg

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

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

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

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


13

Вы можете получить идентификатор видео из 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://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails


11

Простая функция 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;}

10

Если вы используете общедоступный 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';
    }

8

Я думаю, что это большой ответ на миниатюру, но я хочу добавить несколько других 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, похожий на высококачественный:

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

6
    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');

5

Вот главный ответ, оптимизированный для ручного использования. Токен идентификатора видео без разделителей позволяет выбирать двойным щелчком мыши.

Каждое видео на YouTube содержит четыре сгенерированных изображения. Они предсказуемо отформатированы следующим образом:

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


4

Способ 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

Для получения дополнительной информации вы также можете посмотреть, как получить миниатюру видео YouTube с помощью id или 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 в свой исходный код:

{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}

Подробнее см. Также Как получить миниатюру видео YouTube с помощью id или https://www.youtube.com/watch?v=9f6E8MeM6PI видеоурок 2


Ссылки https://www.youtube.com/watch?v=mXde7q59BI8и https://www.youtube.com/watch?v=9f6E8MeM6PI(эффективно) битые.
Питер Мортенсен

YouTube запретил это видео из-за его политики. Надеюсь, эта статья поможет вам. www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
Хасан Саид

3

использование img.youtube.com/vi/YouTubeID/ImageFormat.jpg

Здесь форматы изображения отличаются как default, hqdefault, maxresdefault.


2

Это мое клиентское решение, не требующее ключа 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
    },
    {})
}

1

Вот простая функция, которую я создал для получения миниатюр. Это легко понять и использовать.

$ link - это ссылка на YouTube, скопированная точно так же, как в браузере, например, https://www.youtube.com/watch?v=BQ0mxQXmLsk.

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;
}

Это работает только тогда, когда URL не имеет других параметров запроса.
Ма Коби

да, все видео YouTube следуют формату во время просмотра, вы можете скопировать ссылку из браузера
Sodruldeen Mustapha

Что делать, если у вас есть другой параметр, как &t=227s?
Ма Коби

1
Я понимаю вашу точку зрения, но стандартные видео YouTube не имеют других параметров, но когда возникает необходимость, вы можете отфильтровать ссылку перед первой строкой функции. Нужна ли вам помощь в фильтрации ссылки, чтобы убедиться, что она игнорирует все остальные вещи, кроме необходимой?
Содрулдин Мустафа

1

Сохраните этот код в пустом .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';
}

Спасибо.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.