Czy ktoś może mi pokazać, jak wyciągnąć identyfikator youtube z adresu URL, niezależnie od tego, jakie inne zmienne GET znajdują się w adresie URL.
Użyj tego filmu na przykład: http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
Więc między v=
i przed następnym&
$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);
Odpowiedzi:
Użyj parse_url () i parse_str () .
(Możesz używać wyrażeń regularnych do prawie wszystkiego, ale bardzo łatwo jest popełnić błąd, więc jeśli istnieją funkcje PHP specjalnie dla tego, co próbujesz osiągnąć, użyj ich.)
parse_url pobiera łańcuch i dzieli go na tablicę zawierającą kilka informacji. Możesz pracować z tą tablicą lub możesz określić jeden element, który chcesz, jako drugi argument. W tym przypadku interesuje nas zapytanie, czyli
PHP_URL_QUERY
.Teraz mamy zapytanie, które jest
v=C4kxS1ksqtw&feature=relate
, ale chcemy tylko część pov=
. W tym celu zwracamy się do,parse_str
które w zasadzie działa jakGET
na sznurku. Pobiera ciąg i tworzy zmienne określone w ciągu. W tym przypadku$v
i$feature
jest tworzony. Interesuje nas tylko$v
.Aby być bezpiecznym, nie chcesz po prostu przechowywać wszystkich zmiennych z
parse_url
przestrzeni nazw (zobacz komentarz Mellowsoon). Zamiast tego przechowuj zmienne jako elementy tablicy, aby mieć kontrolę nad przechowywanymi zmiennymi i nie możesz przypadkowo nadpisać istniejącej zmiennej.Składając wszystko razem, mamy:
Przykład roboczy
Edytować:
hehe - dzięki Charles. Rozśmieszyło mnie to, nigdy wcześniej nie widziałem cytatu Zawinskiego:
Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.
- Jamie Zawinskiźródło
parse_url()
działa pod maską), to jest droga.To będzie wyjaśniać
Poprawiłem go nieznacznie, aby wspierać: http://www.youtube.com/v/5xADESocujo?feature=autoshare&version=3&autohide=1&autoplay=1
Linia, której teraz używam, to:
źródło
#(?<=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
tablicę dodatkowymi informacjami, w tym identyfikatorem wideo, który był bardzo przydatny w moim projekcieNa podstawie komentarza Bokora do odpowiedzi Anthony'ego:
$matches[1]
zawiera plik vididMecze:
Nie pasuje:
źródło
#
do końcowej grupy przechwytywania:preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?#&\"'>]+)/", $url, $matches);
Można to bardzo łatwo osiągnąć za pomocą parse_str i parse_url i moim zdaniem jest to bardziej niezawodne.
Moja funkcja obsługuje następujące adresy URL:
Obejmuje również test poniżej funkcji.
źródło
ROZWIĄZANIE Dla każdego typu łącza !! :
wyjścia:
GvJehZx3eQ1
źródło
naprawiono na podstawie Jak sprawdzić identyfikatory wideo YouTube?
źródło
Wiemy, że identyfikator wideo ma długość 11 znaków i może być poprzedzony znakiem
v=
lubvi=
lubv/
lubvi/
lubyoutu.be/
. A więc najprostszy sposób na zrobienie tego:I wyjście:
źródło
Poniższe będzie działać dla wszystkich linków do youtube
źródło
źródło
To też powinno wystarczyć.
źródło
Miałem treść posta, którą musiałem zaszyfrować, aby usunąć identyfikator YouTube. Zdarzyło się to w postaci
<iframe>
kodu do umieszczenia na stronie, który zapewnia YouTube.Poniższy wzór otrzymałem z @rob powyżej. Fragment wykonuje
foreach
pętlę po znalezieniu meczów, a dla dodatkowego bonusu połączyłem go z obrazem podglądu znalezionym na Youtube. Potencjalnie może pasować do większej liczby typów osadzania YouTube i adresów URL:Profil Roba: https://stackoverflow.com/users/149615/rob
źródło
Aby wyodrębnić
id
w grupie przechwytywania, następujące wyrażenie lub jego pochodna może być również opcją:Próbny
Test
Wynik
Jeśli chcesz uprościć / zmodyfikować / zbadać wyrażenie, zostało to wyjaśnione w prawym górnym panelu regex101.com . Jeśli chcesz, możesz również obejrzeć w tym linku , jak to będzie się zgadzać z niektórymi przykładowymi danymi wejściowymi.
RegEx Circuit
jex.im wizualizuje wyrażenia regularne:
źródło
źródło
Wiem, że tytuł wątku odnosi się do użycia wyrażenia regularnego, ale tak jak mówi cytat Zawinski, naprawdę uważam, że unikanie wyrażeń regularnych jest tutaj najlepsze. Poleciłbym zamiast tego tę funkcję:
Polecam, ponieważ identyfikator filmów z YouTube jest zawsze taki sam, niezależnie od stylu adresu URL, np
http://www.youtube.com/watch?v=t_uW44Bsezg
http://www.youtube.com/watch?feature=endscreen&v=Id3xG4xnOfA&NR=1
i tak może być w przypadku elementów osadzonych i osadzonych
iframe
.źródło
Właśnie znalazłem to w Internecie pod adresem http://snipplr.com/view/62238/get-youtube-video-id-very-robust/
źródło
Użyłem danych z odpowiedzi Shawna, ale uogólniłem i trochę skróciłem wyrażenie regularne. Kluczowa różnica w tym przypadku polega na tym, że nie będzie testować prawidłowego adresu URL YouTube, po prostu szuka identyfikatora wideo. Oznacza to, że nadal zwróci identyfikator wideo dla
www.facebook.com?wtv=youtube.com/v/vidid
. Działa we wszystkich przypadkach testowych, ale jest nieco bardziej luźny. W konsekwencji wygeneruje fałszywie dodatni wynik dla czegoś takiego jakhttps://www.twitter.com/watch?v=vidid
. Użyj tej metody, jeśli dane są bardzo niespójne, w przeciwnym razie użyj bardziej szczegółowego wyrażenia regularnego lubparse_url()
iparse_str()
.źródło
Myślę, że próbujesz to zrobić.
źródło
a co, jeśli chcę wyodrębnić adres URL youtue z ciągu pełnego innych znaków? lubię to:
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 exercise ullamco https://www.youtube.com/watch?v=cPW9Y94BJI0 laboris nisi ut aliquip ex ea commodo consat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
i uzyskać https://www.youtube.com/watch?v=cPW9Y94BJI0 z tego ciągu?
źródło
Użyj tego kodu:
wynik:
C4kxS1ksqtw
źródło