2013-08-03 59 views
12

Tôi muốn nhận được youtube cao nhất thumbnail "maxresdefault.jpg"Fetch YouTube cao nhất độ phân giải hình ảnh thu nhỏ

Như thế này một

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

Tôi đang sử dụng mã này php đơn giản

<?php 

$youtub_id = "Cj6ho1-G6tw"; 
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg"; 

?> 

Sự cố với mã ở trên là có video như thế này http://youtu.be/VGazSZUYyf4KHÔNG HD

Và kết quả là nhỏ màu xám 404 hình ảnh của youtube

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

Vậy làm thế nào để có được những hình ảnh thu nhỏ youtube cao nhất vì vậy nếu "maxresdefault" không sẵn có tiếp theo lớn thu nhỏ "hqdefault", nếu không muốn nói nhận "mqdefault" tiếp theo, v.v ...

Tôi đã cố gắng sử dụng gdata youtube nhưng cả cách video hd hoặc không "maxresdefault" không hiển thị.

Trả lời

18

Lý do là do độ phân giải trên Making the Most of Maps không phải là ít nhất 720p.

Nhìn vào api for this specific video, bạn có thể thấy rằng không có maxresdefault.

Chỉ những video có độ phân giải 720p trở lên mới có maxresdefault. Điều này không được liệt kê trong API trong video cao hơn. Vì vậy, để có được độ phân giải cao nhất, bạn cũng nên kiểm tra xem maxresdefault có hoạt động không.

<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'/> 

đặt cược tốt nhất của bạn cho các thumbnail chất lượng cao nhất là sử dụng các API và nhận được hình ảnh với yt:name thuộc tính lớn nhất.

Trình tự là:

default 
mqdefault 
hqdefault 
sddefault 

Ví dụ mã này trong hành động:

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

này hoạt động cả trên $youtub_id = "Cj6ho1-G6tw";$youtub_id = "VGazSZUYyf4";.

4

Bạn có thể sử dụng getimagesize() và kiểm tra xem hình ảnh có tồn tại hay không (cũng có file_exists() nhưng có thể không hoạt động tốt trong trường hợp này).

Bạn có thể sử dụng chức năng này để tìm ảnh chụp màn hình có độ phân giải cao nhất của một video cụ thể.

Code:

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

Cách sử dụng:

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

Output:

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

Lưu ý: Đây có thể không phải thứ Giải pháp tốt nhất, và đó là một công việc xung quanh nếu bạn không muốn sử dụng API.

+0

+1, tôi muốn chỉ ra rằng điều này có thể xảy ra với máy chủ nhiều lần hơn mức cần thiết. –

+0

Vâng, bạn nói đúng. Sử dụng API sẽ hiệu quả hơn. –

+0

Không phải là 'break' ở đây là hoàn toàn không cần thiết? – redanimalwar

4

Tất cả các câu trả lời khác phụ thuộc vào việc cào url tĩnh không được hỗ trợ. Họ có thể thay đổi và bạn có thể cần phải thay đổi đơn đăng ký của mình mọi lúc.

Đối với điều này, bạn nên sử dụng Data API v3. Bạn nên sử dụng yêu cầu videos->list với id = videoId và part = snippet. Trong phản hồi, bạn sẽ kiểm tra snippet.thumbnails.['high'].url

Upload Thumbnail example cũng liệt kê hình thu nhỏ. Tuy nhiên,