Quelqu'un peut-il me montrer comment extraire l'identifiant YouTube d'une URL, quelles que soient les autres variables GET de l'URL.
Utilisez cette vidéo par exemple: http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
Donc entre v=
et avant le suivant&
$ch=curl_init(); curl_setopt($ch, CURLOPT_URL, "http://vimeo.com/api/v2/video/$id.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); $hash =unserialize(curl_exec($ch)); curl_close($ch);
Réponses:
Utilisez parse_url () et parse_str () .
(Vous pouvez utiliser des expressions régulières pour à peu près tout, mais il est très facile de faire une erreur, donc s'il existe des fonctions PHP spécifiquement pour ce que vous essayez d'accomplir, utilisez-les.)
parse_url prend une chaîne et la coupe en un tableau contenant un tas d'informations. Vous pouvez travailler avec ce tableau, ou vous pouvez spécifier l'élément que vous voulez comme deuxième argument. Dans ce cas, nous nous intéressons à la requête, qui est
PHP_URL_QUERY
.Nous avons maintenant la requête, qui est
v=C4kxS1ksqtw&feature=relate
, mais nous ne voulons que la partie aprèsv=
. Pour cela, nous nous tournons versparse_str
ce qui fonctionne essentiellement commeGET
sur une chaîne. Il prend une chaîne et crée les variables spécifiées dans la chaîne. Dans ce cas$v
et$feature
est créé. Nous ne sommes intéressés que par$v
.Pour être sûr, vous ne voulez pas simplement stocker toutes les variables de
parse_url
dans votre espace de noms (voir le commentaire de mellowsoon). Stockez plutôt les variables en tant qu'éléments d'un tableau, de sorte que vous ayez le contrôle sur les variables que vous stockez et que vous ne puissiez pas accidentellement écraser une variable existante.En mettant tout ensemble, nous avons:
Exemple de travail
Éditer:
hehe - merci Charles. Cela m'a fait rire, je n'ai jamais vu la citation de Zawinski auparavant:
Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.
- Jamie Zawinskila source
parse_url()
fonctionne sous le capot), c'est la voie à suivre.Cela représentera
Je l'ai légèrement amélioré pour prendre en charge: http://www.youtube.com/v/5xADESocujo?feature=autoshare&version=3&autohide=1&autoplay=1
La ligne que j'utilise maintenant est:
la source
#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=embed/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#
(?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+
compris les$matches
tableau avec plus d'informations, y compris l'ID vidéo qui a été très utile pour mon projetBasé sur le commentaire de Bokor sur la réponse d'Anthony:
$matches[1]
contient le vididAllumettes:
Ne correspond pas:
la source
#
au groupe de capture de fin:preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?#&\"'>]+)/", $url, $matches);
Cela peut être très facilement accompli en utilisant parse_str et parse_url et est plus fiable à mon avis.
Ma fonction prend en charge les URL suivantes:
Comprend également le test sous la fonction.
la source
SOLTUION Pour tout type de lien !! :
les sorties:
GvJehZx3eQ1
la source
corrigé en fonction de Comment valider les identifiants vidéo YouTube?
la source
Nous savons que l'ID vidéo a une longueur de 11 caractères et peut être précédé de
v=
ouvi=
ouv/
ouvi/
ouyoutu.be/
. Donc, le moyen le plus simple de le faire:Et sortie:
la source
Ce qui suit fonctionnera pour tous les liens YouTube
la source
la source
Cela devrait aussi le faire.
la source
J'avais du contenu de publication que je devais chiffrer tout au long pour obtenir l'identifiant Youtube. Il se trouve que cela se présente sous la forme du
<iframe>
code d'intégration fourni par Youtube.Le modèle suivant que j'ai obtenu de @rob ci-dessus. L'extrait fait un
foreach
boucle une fois que les correspondances sont trouvées, et pour un bonus supplémentaire, je l'ai lié à l'image d'aperçu trouvée sur Youtube. Il pourrait potentiellement correspondre à plus de types de types et d'urls d'intégration Youtube:Profil de Rob: https://stackoverflow.com/users/149615/rob
la source
Pour extraire le
id
dans un groupe de capture, l'expression suivante ou un dérivé de celle-ci peut également être une option:Démo
Tester
Production
Si vous souhaitez simplifier / modifier / explorer l'expression, cela a été expliqué dans le panneau supérieur droit de regex101.com . Si vous le souhaitez, vous pouvez également regarder dans ce lien , comment il correspondrait à certains exemples d'entrées.
Circuit RegEx
jex.im visualise les expressions régulières:
la source
la source
Je sais que le titre du fil fait référence à l'utilisation d'une expression régulière, mais comme le dit la citation de Zawinski, je pense vraiment qu'éviter les expressions régulières est mieux ici. Je recommanderais plutôt cette fonction:
Je recommande cela car l'ID des vidéos YouTube est toujours le même, indépendamment du style de l'URL, par exemple
http://www.youtube.com/watch?v=t_uW44Bsezg
http://www.youtube.com/watch?feature=endscreen&v=Id3xG4xnOfA&NR=1
et cela pourrait être le cas pour les
iframe
trucs intégrés et intégrés .la source
Je viens de le trouver en ligne à l' adresse http://snipplr.com/view/62238/get-youtube-video-id-very-robust/
la source
J'ai utilisé les données de la réponse de Shawn, mais j'ai généralisé et raccourci un peu l'expression régulière. La principale différence avec celui-ci est qu'il ne testera pas une URL Youtube valide, il cherchera simplement un ID vidéo. Cela signifie qu'il renverra toujours un ID vidéo pour
www.facebook.com?wtv=youtube.com/v/vidid
. Fonctionne pour tous les cas de test, mais est un peu plus laxiste. Par conséquent, il produira un faux positif pour quelque chose commehttps://www.twitter.com/watch?v=vidid
. Utilisez cette méthode si les données sont super incohérentes, sinon utilisez une expression régulière plus spécifique ouparse_url()
etparse_str()
.la source
Je pense que vous essayez de faire ça.
la source
et que se passe-t-il si je veux extraire une URL de votre choix à partir d'une chaîne pleine d'autres caractères? comme ça:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, exercice quis nostrud ullamco https://www.youtube.com/watch?v=cPW9Y94BJI0 laboris nisi ut aliquip ex ea commodo conséquat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
et obtenir https://www.youtube.com/watch?v=cPW9Y94BJI0 à partir de cette chaîne?
la source
Utilisez ce code:
résultat :
C4kxS1ksqtw
la source