2011-10-07 83 views
0

我正在寻找一种方法来从用户输入字符串中提取两个(偏好)YouTube网址和单个ID。
这篇文章How do I find all YouTube video ids in a string using a regex?让我走得很好,但我仍然挣扎了一下。

有没有办法找到来自播放列表和/或视频的ID从字符串:
如何解析YouTube网址以获取视频或播放列表ID?

  • E4uySuFiCis
  • PLBE0103048563C552

通过:

+0

您链接到的问题的答案看起来相当全面。你有什么样的问题? – JJJ

+0

偏音字符串/网址,播放列表ID。除此之外,我不是真正的正则表达式国王... – TheDevRay

回答

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对格式

+0

+1 - 因为我不知道parse_url()和parse_str(),你的答案比我的更清洁。顺便说一句,更新你的答案正确使用parse_str()。 – afuzzyllama

+0

哎呀,我的坏。谢谢 –

0

我写了一个脚本做一次,YouTube的URL是更多详细信息通过“l”(小写字母“L”)下的“POST”发布。

不幸的是,我从来没有把它整合到我的项目,所以它没有经过广泛的测试,看看它是如何做的。如果失败,则调用invalidURL并将URL作为参数,如果成功,则使用来自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); 
} 
相关问题