¿Alguien puede mostrarme cómo obtener la identificación de YouTube de una URL independientemente de qué otras variables GET están en la URL?
Use este video, por ejemplo: http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
Entonces, entre v=
y antes del siguiente&
$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);
Respuestas:
Use parse_url () y parse_str () .
(Puedes usar expresiones regulares para casi cualquier cosa, pero es muy fácil cometer un error, así que si hay funciones PHP específicamente para lo que estás tratando de lograr, úsalas).
parse_url toma una cadena y la corta en una matriz que tiene un montón de información. Puede trabajar con esta matriz o puede especificar el elemento que desea como segundo argumento. En este caso estamos interesados en la consulta, que es
PHP_URL_QUERY
.Ahora tenemos la consulta, que es
v=C4kxS1ksqtw&feature=relate
, pero solo queremos la parte posteriorv=
. Para esto pasamos a loparse_str
que básicamente funciona comoGET
en una cadena. Toma una cadena y crea las variables especificadas en la cadena. En este caso$v
y$feature
se crea. Solo nos interesa$v
.Para estar seguro, no solo desea almacenar todas las variables del
parse_url
en su espacio de nombres (vea el comentario de mellowsoon). En su lugar, almacene las variables como elementos de una matriz, de modo que tenga control sobre qué variables está almacenando y no pueda sobrescribir accidentalmente una variable existente.Poniendo todo junto, tenemos:
Ejemplo de trabajo
Editar:
jeje - gracias Charles. Eso me hizo reír, nunca antes había visto la cita de Zawinski:
Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.
- Jamie Zawinskifuente
parse_url()
funciona bajo el capó), este es el camino a seguir.Esto explicará
Lo mejoré un poco para admitir: http://www.youtube.com/v/5xADESocujo?feature=autoshare&version=3&autohide=1&autoplay=1
La línea que uso ahora es:
fuente
#(?<=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]+
rubular.com/r/M9PJYcQxRW$matches
matriz con más información, incluida la identificación de video que fue muy útil para mi proyectoBasado en el comentario de bokor sobre la respuesta de Anthony:
$matches[1]
contiene el vididPartidos:
No coincide:
fuente
#
grupo de captura final:preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?#&\"'>]+)/", $url, $matches);
Esto se puede lograr muy fácilmente usando parse_str y parse_url y es más confiable en mi opinión.
Mi función admite las siguientes URL:
También incluye la prueba debajo de la función.
fuente
SOLUCION Para cualquier tipo de enlace !! :
salidas:
GvJehZx3eQ1
fuente
arreglado basado en ¿Cómo validar identificadores de video de YouTube?
fuente
Sabemos que la identificación del video tiene una longitud de 11 caracteres y puede estar precedida por
v=
ovi=
ov/
ovi/
oyoutu.be/
. Entonces, la forma más simple de hacer esto:Y salida:
fuente
Lo siguiente funcionará para todos los enlaces de youtube
fuente
fuente
Esto debería hacerlo también.
fuente
Tenía algo de contenido de publicación que tuve que cifrar para obtener la identificación de Youtube. Sucedió que tenía la forma del
<iframe>
código de inserción que proporciona YouTube.El siguiente patrón que obtuve de @rob arriba. El fragmento hace un
foreach
bucle una vez que se encuentran las coincidencias, y para una ventaja adicional, lo vinculé a la imagen de vista previa que se encuentra en Youtube. Potencialmente podría coincidir con más tipos de URL y tipos de inserción de Youtube:Perfil de Rob: https://stackoverflow.com/users/149615/rob
fuente
Para extraer el
id
en un grupo de captura, la siguiente expresión o alguna derivada de eso también podría ser una opción:Manifestación
Prueba
Salida
Si desea simplificar / modificar / explorar la expresión, se explica en el panel superior derecho de regex101.com . Si lo desea, también puede ver en este enlace cómo coincidiría con algunas entradas de muestra.
Circuito RegEx
jex.im visualiza expresiones regulares:
fuente
fuente
Sé que el título del hilo se refiere al uso de una expresión regular, pero tal como dice la cita de Zawinski, realmente creo que evitar las expresiones regulares es mejor aquí. Recomendaría esta función en su lugar:
Recomiendo esto porque la identificación de los videos de YouTube es siempre la misma, independientemente del estilo de la URL, por ejemplo
http://www.youtube.com/watch?v=t_uW44Bsezg
http://www.youtube.com/watch?feature=endscreen&v=Id3xG4xnOfA&NR=1
y ese podría ser el caso de las
iframe
cosas incrustadas y con relleno.fuente
Acabo de encontrar esto en línea en http://snipplr.com/view/62238/get-youtube-video-id-very-robust/
fuente
Usé los datos de la respuesta de Shawn, pero generalicé y acorté un poco la expresión regular. La diferencia clave con este es que no probará una URL de Youtube válida, solo buscará una identificación de video. Lo que significa que todavía devolverá una identificación de video para
www.facebook.com?wtv=youtube.com/v/vidid
. Funciona para todos los casos de prueba, pero es un poco más laxo. En consecuencia, generará un falso positivo para algo asíhttps://www.twitter.com/watch?v=vidid
. Use este método si los datos son super inconsistentes, de lo contrario use una expresión regular más específica oparse_url()
yparse_str()
.fuente
Creo que estás intentando hacer esto.
fuente
¿Y si quiero extraer una URL de youtue de una cadena llena de otros caracteres? Me gusta esto:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco https://www.youtube.com/watch?v=cPW9Y94BJI0 laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepcional sint occasionecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
y obtener https://www.youtube.com/watch?v=cPW9Y94BJI0 de esa cadena?
fuente
Usa este código:
resultado:
C4kxS1ksqtw
fuente