2011-10-07 273 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); 
} 
相關問題