Как проанализировать URL YouTube для получения идентификаторов видео или плейлистов? - PullRequest
0 голосов
/ 07 октября 2011

Я ищу способ извлечения (частичных) URL-адресов YouTube и отдельных идентификаторов из строки ввода пользователя.
Эта статья Как найти все идентификаторы видео YouTube в строке с помощью регулярных выражений? заставил меня идти хорошо, но я все еще немного борюсь.

Есть ли способ найти плейлист и / или идентификаторы видео из строк из:

  • E4uySuFiCis
  • PLBE0103048563C552

Через:

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

использование:

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

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

проверьте API YouTube для более подробной информации о формате

0 голосов
/ 07 октября 2011

Я написал сценарий, чтобы сделать это один раз, когда URL YouTube публикуется через «POST» под ключом «l» (строчная буква «L»).

К сожалению, я так и не смог включить его в свойпроект, поэтому он не был тщательно протестирован, чтобы увидеть, как это происходит.В случае неудачи он вызывает invalidURL с URL-адресом в качестве параметра, а в случае успеха он вызывает validURL с идентификатором из URL.

Этот сценарий может быть не совсем тем, что вам нужно, потому что он ТОЛЬКОизвлекает идентификатор видео, которое воспроизводится в данный момент, но вы можете легко его изменить.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...