2012-04-24 65 views
0

我正在使用我在下面找到的代碼從提交的網址獲取YouTube視頻的縮略圖網址。唯一的問題是,如果有人使用像http://youtube.be/HMYMSvlow_k這樣的縮短版本的視頻網址,它就不起作用。如何修改此代碼以便處理youtube.be版本以及其他更長的鏈接?如何從YouTube上縮短鏈接獲得縮略圖

function get_youtube_screen_link($url = '', $type = 'default', $echo = true) { 
if(empty($url)) 
    return false; 

if(!isset($type)) 
    $type = ''; 

$url = esc_url($url); 

preg_match("|[\\?&]v=([^&#]*)|",$url,$vid_id); 

if(!isset($vid_id[1])) 
    return false; 

$img_server_num = 'i'. rand(1,4); 

switch($type) { 
    case 'large': 
     $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/0.jpg"; 
     break; 
    case 'first': 
     // Thumbnail of the first frame 
     $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/1.jpg"; 
     break; 
    case 'small': 
     // Thumbnail of a later frame(i'm not sure how they determine this) 
     $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/2.jpg"; 
     break; 
    case 'default': 
    case '': 
    default: 
     $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/default.jpg"; 
     break; 
} 
if($echo) 
    echo $img_link; 
else 
    return $img_link; 

} 

回答

1
function getVideoId($url) 
{ 
$parsedUrl = parse_url($url); 
if ($parsedUrl === false) 
return false; 

if (!empty($parsedUrl['query'])) 
{ 
$query = array(); 
parse_str($parsedUrl['query'], $query); 
if (!empty($query['v'])) 
    return $query['v']; 
} 

if (strtolower($parsedUrl['host']) == 'youtu.be') 
return trim($parsedUrl['path'], '/'); 

return false; 
} 

$vid_id = getVideoId($video_code); 
http://i3.ytimg.com/vi/<?php echo $vid_id; ?>/default.jpg