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 | 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中,稍短的主机名
或者,您可以使用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 |
如果您不能使用
1 | https://i.ytimg.com/vi/<video id>/mqdefault.jpg |
另外,如果您需要非标版本,请使用
注:如果您打算使用
我做了一个函数,只从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有一个
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并获取相关属性:
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®ionCode=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
17function 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"> Unlisted'; } elseif($video_status == 'public'){ $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg'; $video_status = '<i class="fa fa-eye"> Public'; } elseif($video_status == 'private'){ $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url']; $video_status = '<i class="fa fa-lock"> 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访问图像
根据这个,你需要这样表述你的网址-
www.googleapis.com/youtube/v3/videos?part=snippet&id=
现在,将您的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 | 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中,稍短的主机名
或者,您可以使用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 |
代码:
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` |
公用工程
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 }) } |
公用工程
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); |
文件另存为
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; } } |