2011-01-28 19 views

risposta

7

Supponendo di avere l'URL del video, è abbastanza semplice generarne uno. È necessaria la fine dell'URL (la parte dopo lo /watch? V =, chiamiamola ID). Per generare il codice HTML iframe embed, basta posizionarlo nel luogo appropriato (l'attributo src, non includere le parentesi):

<iframe title="YouTube video player" class="youtube-player" type="text/html" width="640" 
height="390" src="http://www.youtube.com/embed/{ID}" frameborder="0" 
allowFullScreen></iframe> 

Ci sono un paio di modi per ottenere il v parametro dall'URL. Un'espressione regolare funzionerebbe.

+1

La metodologia di cui sopra sembra fresco, ma possiamo fare affidamento su questa tecnica per ritenere che questo formato wi Non sarà cambiato da YouTube andando avanti. Nota: sto pianificando di memorizzare questo ID nel database e di costruire questo codice HTML invece di memorizzare l'intero codice HTML. È consigliabile? – Jason

+3

Certo, l'ho già fatto nei siti di produzione. In realtà ho usato il vecchio stile di ebmed HTML, ma funziona ancora anche se ora è preferibile questo nuovo iframe embed. Google ha un grande interesse a mantenere la compatibilità con tutti i video attualmente incorporati, quindi non hai nulla di cui preoccuparti. – probabilityzero

+1

YouTube ha utilizzato questo metodo da molto tempo e sembra supportare il suo uso in questo modo di proposito .. come affermato. –

0

Sebbene la risposta accettata funzioni, se si desidera eseguire questa operazione a livello di codice, è necessario disporre delle proporzioni corrette per generare dimensioni iframe ottimali per il video. Ho scritto la seguente funzione PHP che può generare un link per te al volo. Si utilizza l'utilità bash youtube-dl per ottenere informazioni sul video da qualsiasi link di YouTube, quindi avrai bisogno di assicurarsi che è installato (apt-get install youtube-dl dovrebbe funzionare su Ubuntu o altri sapori debian)

function getYoutubeEmbed($link, $size = [], $options = [], $privacy = false) { 

    $options += [ 
     'rel'  => true, // Show suggested videos when the video finishes. 
     'controls' => true, // Show player controls. 
     'showinfo' => true, // Show video title and player actions. 
    ]; 

    $json = json_decode(exec('youtube-dl -j --no-warnings ' . $link . ' 2>/dev/null')); 
    if ($json && !empty($id = $json->id) && !empty($width = $json->width) && !empty($height = $json->height)) { 

     $args = []; 
     foreach ($options as $option => $value) { 
      if (!$value) { 
       $args[] = $option . '=0'; 
      } 
     } 

     if ($size) { 
      if (!empty($size['width']) && !empty($size['height'])) { 
       $width = $size['width']; 
       $height = $size['height']; 
      } else if (!empty($size['width'])) { 
       $height = ceil(($height * $size['width'])/$width); 
       $width = $size['width']; 
      } else if (!empty($size['height'])) { 
       $width = ceil(($width * $size['height'])/$height); 
       $height = $size['height']; 
      } 
     } 

     $url = ($privacy ? 'www.youtube-nocookie.com/embed/' : 'www.youtube.com/embed/') . $id . ($args ? '?' . implode('&amp;',$args) : ''); 
     $iframe = '<iframe width="' . $width . '" height="' . $height . '" src="//' . $url . '" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>'; 
     return $iframe; 
    } else { 
     return false; 
    } 
} 

La funzione è abbastanza auto esplicativo ma ecco la ripartizione:

  • Al minimo è necessario fornire un collegamento per il primo argomento.
  • Il secondo argomento è un array di larghezza, altezza o entrambi. Se ne specifichi solo uno tratterà di mantenere le proporzioni predefinite e calcolare l'altra dimensione per te (questo è il modo in cui lo userei di solito).
  • Il terzo argomento è una matrice opzionale di argomenti che sono documentati nella funzione stessa.
  • Il Fourt è un argomento booleano opzionale per la 'privacy' che si spiega come:

Abilita modalità di privacy ottimizzata. Quando attivi la modalità ottimizzata per la privacy, YouTube non memorizzerà le informazioni sui visitatori sul tuo sito web a meno che non riproducano il video. esempio

Usage:

$link = 'https://www.youtube.com/watch?v=adAqQct3vRI'; 
echo getYoutubeEmbed($link, ['width' => 560], ['rel' => false]); 

uscita:

<iframe width="560" height="315" src="//www.youtube.com/embed/605gdJGdaPE?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

Problemi correlati