Jim*_*Jim 15 php youtube youtube-api
我想获得youtube最高缩略图"maxresdefault.jpg"
像这个
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
我正在使用这个简单的PHP代码
<?php
$youtub_id = "Cj6ho1-G6tw";
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
?>
Run Code Online (Sandbox Code Playgroud)
上面代码的问题是有像这样的视频http://youtu.be/VGazSZUYyf4 NOT HD
结果是youtube的灰色小404图像
http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg
那么如何获得最高的youtube缩略图所以如果"maxresdefault"不可用获得下一个大缩略图"hqdefault",如果没有得到下一个"mqdefault"等...
我尝试使用gdata youtube,但无论哪种方式视频高清或"maxresdefault"没有显示.
Dav*_*hen 19
原因是因为制作最多地图的分辨率不是至少720p.
看一下这个特定视频的api,你可以看到没有 maxresdefault.
只有分辨率为720p或更高的视频才有maxresdefault.这在API中没有列在更高的视频中.因此,为了获得最高分辨率,您还应该检查是否也能maxresdefault正常工作.
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/default.jpg' height='90' width='120' time='00:15:12.500' yt:name='default'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/mqdefault.jpg' height='180' width='320' yt:name='mqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg' height='360' width='480' yt:name='hqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/1.jpg' height='90' width='120' time='00:07:36.250' yt:name='start'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/2.jpg' height='90' width='120' time='00:15:12.500' yt:name='middle'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/3.jpg' height='90' width='120' time='00:22:48.750' yt:name='end'/>
Run Code Online (Sandbox Code Playgroud)
最高质量缩略图的最佳选择是使用API并获取具有最大yt:name属性的图像.
订单是:
default
mqdefault
hqdefault
sddefault
Run Code Online (Sandbox Code Playgroud)
这个实例的代码示例:
<?php
$youtub_id = "VGazSZUYyf4";
$images = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos/".$youtub_id."?v=2&alt=json"), true);
$images = $images['entry']['media$group']['media$thumbnail'];
$image = $images[count($images)-4]['url'];
$maxurl = "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
$max = get_headers($maxurl);
if (substr($max[0], 9, 3) !== '404') {
$image = $maxurl;
}
echo '<img src="'.$image.'">';
Run Code Online (Sandbox Code Playgroud)
这适用于$youtub_id = "Cj6ho1-G6tw";和$youtub_id = "VGazSZUYyf4";.
您可以使用getimagesize()并检查图像是否存在(也存在file_exists(),但在这种情况下可能效果不佳).
您可以使用此功能获取特定视频的最佳分辨率屏幕截图.
码:
function fetch_highest_res ($videoid) {
$resolutions = array('maxresdefault', 'hqdefault', 'mqdefault');
foreach($resolutions as $res) {
$imgUrl = "http://i.ytimg.com/vi/$videoid/$res.jpg";
if(@getimagesize(($imgUrl)))
return $imgUrl;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
echo fetch_highest_res('Cj6ho1-G6tw').'<br>';
echo fetch_highest_res('VGazSZUYyf4');
Run Code Online (Sandbox Code Playgroud)
输出:
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg
Run Code Online (Sandbox Code Playgroud)
注意:这可能不是最佳解决方案,如果您不想使用API,这是一种解决方法.
感谢 Ibrahim Ulukaya 的回答,我能够理解为什么 David Chen 之前的正确答案不再有效;Google 已弃用之前可用的 API。(邪恶的、坏的、淘气的、邪恶的、谷歌。)
以下 URL 将使用Data API v3返回缩略图对象列表:
https://www.googleapis.com/youtube/v3/videos?id={VIDEO_ID}&key={API_KEY}&part=snippet&fields=items/snippet/thumbnails
Run Code Online (Sandbox Code Playgroud)
它{VIDEO_ID}可以作为任何 YouTube 视频 URL 的一部分找到,并且{API_KEY}要求您:
一旦你有了 URL 并VIDEO_ID替换API_KEY了占位符,你应该会得到如下所示的 JSON:
{
"items": [
{
"snippet": {
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/hqdefault.jpg",
"width": 480,
"height": 360
},
"standard": {
"url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/sddefault.jpg",
"width": 640,
"height": 480
},
"maxres": {
"url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/maxresdefault.jpg",
"width": 1280,
"height": 720
}
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
从那里我猜你会知道该怎么做......?
希望这可以帮助。
不支持依赖于静态URL抓取的所有其他答案.它们可以更改,您可能需要每次都更改您的应用程序.
为此,您应该使用Data API v3.您应该使用id = videoId和part = snippet 的视频 - >列表请求.在回复中,您将检查snippet.thumbnails.['high'].url