【问题标题】:Get YouTube video thumbnail and use it with PHP获取 YouTube 视频缩略图并将其与 PHP 一起使用
【发布时间】:2015-11-27 13:20:15
【问题描述】:

如何使用 YouTube API 中的视频链接访问 YouTube 视频的缩略图集。 我希望使用 PHP 使用存储在变量中的视频 ID 在网站上显示缩略图,例如 $link

【问题讨论】:

    标签: php api youtube youtube-api video-thumbnails


    【解决方案1】:

    YouTube 在其服务器上为不同的设备存储了许多不同类型的缩略图。您可以使用视频 ID 访问它 每个 YouTube 视频都有。您可以使用变量 $link 在您的网站上显示图像,该变量保存视频的 id 并替换它 在链接中 video_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
    

    视频ID:Q-GYwhqDo6o

    所以,这就是视频缩略图链接的样子:

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

    希望对您有所帮助。享受编码。

    【讨论】:

      【解决方案2】:

      要获得高质量的图像,您可以使用以下从 youtube API 获取的 URL

      $video_id = explode("?v=", $link);
      $video_id = $video_id[1];
      $thumbnail="http://img.youtube.com/vi/".$video_id."/maxresdefault.jpg";
      

      【讨论】:

      • 所有答案中质量最好的...谢谢哥们。
      • 这不适用于youtu.be 类型的网址,因为它们省略了?v=
      • @MarcosDiPaolo 它适用于几乎所有视频。
      • @Rishi 确切地说,“几乎”,你不能用explode("?v=", $link); 分解youtu.be/&lt;video_id&gt; url 建议:使用alaouy/youtube 库。它管理 url、id 并与 Youtube Api v.3 通信,为您提供大量视频信息。
      【解决方案3】:

      您可以使用以下代码。这对我来说是工作。根据您的要求选择图像质量。

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

      【讨论】:

      • 太好了,我刚刚用这个创建了辅助函数,非常感谢
      【解决方案4】:

      这是我下载 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 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 的文件名 对于Example91b2a30d0682058ebda8d71606f5e327.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

      【讨论】:

        【解决方案5】:

        Google 在 v.3 上更改了 API,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
            )
        

        【讨论】:

          猜你喜欢
          • 2011-10-12
          • 2020-08-27
          • 2020-06-26
          • 2015-03-26
          • 2018-06-09
          • 2017-10-09
          • 2016-10-16
          • 2013-11-22
          • 1970-01-01
          相关资源
          最近更新 更多