获取YouTube视频ID的PHP


getting youtube video id the PHP

我目前正在编写一个网络应用程序,其中某些页面严重依赖于能够提取正确的YouTube视频 - 并播放它。 youtube 网址由用户提供,因此通常会带有变体,其中一个可能如下所示:

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/版本的网址?

像这样:

$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]+)
<?php
// Here is a sample of the URLs this regex matches: (there can be more content after the given URL that will be ignored)
// http://youtu.be/dQw4w9WgXcQ
// http://www.youtube.com/embed/dQw4w9WgXcQ
// http://www.youtube.com/watch?v=dQw4w9WgXcQ
// http://www.youtube.com/?v=dQw4w9WgXcQ
// http://www.youtube.com/v/dQw4w9WgXcQ
// http://www.youtube.com/e/dQw4w9WgXcQ
// http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ
// http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ
// http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ
// http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ
// It also works on the youtube-nocookie.com URL with the same above options.
// It will also pull the ID from the URL in an embed code (both iframe and object tags)
preg_match('%(?:youtube(?:-nocookie)?'.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu'.be/)([^"&?/ ]{11})%i', $url, $match);
$youtube_id = $match[1];
?>
<?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)
?>

尝试:


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

应该对两者都有效

好的,这是一个比我以前的答案更好的答案:

  $link = 'http://www.youtube.com/watch?v=oHg5SJYRHA0&player=normal';
  strtok($link, '?');
  parse_str(strtok(''));
  echo $v;
最好在

函数中使用它,以使新变量远离全局范围(显然,除非您希望它们在那里(。

这可能还没有被使用,但可能有其他人在寻找答案,所以,从网址获取YouTube ID。

PS:这适用于所有类型的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];
}

希望这对:)有帮助!

我知道的最简单的YouTube方法。

 function GetYouTubeId($url)
 {
 preg_match('%(?:youtube(?:-nocookie)?'.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[&]v=)|youtu'.be/)([^"&?/ ]{11})%i', $url, $match);
 $youtube_id = $match[1];
 return $youtube_id;
 }
$parts = explode('=', $link);
// $parts[1] will y40ND8kXDlg

仅当 URL 中有一个"="时,此示例才有效。还有可能更多吗?

我只会搜索最后一个"/"或最后一个"="。之后,您始终可以找到视频ID。

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

获取youtube vedio id,或者url中的任何字段的最佳方式,但你必须将索引(V(从$ID_youtube['v']更改为你想要的任何内容。

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

输出:
oHg5SJYRHA0

<?php
$url = "https://www.youtube.com/watch?v=uKW_FPsFiB8&feature=related";
parse_str( parse_url( $url, PHP_URL_QUERY ), $vid );
echo $vid['v'];    
?> 

输出:uKW_FPsFiB8

这将适用于 https://www.youtube.com/watch?v=uKW_FPsFiB8&feature=related 或 https://www.youtube.com/watch?v=vzH8FH1HF3A&feature=relmfu 等网址,或者仅适用于 https://www.youtube.com/watch?v=uKW_FPsFiB8

所有 YouTube 视频 ID 的长度均为 11 个字符。我基于它编写了正则表达式:

<?php
$url = "https://www.youtube.com/watch?v=gooWdc6kb80";
preg_match('/(?:'/|=)(.{11})(?:$|&|'?)/', $url, $matches);
echo $matches[1];
?>

它可以匹配不同的YouTube视频格式:

// http://youtu.be/dQw4w9WgXcQ
// http://www.youtube.com/embed/dQw4w9WgXcQ
// http://www.youtube.com/watch?v=dQw4w9WgXcQ
// http://www.youtube.com/?v=dQw4w9WgXcQ
// http://www.youtube.com/v/dQw4w9WgXcQ
// http://www.youtube.com/e/dQw4w9WgXcQ
// http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ
// http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ
// http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ
// http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ
// https://www.youtube.com/embed/dQw4w9WgXcQ?feature=oembed
// https://www.youtube.com/embed/dQw4w9WgXcQ?start=16&feature=oembed