2012-04-02 198 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) 
?>