comment obtenir l’identifiant de la vidéo youtube à partir de l’URL

J’essaie de vérifier si une URL est une URL de vidéo youtube valide et d’obtenir l’ID de la vidéo youtube. Jusqu’à présent, j’utilise une simple fonction divisée en javascript pour y parvenir. Toutefois, cette application présente quelques inconvénients mineurs car youtube comporte plusieurs URL .

J’ai consulté d’autres threads stackoverflow, mais ils ne prennent en charge qu’une seule URL spécifique, ce qui n’est pas ce dont j’ai besoin.

J’ai besoin de quelque chose qui correspond à toutes ces URL:

http (s): //www.youtu.be/videoID

http (s): //www.youtube.com/watch? v = videoID

(et éventuellement toute autre URL courte dont le script détecte automatiquement s’il contient une vidéo youtube)

Toutes les idées qui peuvent être traitées par le navigateur rapide / efficace sont grandement appréciées!

Essaye ça:

var url = "..."; var videoid = url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/); if(videoid != null) { console.log("video id = ",videoid[1]); } else { console.log("The youtube url is not valid."); } 

voir regex:

 / (?:https?:\/{2})? // Optional protocol, if have, must be http:// or https:// (?:w{3}\.)? // Optional sub-domain, if have, must be www. youtu(?:be)? // The domain. Match 'youtu' and optionally 'be'. \.(?:com|be) // the domain-extension must be .com or .be (?:\/watch\?v=|\/)([^\s&]+) //match the value of 'v' parameter in queryssortingng from 'watch' directory OR after root directory, any non-space value. / 

Peut-être devriez-vous consulter l’API Youtube et essayer de voir s’il existe un moyen d’obtenir un ID vidéo en analysant l’URL via l’API.

Regardez ce post SO: Youtube API – Extrait ID vidéo

Cela pourrait être rapide:

 var url = 'http://www.youtu.be/543221'; //http://www.youtube.com/watch?v=SNfYz6Yw0W8&feature=g-all-esi would work also var a = url.split("v=")[1]; a = a != undefined ? a : url.split("youtu.be/")[1]; b = a.split("&")[0]; 

la variable c aura votre identifiant. Rapide. La regex est plus agréable … plus difficile à lire. J’ai modifié mon code pour tenir compte des deux.

Il y a trop de genre:

  • dernier format court: http://youtu.be/NLqAF9hrVbY
  • iframe: http://www.youtube.com/embed/NLqAF9hrVbY
  • iframe (secure): https://www.youtube.com/embed/NLqAF9hrVbY
  • object param: http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • object incorporé: http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • regarder: http://www.youtube.com/watch?v=NLqAF9hrVbY
  • utilisateurs: http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo
  • Salle de lecture: http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I
  • any / thing / goes !: http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4
  • tout / sous-domaine / aussi: http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY
  • plus de parameters: http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec
  • la requête peut avoir un point: http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be (Source: Comment trouver tous les identifiants de vidéos YouTube dans une chaîne à l’aide d’une expression régulière? )

Le meilleur moyen est de limiter les données d’entrée.

Bonne chance

essayez ce code

 var url = "..."; var videoid = url.match((?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})); if(videoid != null) { console.log("video id = ",videoid[1]); } else { console.log("The youtube url is not valid."); } 

Le regex provient de YouTube video ID regex

vous pouvez le faire facilement en utilisant preg_match, voici l’exemple:
$url = "http://www.youtube.com/watch?v=YzOt12co4nk&feature=g-vrec"; preg_match('/v=([0-9a-zA-Z]+)/', $url, $matches); $vid = $matches[1];
Vous allez maintenant avoir l’identifiant vidéo: $ vid = YzOt12co4nk;