如果我有YouTube视频网址,有没有办法使用PHP和cURL从YouTube API获取相关缩略图?
如果我有YouTube视频网址,有没有办法使用PHP和cURL从YouTube API获取相关缩略图?
每个YouTube视频都有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.jpg
, 2.jpg
, 3.jpg
)是:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg
对于高质量版本的缩略图,请使用与此类似的网址:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
还有一个中等质量版本的缩略图,使用类似于总部的网址:
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
所有上述网址都可通过http获取。此外,主机名略短 i3.ytimg.com
取代的 img.youtube.com
在上面的示例网址中。
或者,您可以使用 YouTube Data API(v3) 获取缩略图。
您可以使用 YouTube数据API 检索视频缩略图,标题,说明,评级,统计数据等。 API版本3需要密钥*。获取密钥并创建一个 视频:列表 请求:
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请求的数量。但是,每天几百万的请求是免费的。
来源文章。
亚萨说的是对的。但是,并非每个YouTube视频都包含所有九个缩略图,但每个视频都有七个缩略图。他们是:
(图像大小取决于视频。)
播放器背景缩略图(480x360像素)
https://i1.ytimg.com/vi/G0wGs3useV8/0.jpg
开始缩略图(120x90像素)
https://i1.ytimg.com/vi/G0wGs3useV8/1.jpg
中间缩略图(120x90像素)
https://i1.ytimg.com/vi/G0wGs3useV8/2.jpg
结束缩略图(120x90像素)
https://i1.ytimg.com/vi/G0wGs3useV8/3.jpg
高品质缩略图(480x360像素)
https://i1.ytimg.com/vi/G0wGs3useV8/hqdefault.jpg
中等质量缩略图(320x180像素)
https://i1.ytimg.com/vi/G0wGs3useV8/mqdefault.jpg
普通质量缩略图(120x90像素)
https://i1.ytimg.com/vi/G0wGs3useV8/default.jpg
此外,接下来的两个缩略图可能存在也可能不存在。对于HQ视频 它们存在。
标准清晰度缩略图(640x480像素)
https://i1.ytimg.com/vi/G0wGs3useV8/sddefault.jpg
最大分辨率缩略图(1920x1080像素)
https://i1.ytimg.com/vi/G0wGs3useV8/maxresdefault.jpg
您可以获取JavaScript和PHP脚本来检索缩略图和其他 YouTube中的信息
也使用该工具 YouTube视频信息生成器 得到所有的 提交视频的YouTube视频信息 网址 或视频ID。
在YouTube API V3中,我们还可以使用这些网址获取缩略图...它们会根据质量进行分类。
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不会被防火墙阻止。
如果您想从YouTube获取特定视频ID的最大图片,那么网址应如下所示:
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);
如果你想摆脱“黑条”并像YouTube一样去做,你可以使用:
https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp
如果你不能使用 .webp
扩展你可以这样做:
https://i.ytimg.com/vi/<video id>/mqdefault.jpg
此外,如果您需要使用未缩放版本 maxresdefault
代替 mqdefault
。
注意:如果您打算使用,我不确定宽高比 maxresdefault
。
我的功能是只从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;
}
在 YouTube Data API v3,你可以用。获得视频的缩略图 videos->列表 功能。从 snippet.thumbnails(钥匙),您可以选择默认,中等或高分辨率缩略图,并获取其宽度,高度和URL。
您还可以使用更新缩略图 thumbnails->集 功能。
例如,您可以查看 YouTube API示例 项目。 (PHP的。)
你可以得到 视频输入 其中包含视频缩略图的URL。链接中有示例代码。或者,如果要解析XML,那么就有信息 这里。返回的XML有一个 media:thumbnail
element,包含缩略图的URL。
// 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由谷歌拥有,谷歌喜欢为不同的屏幕尺寸提供合理数量的图像,因此它的图像以不同的尺寸存储,下面是一个示例,说明您的缩略图将如何
低质量缩略图:
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