2009-11-20 22 views
6

quiero conseguir de todo, sólo youtube video Identificación del código htmlGet Youtube Video ID de código HTML con PHP

mirar el (o múltiple) objeto/código de inserción para el vídeo de youtube

// HTML a partir de la base de datos

<p>loremm ipsum dolor sit amet enot 
    <a href="link" attribute=""blah blah blah">anchor link</a> 
    </p> 

    <object width="425" height="344"> 
     <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param> 
     <param name="allowFullScreen" value="true"></param> 
     <param name="allowscriptaccess" value="always"></param> 
     <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&" 
    type="application/x-shockwave-flash" 
    allowscriptaccess="always" 
    allowfullscreen="true" 
    width="425" 
    height="344"> 
    </embed> 
     </object> 

    <image src="path/to/image.ext" > 
    <p>lorem ipsum dolor sit amet... blah</p> 
    <p>lorem ipsum dolor sit amet... blah</p> 

    <object width="425" height="344"> 
     <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param> 
     <param name="allowFullScreen" value="true"></param> 
     <param name="allowscriptaccess" value="always"></param> 
     <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&" 
    type="application/x-shockwave-flash" 
    allowscriptaccess="always" 
    allowfullscreen="true" 
    width="425" 
    height="344"> 
    </embed> 
     </object> 
<p>blah</p> 
blah<br/> 
blah<br/> 
blah<br/> 
+0

... y tu pregunta es? ¿Ya has producido algún código que no funcione? – ty812

+0

Fundé este código en Internet preg_match ('/ [\\? \\ &] v = ([^ \\? \\ &] +) /', [youtubevidurl], $ coincidencias); pero no funciona en este caso, no soy versado en regex lo siento, mi inglés :( – asumaran

Respuesta

7

robado Descaradamente desde el plugin de youtube htmlpurifier:

preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?</object>#s', $markup, $matches); 
var_dump($matches[1]); 
+0

¡gracias! también me ayudó :) –

1

Puede que me regañó por usar una expresión regular para analizar hTML, pero dadas las circunstancias tal vez es la mejor manera de hacerlo?

preg_match('~/v/([0-9a-z_]+)~i', $code, $matches); 
echo $matches[1]; 

asumiendo los caracteres válidos para un ID de vídeo de YouTube son 0-9a-z_

+0

¡funciona!, Pero hay una manera de hacerlo de forma segura, forzando solo los videos de youtube? – asumaran

+0

add youtube.com antes del/v/ – Galen

19

En general, existen dos formatos para las direcciones URL de vídeo de YouTube:

http://www.youtube.com/v/[videoid] 
http://www.youtube.com/watch?v=[videoid] 

El "www.youtube.com" se puede reemplazar por "www.youtube.co.uk", u otro códigos de país, pero hasta donde he podido determinar, los identificadores de video son los mismos independientemente del nombre de dominio.

La identificación de video es una cadena de 11 caracteres que usa codificación base-64.

Suponiendo que tiene un código que analizará las URL de un documento HTML, puede determinar si se trata de una URL de video de YouTube y obtener la identificación del video utilizando esta expresión regular (escrita en C#, pero debe convertirse fácilmente a php o cualquier otra cosa):

"^http://(?<domain>([^./]+\\.)*youtube\\.com)(/v/|/watch\\?v=)(?<videoId>[A-Za-z0-9_-]{11})" 

Esta expresión regular particular es específica de youtube.com. Hacer que comprenda todos los diferentes códigos de país (youtube.co.uk, youtube.pl, youtube.it, etc.) es un poco más complicado.

+0

Necesito esto en php :( – asumaran

+7

Creo que puedes encontrar la manera de traducirlo. –

+2

Has olvidado este formato: http://youtu.be/[videoid] Ejemplo: http: // youtu .be/R_FOfQSarWY – Anthony

3

Si desea obtener el enlace de inserción para el vídeo de YouTube, puedes utilizar el siguiente fragmento de código:

$youtubeRegexp = "#(/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#"; 
$embedUrl = preg_replace($youtubeRegexp, '/embed/$2', $videoUrl); 

Para el código de momento embed actual es:

<iframe width="{width}" height="{height}" src="{embed_url}" frameborder="0" allowfullscreen></iframe> 

Nota: $ videoUrl debe establecerse en la url original antes de ejecutar esta expresión.

12

En realidad, para capturar completamente todas las opciones, encontré que la solución de WebFlakeStudio es el mejor, con la siguiente adición, para capturar los 3 formas de * tos * estupidez cliente * tos *

(PHP)

preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $YoutubeCode, $matches); 
if(isset($matches[2]) && $matches[2] != ''){ 
    $YoutubeCode = $matches[2]; 
} 

He añadido/embed, esto debería capturar todo. El objeto, la URL y la opción de inserción.

Cuestiones relacionadas