2011-01-28 5 views

Odpowiedz

7

Zakładając, że masz adres URL filmu, generowanie go jest dość proste. Potrzebujesz końca adresu URL (części po /watch? V =, nazwijmy to ID). Aby generować html iframe osadzenia, wystarczy umieścić go w odpowiednim miejscu (w atrybucie src, nie zawierają nawiasy):

<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> 

Istnieje kilka sposobów, aby uzyskać parametr v Z URL. Wyrażenie regularne zadziałałoby.

+1

Powyższa metodologia wydaje się fajne, ale możemy polegać na tej techniki, aby zakładać, że ten format wi W przyszłości YouTube nie będzie modyfikowany. Uwaga: Planuję przechowywać ten identyfikator w bazie danych i konstruować ten kod HTML zamiast przechowywania całego kodu HTML. Czy to jest wskazane? – Jason

+3

Pewnie, zrobiłem to wcześniej w zakładach produkcyjnych. Właściwie używałem starego stylu ebmed HTML, ale nadal działa, mimo że ten nowy element iframe jest teraz preferowany. Google jest bardzo zainteresowane utrzymaniem zgodności z wszystkimi aktualnie umieszczanymi filmami, więc nie musisz się niczym martwić. – probabilityzero

+1

YouTube od dawna korzysta z tej metody i wydaje się, że obsługuje ją w ten sposób celowo .. jak stwierdzono. –

12

Użyj YouTube Data API (jest fabrycznie zainstalowany GData client libraries lub możesz sam zrobić rzeczy HTTP/XML).

Jeden z wpisów będzie zawierał adres URL dla pliku SWF z możliwością umieszczenia, jeśli wideo można osadzać.

0

Chociaż zaakceptowana odpowiedź działa, jeśli chcesz zrobić to programowo, potrzebujesz odpowiedniego współczynnika proporcji, aby wygenerować optymalne wymiary iframe dla wideo. Napisałem następującą funkcję php, która może wygenerować link dla ciebie w locie. Wykorzystuje narzędzia bash youtube-dl, aby uzyskać informacje na temat filmu z dowolnego linku youtube, więc trzeba się upewnić, że jest zainstalowany (apt-get install youtube-dl powinien działać na Ubuntu lub innych smaków 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; 
    } 
} 

funkcja jest dość oczywiste objaśnienie, ale tutaj jest podział:

  • Co najmniej trzeba podać link dla pierwszego argumentu.
  • Drugi argument to tablica szerokości, wysokości lub obu. Jeśli podasz tylko jeden, potraktujesz zachowany domyślny współczynnik proporcji i obliczysz dla siebie inny wymiar (tak ja zwykle go używam).
  • Trzeci argument jest opcjonalną tablicą argumentów, które są udokumentowane w samej funkcji.
  • fourt jest opcjonalnie logiczna argumentem „Prywatność”, co jest wyjaśnione:

Włącz tryb prywatności. Po włączeniu trybu zwiększonego prywatności YouTube nie będzie przechowywać informacji o użytkownikach w Twojej witrynie, chyba że odtwarza film. Przykładem

Zastosowanie:

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

wyjściowa:

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

Powiązane problemy