2013-08-03 56 views
12

我想YouTube的最高縮略圖 「maxresdefault.jpg」獲取YouTube的最高分辨率縮略圖

贊一個

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"; 

?> 

上面的代碼的問題是有像這樣的視頻http://youtu.be/VGazSZUYyf4NOT HD

,其結果是YouTube的

的灰色小404圖像

http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg

因此,如何獲得最高的YouTube縮略圖,所以如果「maxresdefault」無法獲得下一個大縮略圖「hqdefault」,如果不是獲得下一個「mqdefault」等等

我試圖用gdata youtube但無論哪種方式的視頻HD或不是「maxresdefault」不顯示。

回答

18

原因是因爲Making the Most of Maps的分辨率不是至少720p。

看着api for this specific video,你可以看到沒有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'/> 

您提供最高質量的縮略圖最好的辦法是使用API​​,並與最大yt:name屬性獲取圖像。

順序爲:

default 
mqdefault 
hqdefault 
sddefault 

的本實施例的代碼的操作:

<?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.'">'; 

這適用於$youtub_id = "Cj6ho1-G6tw";$youtub_id = "VGazSZUYyf4";

4

您可以使用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; 
    } 
} 

用法:

echo fetch_highest_res('Cj6ho1-G6tw').'<br>'; 
echo fetch_highest_res('VGazSZUYyf4'); 

輸出:

http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg 
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg 

注:這可能不是個e最好的解決方案,如果你不想使用API​​,這是一個解決方法。

+0

+1,不過,我想指出的是,這可能是必要的點擊服務器多次。 –

+0

是的,你說得對。使用API​​會更有效率。 –

+0

是不是'break'這裏是完全沒有必要的? – redanimalwar