Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciąganie ID z linka youtube
Forum PHP.pl > Forum > PHP
slawiz
Witam potrzebuje pomocy otóż chce napisać skrypt który będzie wyciągał ID youtube z filmiku.

Na razie wymyśliłem coś takiego:

  1. $text2 = 'http://www.youtube.com/watch?v=EztDIotz7Nc&feature=related';
  2.  
  3.  
  4. $stalal = preg_replace("#\http://(?:www\.)?youtube.com/watch\?v=#",'',$text2);
  5.  
  6.  
  7. echo '<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/' .$stalal. '" frameborder="0" allowfullscreen></iframe> ';



ale musze jeszcze usunąć "feature=related" z "$stalal" poniewarz zostaje "EztDIotz7Nc&feature=related"

Proszę o pomoc, z góry dziękuje smile.gif
nospor
jaki problem użyć str_replace i zamieniać to co chcesz na nic czyli na '' ?
slawiz
Można i tak ale czasami po ID youtube znajduję się coś innego, np: feature=related a czasami feature=relmfu wiec lepiej by było opuścić 11 znaków a usunąć wszystkie kolejne w preg_replace, Dodam jeszcze że jestem zielony w php i nie mam pojęcia czy się tak da :/
Shido
  1. preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $link, $match))
  2. $yt_id = $match[1];

O ile czegoś nie powaliłem to on wyciagnie ID, niezaleznie od tego czy po ID cos jest czy nie.

Używam tego tak:
  1. preg_match_all('/[youtube](.*)[\/youtube]/isU',$in,$out);
  2. foreach($out[1] as $wew)
  3. {
  4. if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $wew, $match))
  5. {
  6. $yt_id = $match[1];
  7. }
  8. else
  9. {
  10. $yt_id = $wew;
  11. }
  12. $in = str_replace('[youtube]'.$wew.'[/youtube]', '<iframe title="YouTube video player" class="youtube-player" type="text/html" width="440" height="350" src="http://www.youtube.com/embed/'.$yt_id.'" frameborder="0" allowFullScreen></iframe>', $in);
  13. }

w $in mam stringa z całym tekstem.
Dzieki temu niezaleznie czy w w tagach [youtube] będzie tylko ID, czy cały link to i tak przerobi go na YTplayera
slawiz
jak podałeś mi to:


  1. preg_match_all('/[youtube](.*)[\/youtube]/isU',$in,$out);
  2. foreach($out[1] as $wew)
  3. {
  4. if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $wew, $match))
  5. {
  6. $yt_id = $match[1];
  7. }
  8. else
  9. {
  10. $yt_id = $wew;
  11. }
  12. $in = str_replace('[youtube]'.$wew.'[/youtube]', '<iframe title="YouTube video player" class="youtube-player" type="text/html" width="440" height="350" src="http://www.youtube.com/embed/'.$yt_id.'" frameborder="0" allowFullScreen></iframe>', $in);
  13. }


to teraz żeby otrzymać YTplayer

musze:

  1. $in = 'link yt';
  2. echo $in;


Czy źle ?
Shido
To co podałem jest przystosowane do bbcoda
[youtube]link[/youtube] by wychwycić to w jakims tekście ( korzystam z tego w newsach ).
W tym przypadku pod $in dajesz jakiegoś stringa np:
  1. $in = 'Ala ma kota, a oto pierwsze nagranie tego kota: [youtube]link[/youtube] Fajny, prawda?';

Wtedy jak na koniec wyswietlisz $in to wyswietli ci tekst, oraz filmik w miejscu linka.


Ale jeżel ichcesz uzyskac tylko link, to to ci powinno działać:
  1. $link = 'link do yt';
  2.  
  3. if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $link, $match))
  4. {
  5. $yt_id = $match[1];
  6. }
  7. else
  8. {
  9. $yt_id = $wew;
  10. }
  11.  
  12. echo ('<iframe title="YouTube video player" class="youtube-player" type="text/html" width="440" height="350" src="http://www.youtube.com/embed/'.$yt_id.'" frameborder="0" allowFullScreen></iframe>');
slawiz
Wielkie dzięki, problem rozwiązany smile.gif Trzymaj Pomógł smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.