Alguém pode me mostrar como obter o ID do youtube de um URL, independentemente de quais outras variáveis GET estejam no URL.
Use este vídeo, por exemplo: http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
Então, entre v=
e antes da próxima&
$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);
Respostas:
Use parse_url () e parse_str () .
(Você pode usar expressões regulares para praticamente qualquer coisa, mas elas são muito fáceis de cometer erros; portanto, se houver funções PHP especificamente para o que você está tentando realizar, use-as.)
parse_url pega uma string e a corta em uma matriz que possui várias informações. Você pode trabalhar com essa matriz ou especificar o item que deseja como segundo argumento. Nesse caso, estamos interessados na consulta, que é
PHP_URL_QUERY
.Agora temos a consulta, que é
v=C4kxS1ksqtw&feature=relate
, mas queremos apenas a parte depoisv=
. Para isso, passamos aoparse_str
que basicamente funciona comoGET
uma string. Ele pega uma string e cria as variáveis especificadas na string. Nesse caso$v
e$feature
é criado. Estamos interessados apenas$v
.Para ser seguro, você não deseja apenas armazenar todas as variáveis
parse_url
no espaço para nome (consulte o comentário de mellowsoon). Em vez disso, armazene as variáveis como elementos de uma matriz, para que você tenha controle sobre quais variáveis está armazenando e não poderá sobrescrever acidentalmente uma variável existente.Juntando tudo, temos:
Exemplo de trabalho
Editar:
hehe - obrigado Charles. Isso me fez rir, nunca vi a citação de Zawinski antes:
Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.
- Jamie Zawinskifonte
parse_url()
funciona sob o capô), este é o caminho a seguir.Isso representará
Eu o aprimorei um pouco para oferecer suporte: http://www.youtube.com/v/5xADESocujo?feature=autoshare&version=3&autohide=1&autoplay=1
A linha que eu uso agora é:
fonte
#(?<=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
array com mais informações, incluindo o ID do vídeo que foi muito útil para o meu projetoCom base no comentário de bokor na resposta de Anthony:
$matches[1]
contém o vididPartidas:
Não corresponde:
fonte
#
ao grupo de captura terminando:preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?#&\"'>]+)/", $url, $matches);
Isso pode ser realizado com muita facilidade usando parse_str e parse_url e é mais confiável na minha opinião.
Minha função suporta os seguintes URLs:
Também inclui o teste abaixo da função.
fonte
SOLUÇÃO Para qualquer tipo de link !! :
saídas:
GvJehZx3eQ1
fonte
corrigido com base em Como validar IDs de vídeo do youtube?
fonte
Sabemos que o ID do vídeo tem 11 caracteres e pode ser precedido por
v=
ouvi=
ouv/
ouvi/
ouyoutu.be/
. Portanto, a maneira mais simples de fazer isso:E saída:
fonte
O seguinte funcionará para todos os links do youtube
fonte
fonte
Isso deve fazer isso também.
fonte
Eu tinha algum conteúdo de postagem que precisava codificar para obter o ID do Youtube. Por acaso, estava na forma do
<iframe>
código de incorporação que o YouTube fornece.O padrão a seguir foi obtido de @rob acima. O trecho faz um
foreach
loop assim que as correspondências são encontradas e, para um bônus adicional, eu o vinculei à imagem de visualização encontrada no Youtube. Pode corresponder a mais tipos de URLs e tipos de incorporação do YouTube:Perfil do Rob: https://stackoverflow.com/users/149615/rob
fonte
Para extrair o
id
em um grupo de captura, a seguinte expressão ou algum derivado disso também pode ser uma opção:Demo
Teste
Resultado
Se você deseja simplificar / modificar / explorar a expressão, isso foi explicado no painel superior direito de regex101.com . Se desejar, também é possível assistir neste link , como ele corresponderia a algumas entradas de amostra.
Circuito RegEx
O jex.im visualiza expressões regulares:
fonte
fonte
Eu sei que o título do segmento se refere ao uso de uma regex, mas, como diz a citação de Zawinski, realmente acho que é melhor evitar regexes aqui. Eu recomendaria esta função:
Eu recomendo isso porque o ID dos vídeos do YouTube é sempre o mesmo, independente do estilo do URL, por exemplo,
http://www.youtube.com/watch?v=t_uW44Bsezg
http://www.youtube.com/watch?feature=endscreen&v=Id3xG4xnOfA&NR=1
e esse pode ser o caso de
iframe
itens incorporados e reduzidos.fonte
Acabei de encontrar isso on-line em http://snipplr.com/view/62238/get-youtube-video-id-very-robust/
fonte
Usei os dados da resposta de Shawn, mas generalizei e reduzi um pouco o regex. A principal diferença com este é que ele não testará um URL válido do YouTube, apenas procurará um ID de vídeo. Isso significa que ainda retornará um ID de vídeo para
www.facebook.com?wtv=youtube.com/v/vidid
. Funciona para todos os casos de teste, mas é um pouco mais relaxado. Consequentemente, produzirá um falso positivo para algo assimhttps://www.twitter.com/watch?v=vidid
. Use este método se os dados forem super inconsistentes; caso contrário, use uma expressão regular mais específica ouparse_url()
eparse_str()
.fonte
Eu acho que você está tentando fazer isso.
fonte
e se eu quiser extrair um URL de uma sequência cheia de outros caracteres? como isso:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed the eiusmod tempor incididunt ut labore and dolore magna aliqua. Para obter mais informações, consulte nosso site https://www.youtube.com/watch?v=cPW9Y94BJI0 laboris nisi ut aliquip ex and commodo consequat. Dre 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.
e obtenha https://www.youtube.com/watch?v=cPW9Y94BJI0 dessa sequência?
fonte
Use este código:
resultado:
C4kxS1ksqtw
fonte