Як я можу отримати мініатюру відео YouTube від API YouTube?


2397

Якщо у мене є URL-адреса відео YouTube, чи є спосіб використовувати PHP та CURL, щоб отримати пов'язаний мініатюру з API YouTube?


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

Відповіді:


4607

Кожне відео 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-адреси, подібної до штаб-квартири:

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) для отримання мініатюрних зображень.


27
Про всяк випадок, якщо хтось зробить цю тупу помилку - ви не можете використовувати http://www.img.youtube.comлишеhttp://img.youtube.com
Ciaran Phillips

36
@NickG mqdefault- 16: 9
tomtastico

57
це десь офіційно задокументовано?
bjunix

14
Мініатюри з більшою роздільною здатністю не гарантовано існують.
Салман

63
@ clami219, що теж помилково - очевидно, працює (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , правда: sddefaultі maxresdefaultНЕ ЗАВЖДИ у деяких відео є їх хоч ....
jave.web

398

Ви можете використовувати API даних YouTube для отримання мініатюр відео, підписів, опису, рейтингу, статистики та іншого. Версія 3 API вимагає ключа *. Отримайте ключ та створіть відео: запит на список :

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
FYI: я не змінив код, щоб він відповідав новій структурі 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
Нарен

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

У YouTube Data API v3 ви можете отримати ескізи відео за допомогою функції відео- > список . З snippet.thumbnails. (Key) ви можете вибрати мініатюру середньої або високої роздільної здатності та отримати її ширину, висоту та URL-адресу.

Ви також можете оновити мініатюри за допомогою функцій мініатюр-> встановити .

Наприклад, ви можете ознайомитися з проектом API зразків API YouTube . ( PHP .)


1
Я здогадуюсь, що це правильний спосіб зробити це, оскільки він походить від члена стосунків Google Dev для ютуб api
Адоніс К. Какулідіс

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

Google належить 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

YouTube API версії 3 працює і працює за 2 хвилини

Якщо все, що ви хочете зробити, це пошук YouTube та отримання пов’язаних властивостей:

  1. Отримати загальнодоступний API - це посилання дає хороші вказівки

  2. Використовуйте нижче рядок запиту. Наприклад, пошуковий запит (позначений q = ) у рядку URL є stackoverflow . Потім YouTube надішле вам відповідь JSON, де ви зможете розібратися у мініатюрі, фрагменті, авторі тощо.

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


16

Ще однією хорошою альтернативою було б використання API oEmbed, який підтримується YouTube.

Ви просто додаєте свою URL-адресу YouTube до URL-адреси омеджену, і ви отримаєте 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:

Використовуючи Відпочиваючий клієнт, у цьому випадку 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 на консолі API API .
  2. Відповідно до мініатюрної посилання YouTube у документації API , вам потрібно отримати доступ до ресурсів на snippet.thumbnails.
  3. Згідно з цим, вам потрібно сформулювати свою URL-адресу так -

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

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


13

Ви можете отримати ідентифікатор відео з YouTube відео URL з допомогою parse_url , parse_str , а потім вставте і прогнозує адреса для зображень. Дякуємо 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-адреси, подібної до штаб-квартири:

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наведених вище прикладів.

Крім того, ви можете використовувати 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-адреси відео -на вихідний код відео та пошук мініатюр. Тепер ви можете використовувати цю 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

Тут формати зображень різні, як типові, hqdefault, maxresdefault.


2

Це рішення, яке не потрібне для мого клієнта.

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.