2011-10-07 3 views
0

Je suis à la recherche d'un moyen d'extraire à la fois les URL youtube (partiels) et les identifiants uniques à partir d'une chaîne d'entrée utilisateur.
Cet article How do I find all YouTube video ids in a string using a regex? m'a très bien réussi mais je suis encore un peu en difficulté.

est-il un moyen de trouver à la fois playlist et/ou vidéo ids à partir d'une des chaînes de:
Comment analyser une URL youtube pour obtenir les identifiants de vidéo ou de playlist?

  • E4uySuFiCis
  • PLBE0103048563C552

Par:

+0

La réponse à la question que vous avez interrogée semble assez complète. Quel genre de problèmes avez-vous avec? – JJJ

+0

Les partials chaînes/urls, identifiants playlist. En plus, je ne suis pas vraiment un roi regex ... – TheDevRay

Répondre

2

utilisation:

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

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

vérifier la api youtube pour plus de détails sur le format

+0

+1 - parce que je ne connaissais pas parse_url() et parse_str() et ta réponse est beaucoup plus propre que la mienne. BTW, mis à jour votre réponse pour utiliser parse_str() correctement. – afuzzyllama

+0

oups, mon mauvais. Merci –

0

j'ai écrit un script pour faire une fois où l'URL YouTube est Posté via "POST" sous la clé "l" (minuscule "L").

Malheureusement, je n'ai jamais réussi à l'incorporer dans mon projet, donc il n'a pas été testé intensivement pour voir comment cela se passe. En cas d'échec, il appelle invalidURL avec l'URL en paramètre, s'il réussit, il appelle validURL avec l'ID de l'URL.

Ce script n'est peut-être pas exactement ce que vous cherchez, car il récupère SEULEMENT l'ID de la vidéo en cours de lecture - mais vous devriez être capable de le modifier facilement.

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); 
} 
Questions connexes