【问题标题】:How to parse a youtube url to obtain the video or playlist ids?如何解析 youtube url 以获取视频或播放列表 ID?
【发布时间】:2011-10-07 13:05:13
【问题描述】:

我正在寻找一种从用户输入字符串中提取(部分)youtube url 和单个 id 的方法。
这篇文章How do I find all YouTube video ids in a string using a regex? 让我进展顺利,但我仍然有点挣扎。

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

  • E4uySuFiCis
  • PLBE0103048563C552

通过:

【问题讨论】:

  • 您链接到的问题的答案似乎很全面。你遇到了什么问题?
  • 部分字符串/网址,播放列表 ID。除此之外,我不是真正的正则表达式之王......

标签: php youtube


【解决方案1】:

使用:

$urlInfo = parse_url($url); // to get url components (scheme:host:query)

$urlVars = array();
parse_str($queryString, $urlVars); // to get the query vars 

查看 youtube api 了解有关格式的更多详细信息

【讨论】:

  • +1 - 因为我不知道 parse_url() 和 parse_str() 并且你的答案比我的要干净得多。顺便说一句,更新了您的答案以正确使用 parse_str()。
【解决方案2】:

我编写了一个脚本来执行此操作,其中 YouTube URL 通过键“l”(小写“L”)下的“POST”发布。

不幸的是,我从来没有把它整合到我的项目中,所以它没有经过广泛的测试来看看它是如何工作的。如果失败,它会使用 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);
}

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2013-09-12
    • 2015-11-24
    • 2017-07-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多