如何解析youtube url以获取视频或播放列表id


How to parse a youtube url to obtain the video or playlist ids?

我正在寻找一种从用户输入字符串中提取(部分)youtube url和单个id的方法。
我如何找到所有的YouTube视频id在一个字符串使用正则表达式?我做得很好,但还是有点挣扎。

有没有办法找到播放列表和/或视频id从字符串从:

  • E4uySuFiCis
  • PLBE0103048563C552

:

  • ? v = 4 ofuvmfnk4e&列表= PLBE0103048563C552&指数= 5
  • http://www.youtube.com/watch?v=4OfUVmfNk4E&列表= PLBE0103048563C552&指数= 5

use:

$urlInfo = parse_url($url); // to get url components (scheme:host:query)
$urlVars = array();
parse_str($queryString, $urlVars); // to get the query vars 

查看YouTube API获取更多关于

格式的详细信息

我写了一个脚本来做到这一点,其中YouTube URL是通过"POST"键下的"l"(小写的"l")发布的。

不幸的是,我从来没有抽出时间将它纳入我的项目,所以它没有被广泛测试,看看它是如何做的。如果失败,则使用URL作为参数调用invalidURL,如果成功,则使用URL中的ID调用validURL

这个脚本可能不是你想要的,因为它只检索当前播放的视频的ID -但是你应该能够很容易地修改它。

if (isset($_POST['l'])) {
$ytIDLen = 11;
$link = $_POST['l'];
if (preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $link)) {
    $urlParts = parse_url($link);
    //$scheme
    //$host
    //$path
    //$query["v"]
    if (isset($urlParts["scheme"])) {
        if ( ($urlParts["scheme"] == "http" ) || ($urlParts["scheme"] == "https") ) {
            //$scheme = "http";
        } else invalidURL($link);
    } //else $scheme = "http";
    if (isset($urlParts["host"])) {
        if ( ($urlParts["host"] == "www.youtube.com") || ($urlParts["host"] == "www.youtube.co.uk") || ($urlParts["host"] == "youtube.com") || ($urlParts["host"] == "youtube.co.uk")) {
            //$host = "www.youtube.com";
            if (isset($urlParts["path"])) {
                if ($urlParts["path"] == "/watch") {
                    //$path = "/watch";
                    if (isset($urlParts["query"])) {
                        $query = array();
                        parse_str($urlParts["query"],$query);
                        if (isset($query["v"])) {
                            $query["v"] = preg_replace("/[^a-zA-Z0-9's]/", "", $query["v"]);
                            if (strlen($query["v"]) == $ytIDLen) {
                                validUrl($query["v"]);
                            } else invalidURL($link);
                        } else invalidURL($link);
                    } else invalidURL($link);
                } else invalidURL($link);
            } else invalidURL($link);
        } else invalidURL($link);
    } else invalidURL($link);
} else invalidURL($link);
}