关于php:如何从youtube api获取youtube视频缩略图?

How do I get a YouTube video thumbnail from the YouTube API?

如果我有一个youtube视频URL,有没有办法使用php和curl从youtube api获取相关的缩略图?


每个YouTube视频都有4个生成的图像。可以预见,它们的格式如下:

1
2
3
4
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.jpg2.jpg3.jpg中的一个)是:

1
https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

对于高质量的缩略图版本,请使用类似以下内容的URL:

1
https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

还有一个中等质量的缩略图版本,使用类似于HQ的URL:

1
https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

对于缩略图的标准定义版本,请使用类似以下内容的URL:

1
https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

要获得缩略图的最大分辨率版本,请使用类似以下内容的URL:

1
https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

以上所有URL也可以通过HTTP访问。另外,在上面的示例URL中,稍短的主机名i3.ytimg.com代替img.youtube.com

或者,您可以使用YouTube数据API(v3)获取缩略图图像。


您可以使用YouTube数据API来检索视频缩略图、标题、描述、分级、统计信息等。API版本3需要密钥*。获取密钥并创建视频:列表请求:

1
https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

示例PHP代码

1
2
3
$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);

产量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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请求的数量要求您提供账单信息。然而,每天只有几百万个请求是免费的。

源文章。


亚萨所说的是对的。然而,并非所有YouTube视频都包含全部九个缩略图。此外,缩略图的图像大小取决于视频(下面的数字基于一个)。

有七个缩略图保证存在:

1
2
3
4
5
6
7
8
9
| 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   |

此外,其他两个缩略图可能存在,也可能不存在。他们的存在可能是基于视频是否高质量。

1
2
3
4
| 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信息:

  • 如何用PHP获取YouTube视频信息
  • 使用javascript-json&api v2检索YouTube视频详细信息

您还可以使用YouTube视频信息生成器工具通过提交URL或视频ID来获取有关YouTube视频的所有信息。


在YouTube API v3中,我们还可以使用这些URL获取缩略图…它们是根据质量分类的。

1
2
3
4
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

为了最大的分辨率……

1
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

与第一个答案中的URL相比,这些URL的一个优点是它们不会被防火墙阻塞。


如果您想要从YouTube获取最大的图像作为特定的视频ID,那么URL应该是这样的:

1
http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg

使用API,您可以获取默认的缩略图图像。简单代码应该是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//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那样做,你可以使用:

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

如果您不能使用.webp扩展名,您可以这样做:

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

另外,如果您需要非标版本,请使用maxresdefault而不是mqdefault

注:如果您打算使用maxresdefault,我不确定长宽比。


我做了一个函数,只从YouTube获取现有的图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}

在youtube data api v3中,您可以使用video s->list功能获取视频的缩略图。从snippet.thumbnails.(键)中,您可以选择默认的、中等或高分辨率的缩略图,并获取其宽度、高度和URL。

您还可以使用缩略图->设置功能更新缩略图。

例如,您可以查看YouTube API示例项目。(PHP的)


您可以获取包含视频缩略图的URL的视频条目。链接中有示例代码。或者,如果您想解析XML,这里有一些信息。返回的XML有一个media:thumbnail元素,其中包含缩略图的URL。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 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;


YouTube归Google所有,Google喜欢在不同的屏幕大小下拥有合理数量的图像,因此它的图像存储在不同的大小中,下面是一个他喜欢的缩略图的示例

低质量缩略图:

1
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

中等质量缩略图:

1
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

高质量缩略图:

1
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

最大质量缩略图:

1
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg

YouTube API 3版**2分钟后启动并运行**

如果您只想搜索YouTube并获取相关属性:

  • 获取一个公共API——这个链接提供了很好的方向
  • 2.使用下面的查询字符串。例如,URL字符串中的搜索查询(由q=表示)为stackoverflow。然后YouTube会向您发送一个JSON回复,您可以在其中分析缩略图、代码片段、作者等。

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


    用途:

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

    上面是链接。使用它,您可以找到视频的YouTube特性。找到特征后,您可以获得所选类别的视频。之后,您可以使用asaph的答案找到选定的视频图像。

    尝试上述方法,您可以解析YouTube API中的所有内容。


    我使用YouTube缩略图的方式如下:

    1
    2
    3
    $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播放按钮来创建图片:

    • 安装在服务器上进行脚本编写:https://github.com/halgatewood/youtube-thumbnail-enhancer

    另一个好的选择是使用由YouTube支持的oEmbed API。

    您只需将YouTube的URL添加到oEmbed的URL中,就可以收到一个JSON,其中包括一个缩略图和用于嵌入的HTML代码。

    例子:

    1
    http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DDLzxrzFCyOs

    会给你:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {
      thumbnail_url:"https://i.ytimg.com/vi/DLzxrzFCyOs/hqdefault.jpg",
      width: 459,
      author_name:"AllKindsOfStuff",
      version:"1.0",
      author_url:"https://www.youtube.com/channel/UCLNd5EtH77IyN1frExzwPRQ",
      thumbnail_width: 480,
      type:"video",
      provider_url:"https://www.youtube.com/",
      html:"<iframe width="459" height="344" src="https://www.youtube.com/embed/DLzxrzFCyOs?feature=oembed" frameborder="0" allowfullscreen></iframe>",
      title:"Some title bla bla foo bar",
      thumbnail_height: 360,
      provider_name:"YouTube",
      height: 344
    }

    有关详细信息,请阅读文档。


    为了增加/扩展给出的解决方案,我觉得有必要注意到,由于我自己也遇到了这个问题,实际上可以通过一个HTTP请求获取多个YouTube视频内容,在本例中是缩略图:

    在本例中,使用REST客户机httpful,您可以这样做:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?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
    equest::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."")

    ->send();

    print ($response);

    ?>

    我为youtube缩略图创建的一个简单的php函数,类型是

    • 违约
    • HQ默认值
    • MQ默认值
    • 默认值
    • 最大缺省值

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      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;}

    如果您正在使用公共API,最好的方法是使用if语句。

    如果视频是公开的或未列出的,则使用URL方法设置缩略图。如果视频是私有的,则使用API获取缩略图。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    if($video_status == 'unlisted'){
    $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
    $video_status = '<i class="fa fa-lock">&nbsp;Unlisted';
    }
    elseif($video_status == 'public'){
    $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
    $video_status = '<i class="fa fa-eye">&nbsp;Public';
    }
    elseif($video_status == 'private'){
    $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
    $video_status = '<i class="fa fa-lock">&nbsp;Private';
    }


    YouTube数据API

    YouTube通过数据API(v3)为我们提供了每段视频的4个生成图像,用于-

  • https://i.ytimg.com/v i/v_zwalcr8du/maxresdefault.jpg

  • https://i.ytimg.com/v i/v_zwalcr8du/sddefault.jpg

  • 网址:https://i.ytimg.com/v i/v_zwalcr8du/hqdefault.jpg

  • https://i.ytimg.com/v i/v_zwalcr8du/mqdefault.jpg

  • 通过API访问图像

  • 首先在google api控制台上获取公共api密钥。
  • 根据API文档中YouTube的缩略图参考,您需要访问snippet.thumbnail s上的资源。
  • 根据这个,你需要这样表述你的网址-

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

  • 现在,将您的video id和您的rapikey更改为各自的视频ID和API键,它的响应将是一个JSON输出,提供snippet变量缩略图中的4个链接(如果全部可用)。


    您可以使用parse_url、parse_str从youtube视频URL获取视频ID,然后插入到图像的预测URL中。感谢YouTube提供的预测性网址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $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/<?php print $ytID?>/maxresdefault.jpg";
    print"https://img.youtube.com/vi/<?php print $ytID?>/mqdefault.jpg";
    print"https://img.youtube.com/vi/<?php print $ytID?>/hqdefault.jpg";
    print"https://img.youtube.com/vi/<?php print $ytID?>/sddefault.jpg";
    print"https://img.youtube.com/vi/<?php print $ytID?>/default.jpg";

    您可以使用此工具生成YouTube缩略图

    https://codeatools.com/get-youtube-video-缩略图


    我认为他们对缩略图有很多答案,但我想添加一些其他的网址,以便非常容易地获得YouTube的缩略图。我只是从阿萨夫的回答中提取一些文本。以下是一些获取YouTube缩略图的URL

    1
    https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg

    对于高质量的缩略图版本,请使用类似以下内容的URL:

    1
    https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

    还有一个中等质量的缩略图版本,使用类似于HQ的URL:

    1
    https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

    对于缩略图的标准定义版本,请使用类似以下内容的URL:

    1
    https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

    要获得缩略图的最大分辨率版本,请使用类似以下内容的URL:

    1
    https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

    希望它能在不久的将来帮助别人。


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
        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');

    最适合手动使用的答案。不带分隔符的视频ID令牌可以通过双击进行选择。

    每个YouTube视频都有4个生成的图像。可以预见,它们的格式如下:

    1
    2
    3
    4
    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.jpg2.jpg3.jpg之一)为:

    1
    https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg

    对于高质量的缩略图版本,请使用类似以下内容的URL:

    1
    https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg

    还有一个中等质量的缩略图版本,使用类似于HQ的URL:

    1
    https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg

    对于缩略图的标准定义版本,请使用类似以下内容的URL:

    1
    https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg

    要获得缩略图的最大分辨率版本,请使用类似以下内容的URL:

    1
    https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg

    以上所有URL也可以通过HTTP访问。另外,在上面的示例URL中,稍短的主机名i3.ytimg.com代替img.youtube.com

    或者,您可以使用YouTube数据API(v3)获取缩略图图像。


    方法1:

    你可以通过json页面找到YouTube视频中的所有信息,甚至还有"缩略图"的网址。http://www.youtube.com/oembed?format=json&url=此处显示您的视频url

    像最终的url look+php测试代码

    1
    2
    3
    $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);

    产量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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

    有关详细信息,您还可以访问https://www.youtube.com/watch?V= MXDE7Q59BI8视频教程1

    方法2:使用YouTube img链接https://img.youtube.com/vi/"在此处插入youtube视频ID"/默认.jpg

    方法3:使用浏览器源代码通过视频URL链接获取缩略图-转到视频源代码并搜索thumbnailurl现在您可以将此URL用于您的代码:img src="https://img.youtube.com/vi/"在此处插入youtube视频ID"/default.jpg"

    有关详细信息,请参见http://hzonesp.com/php/get-youtube-video-thumbnail-using-id/或https://www.youtube.com/watch?V= 9F6E8MEM6PI视频教程2


    使用这个-img.youtube.com/vi/youtubeid/imageformat.jpg,这里的图像格式不同,如default、hqdefault和maxresdefault。


    这是我为获取缩略图创建的一个简单函数,很容易理解和使用。$link youtube链接是否与浏览器上的链接完全相同,例如https://www.youtube.com/watch?V= BQ0MXQXMLSK

    1
    2
    3
    4
    5
        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;
    }


    这是我的客户端唯一不需要API密钥的解决方案。

    1
    YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))

    代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // 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
    2
    public const string tubeThumb ="http://i.ytimg.com/vi/[id]/hqdefault.jpg";
    vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);

    文件另存为.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
      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 = '<img src="' + thumb + '">';
              $('#thumbnail').append(output);
            })
           
          }
        );
    });
    1
    2
    3
    4
    5
    6
    7
    8
    9
    .main{
     width:1000px;
     margin:auto;
    }
    #img{
    float:left;
    display:inline-block;
    margin:5px;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE html>
    <html>
    <head>
      Thumbnails
      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript">
    </head>
    <body>

     <ul id="thumbnail">
    </ul>


    </body>
    </html>


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    package com.app.download_video_demo;

    import java.net.MalformedURLException;
    import java.net.URL;

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ImageView;

    import com.squareup.picasso.Picasso;


    // get Picasso jar file and put that jar file in libs folder

    public class Youtube_Video_thumnail extends Activity
    {
        ImageView iv_youtube_thumnail,iv_play;
        String videoId;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            super.setContentView(R.layout.youtube_video_activity);

            init();

            try
            {
                videoId=extractYoutubeId("http://www.youtube.com/watch?v=t7UxjpUaL3Y");

                Log.e("VideoId is->","" + videoId);

                String img_url="http://img.youtube.com/vi/"+videoId+"/0.jpg"; // this is link which will give u thumnail image of that video

                // picasso jar file download image for u and set image in imagview

                Picasso.with(Youtube_Video_thumnail.this)
                .load(img_url)
                .placeholder(R.drawable.ic_launcher)
                .into(iv_youtube_thumnail);

            }
            catch (MalformedURLException e)
            {
                e.printStackTrace();
            }

        }
        public void init()
        {
            iv_youtube_thumnail=(ImageView)findViewById(R.id.img_thumnail);
            iv_play=(ImageView)findViewById(R.id.iv_play_pause);
        }

        // extract youtube video id and return that id
        // ex-->"http://www.youtube.com/watch?v=t7UxjpUaL3Y"
        // videoid is-->t7UxjpUaL3Y


        public String extractYoutubeId(String url) throws MalformedURLException {
            String query = new URL(url).getQuery();
            String[] param = query.split("&");
            String id = null;
            for (String row : param) {
                String[] param1 = row.split("=");
                if (param1[0].equals("v")) {
                    id = param1[1];
                }
            }
            return id;
        }

    }