我正在寻找一种从用户输入字符串中提取(部分)youtube网址和单个ID的方法。
这篇文章How do I find all YouTube video ids in a string using a regex?让我走得很好,但我仍然有点挣扎。
有没有办法从以下字符串中找到播放列表和/或视频ID:
通过:
答案 0 :(得分:2)
使用:
$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 :(得分:0)
我写了一个脚本来执行此操作,其中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);
}