Получите миниатюру видео YouTube и используйте ее с PHP

Как я могу получить доступ к коллекции эскизов видео YouTube, используя ссылку на видео из API YouTube. Я хочу, чтобы миниатюры отображались на веб-сайте с использованием PHP, используя идентификатор видео, хранящийся в переменной, например $link


person Community    schedule 02.09.2015    source источник


Ответы (5)


YouTube хранит на своем сервере много разных типов эскизов для разных устройств. Вы можете получить к нему доступ, используя идентификатор видео, который есть у каждого видео YouTube. Вы можете отображать изображения на своем веб-сайте, используя переменную $link, которая содержит идентификатор видео и заменяет его на место видео_ID в ссылке.

Миниатюра низкого качества:

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

Пример:

Если вы хотите получить доступ к миниатюре следующего видео:

https://www.youtube.com/watch?v=Q-GYwhqDo6o

Идентификатор видео: Q-GYwhqDo6o

Итак, вот как выглядит ссылка на миниатюру видео:

http://img.youtube.com/vi/Q-GYwhqDo6o/mqdefault.jpg

Надеюсь, поможет. Наслаждайтесь кодированием.

person Ron    schedule 02.09.2015

Чтобы получить высококачественное изображение, вы можете использовать следующий URL-адрес, полученный из API YouTube.

$video_id = explode("?v=", $link);
$video_id = $video_id[1];
$thumbnail="http://img.youtube.com/vi/".$video_id."/maxresdefault.jpg";
person Rishi    schedule 29.11.2017
comment
Лучшее качество из всех ответов... Спасибо, приятель. - person Hiren Nakrani; 26.03.2018
comment
это не работает с URL-адресами типа youtu.be, так как они пропускают ?v= - person Marcos Di Paolo; 30.12.2019
comment
@MarcosDiPaolo Это работает почти для всех видео. - person Rishi; 31.12.2019
comment
@Rishi точно, «почти», вы не можете взорвать youtu.be/<video_id> URL-адрес с explode("?v=", $link); Советом: используйте alaouy/youtube библиотеку. Он управляет URL-адресами, идентификаторами и взаимодействует с Youtube Api v.3, предоставляя вам много информации о видео. - person Marcos Di Paolo; 01.01.2020

Вы можете использовать приведенный ниже код. Это работа для меня. Выберите качество изображения в соответствии с вашими требованиями.

<?php
$youtubeID = getYouTubeVideoId('youtube video url');
$thumbURL = 'https://img.youtube.com/vi/' . $youtubeID . '/mqdefault.jpg';
print_r($thumbURL);

function getYouTubeVideoId($pageVideUrl) {
    $link = $pageVideUrl;
    $video_id = explode("?v=", $link);
    if (!isset($video_id[1])) {
        $video_id = explode("youtu.be/", $link);
    }
    $youtubeID = $video_id[1];
    if (empty($video_id[1])) $video_id = explode("/v/", $link);
    $video_id = explode("&", $video_id[1]);
    $youtubeVideoID = $video_id[0];
    if ($youtubeVideoID) {
        return $youtubeVideoID;
    } else {
        return false;
    }
}
?>
person Kamal Sanghavi    schedule 11.01.2019
comment
Отлично, я только что создал вспомогательную функцию с этим, большое спасибо - person Vipertecpro; 31.08.2019

вот моя удобная функция для загрузки миниатюрного изображения Youtube

function downloadYouTubeThubnailImage($youTubeLink='',$thumbNamilQuality='',$fileNameWithExt='',$fileDownLoadPath='')
    {
        $videoIdExploded = explode('?v=', $youTubeLink);   

        if ( sizeof($videoIdExploded) == 1) 
        {
            $videoIdExploded = explode('&v=', $youTubeLink);

            $videoIdEnd = end($videoIdExploded);

            $removeOtherInVideoIdExploded = explode('&',$videoIdEnd);

            $youTubeVideoId = current($removeOtherInVideoIdExploded);
        }else{
            $videoIdExploded = explode('?v=', $youTubeLink);

            $videoIdEnd = end($videoIdExploded);

            $removeOtherInVideoIdExploded = explode('&',$videoIdEnd);

            $youTubeVideoId = current($removeOtherInVideoIdExploded);
        }

        switch ($thumbNamilQuality) 
        {
            case 'LOW':
                    $imageUrl = 'http://img.youtube.com/vi/'.$youTubeVideoId.'/sddefault.jpg';
                break;

            case 'MEDIUM':
                    $imageUrl = 'http://img.youtube.com/vi/'.$youTubeVideoId.'/mqdefault.jpg';
                break;

            case 'HIGH':
                    $imageUrl = 'http://img.youtube.com/vi/'.$youTubeVideoId.'/hqdefault.jpg';
                break;

            case 'MAXIMUM':
                    $imageUrl = 'http://img.youtube.com/vi/'.$youTubeVideoId.'/maxresdefault.jpg';
                break;
            default:
                return  'Choose The Quality Between [ LOW (or) MEDIUM  (or) HIGH  (or)  MAXIMUM]';
                break;
        }  

        if( empty($fileNameWithExt) || is_null($fileNameWithExt)  || $fileNameWithExt === '') 
        {
            $toArray = explode('/',$imageUrl);
            $fileNameWithExt = md5( time().mt_rand( 1,10 ) ).'.'.substr(strrchr(end($toArray),'.'),1);
          }

          if (! is_dir($fileDownLoadPath)) 
            {
                mkdir($fileDownLoadPath,0777,true);
            }

            file_put_contents($fileDownLoadPath.$fileNameWithExt, file_get_contents($imageUrl));
            return $fileNameWithExt;   
    }

Function Description

Аргумемц

$youTubeLink URL-адрес YouTube for example https://www.youtube.com/watch?v=a3ICNMQW7Ok

$thumbNamilQuality У него много качеств, таких как LOW ,MEDIUM, HIGH, MAXIMUM

Список качества миниатюр Взято из https://stackoverflow.com/a/32346348/8487424

&& https://stackoverflow.com/a/47546113/8487424

$fileNameWithExt Имя файла с расширением**for example** myfavouriteimage.png

ПРИМЕЧАНИЕ $fileNameWithExt не является обязательным, оно будет генерировать имя файла на основе uuid для Example 91b2a30d0682058ebda8d71606f5e327.jpg.

если вы хотите поместить файл в пользовательский каталог, используйте этот аргумент

ПРИМЕЧАНИЕ $fileDownLoadPath не является обязательным, он будет генерировать файл изображения, в котором выполняется скрипт.

Некоторые примеры примеров

$folderpath = 'c:'.DIRECTORY_SEPARATOR.'xampp'.DIRECTORY_SEPARATOR.'htdocs'.DIRECTORY_SEPARATOR.'youtube'.DIRECTORY_SEPARATOR;

$imageName = 'mybeautfulpic.jpg';

downloadYouTubeThubnailImage('https://www.youtube.com/watch?v=a3ICNMQW7Ok','MAXIMUM',null,$folderpath );

downloadYouTubeThubnailImage('https://www.youtube.com/watch?v=a3ICNMQW7Ok','LOW',$imageName ,null);

Надеюсь, что на него уже ответили, но эта функция имеет some exta features

person Manojkiran.A    schedule 28.01.2019

Google изменил API на v.3, и этот код из Python работает точно! Вы можете использовать для PHP.

def get_small_image_url(self):
    return 'http://img.youtube.com/vi/%s/%s.jpg' % (self.video_id, random.randint(1, 3))

def get_hqdefault(self):
    return 'http://i1.ytimg.com/vi/%s/hqdefault.jpg' % self.video_id

def get_mqdefault(self):
    return 'http://i1.ytimg.com/vi/%s/mqdefault.jpg' % self.video_id

def get_sddefault(self):
    return 'http://i1.ytimg.com/vi/%s/sddefault.jpg' % self.video_id

def get_video_id(self, url):
    link = urlparse.urlparse(url)
    if link.hostname == 'youtu.be':
        return link.path[1:]
    if link.hostname in ('www.youtube.com', 'youtube.com'):
        if link.path == '/watch':
            state = urlparse.parse_qs(link.query)
            return state['v'][0]
        if link.path[:7] == '/embed/':
            return link.path.split('/')[2]
        if link.path[:3] == '/v/':
            return link.path.split('/')[2]
    return False

def get_meta(self, video_id):
    api_token = **'here your API_Token'**
    url = 'https://www.googleapis.com/youtube/v3/videos?part=snippet&id=%s&key=%s' % (video_id, api_token)
    response = json.load(urllib.urlopen(url))
    print response
    context = {
        'title': response['items'][0]['snippet']['localized']['title'],
        'desc': response['items'][0]['snippet']['localized']['description']
    }
    return context

def save(self, force_insert=False, force_update=False, using=None,
         update_fields=None):
    video_id = self.get_video_id(self.url)
    meta = self.get_meta(video_id)
    self.video_id = video_id
    self.title = meta['title']
    self.description = meta['desc']
    super(Videos, self).save(
        force_insert=force_insert,
        force_update=force_update,
        using=using,
        update_fields=update_fields
    )
person kdelinx    schedule 02.09.2015