2012-04-02 200 views
4

我目前正在編寫一個web應用,其中一些頁面嚴重依賴於能夠拉入正確的YouTube視頻並播放它。 YouTube的URL是由用戶和爲此提供一般會在與變異其中一人可能看起來像這樣:獲取youtube視頻ID PHP

http://www.youtube.com/watch?v=y40ND8kXDlg

,而其他可能看起來像這樣:

http://www.youtube.com/watch/v/y40ND8kXDlg

目前我能夠從後者我們拉ID荷蘭國際集團下面的代碼:

function get_youtube_video_id($video_id) 
{ 

    // Did we get a URL? 
    if (FALSE !== filter_var($video_id, FILTER_VALIDATE_URL)) 
    { 

     // http://www.youtube.com/v/abcxyz123 
     if (FALSE !== strpos($video_id, '/v/')) 
     { 
      list(, $video_id) = explode('/v/', $video_id); 
     } 

     // http://www.youtube.com/watch?v=abcxyz123 
     else 
     { 
      $video_query = parse_url($video_id, PHP_URL_QUERY); 
      parse_str($video_query, $video_params); 
      $video_id = $video_params['v']; 
     } 

    } 

    return $video_id; 

} 

我該如何處理與使用?v版本,而不是/v/版網址嗎?

+0

可能重複:http://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match – Alexander 2012-04-02 09:07:16

+0

可能的複製:http://stackoverflow.com/questions/5831191/.... – safarov 2012-04-02 09:08:46

+1

呃,上面的代碼已經與第一個URL一起工作? – cmbuckley 2012-04-02 09:12:38

回答

6

像這樣:

$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0"; 
$video_id = explode("?v=", $link); 
$video_id = $video_id[1]; 

這裏是通用的解決方案:

$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0&lololo"; 
$video_id = explode("?v=", $link); // For videos like http://www.youtube.com/watch?v=... 
if (empty($video_id[1])) 
    $video_id = explode("/v/", $link); // For videos like http://www.youtube.com/watch/v/.. 

$video_id = explode("&", $video_id[1]); // Deleting any other params 
$video_id = $video_id[0]; 

或者只是使用這個表達式:

(\?v=|/v/)([-a-zA-Z0-9]+) 
+2

這並不總是有效。如果您從YouTube網站複製/粘貼網址,通常會有其他參數,例如'http://www.youtube.com/watch?v = oHg5SJYRHA0&player = normal&...可能有十幾個這樣的參數。你的代碼會產生'oHg5SJYRHA0&player = normal&...'的ID - 這顯然是錯誤的 – 2012-04-02 09:09:48

+0

修正了這個問題。看看新的解決方案。 – 2012-04-02 09:13:33

+0

或者看看我的代碼:https://github.com/lingtalfi/video-ids-and-thumbnails/blob/master/testvideo.php它可以處理各種youtube網址,以及vimeo和dailymotion。 – ling 2015-09-28 20:27:04

0
$parts = explode('=', $link); 

// $parts[1] will y40ND8kXDlg 

此示例僅適用於URL中有一個'='的情況。有可能會更多?

+0

如果您從YouTube網站複製/粘貼網址,通常還有其他參數,例如'http://www.youtube.com/watch?v = oHg5SJYRHA0&player = normal&...可以有一打這些。 – 2012-04-02 09:09:00

0

我只想搜索最後的「/」或最後的「=」。在它之後你總能找到視頻ID。

+0

這可能適用於'/'URL,但不會一直適用於其他類型。如果您從YouTube網站上覆制/粘貼網址,通常還會有其他參數,例如http://www.youtube.com/watch?v = oHg5SJYRHA0&player = normal&...可能有十幾個這樣的參數。爲你自己判斷,如果你搜索最後一個'=' – 2012-04-02 09:11:40

+0

哦,那是對的。但如果您搜索「v =」或「v /」的第一個外觀,則會獲得該id的開頭。 id的結尾是字符串的結尾或下一個「&」。 – ESCOBAR 2012-04-02 11:52:06

1

嘗試:


function youtubeID($url){ 
    $res = explode("v",$url); 
    if(isset($res[1])) { 
     $res1 = explode('&',$res[1]); 
     if(isset($res1[1])){ 
      $res[1] = $res1[0]; 
     } 
     $res1 = explode('#',$res[1]); 
     if(isset($res1[1])){ 
      $res[1] = $res1[0]; 
     } 
    } 
    return substr($res[1],1,12); 
    return false; 
} 
$url = "http://www.youtube.com/watch/v/y40ND8kXDlg"; 
echo youtubeID($url1); 

如果兩個

0
preg_match("#([\w\d\-]){11}#is", 'http://www.youtube.com/watch?v=y40ND8kXDlg', $matches); 
echo $matches[1]; 
1

好工作,這是比一個更好的答案我以前:

$link = 'http://www.youtube.com/watch?v=oHg5SJYRHA0&player=normal'; 

    strtok($link, '?'); 

    parse_str(strtok('')); 

    echo $v; 

它可能是件好事,這一個功能,使新的變量出來的全球範圍(除非你想讓他們在那裏,顯然)。

1

這可能還沒有被使用,但可能有其他人在尋找答案,所以要從URL中獲取YouTube ID。

P.S:適用於所有類型的URL,我測試過它;

Function getYouTubeID($URL){ 
    $YouTubeCheck = preg_match('![?&]{1}v=([^&]+)!', $URL . '&', $Data); 
    If($YouTubeCheck){ 
     $VideoID = $Data[1]; 
    } 
    Return $VideoID; 
} 

或者只是使用preg_match函數本身;

If(preg_match('![?&]{1}v=([^&]+)!', $URL . '&', $Data)){ 
     $VideoID = $Data[1]; 
} 

希望這可以幫助別人:)!

0

這是獲取youtube vedio id或url中的任何字段的最佳方式,但是您必須將index_(v)從$ ID_youtube ['v']更改爲任何您想要的內容。

function getID_youtube($url) 
{ 
    parse_str(parse_url($url, PHP_URL_QUERY), $ID_youtube); 
    return $ID_youtube['v']; 
} 
0
<?php 
$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0"; 
$video_id = str_replace('http://www.youtube.com/watch?v=', '', $link); 
echo $video_id; 
?> 

輸出:
oHg5SJYRHA0

Source

0
<?php 
$your_url='https://www.youtube.com/embed/G_5-SqD2gtA'; 
function get_youtube_id_from_url($url) 
{ 
    if (stristr($url,'youtu.be/')) 
     {preg_match('/(https:|http:|)(\/\/www\.|\/\/|)(.*?)\/(.{11})/i', $url, $final_ID); return $final_ID[4]; } 
    else 
     {@preg_match('/(https:|http:|):(\/\/www\.|\/\/|)(.*?)\/(embed\/|watch.*?v=|)([a-z_A-Z0-9\-]{11})/i', $url, $IDD); return $IDD[5]; } 
} 

echo get_youtube_id_from_url($your_url) 
?>