Olá pessoal,
Se você já trabalhou com o youtube, provavelmente você precisou de pegar o código do video.
Fiz aqui uma expressao regular que atende algumas das possíveis urls do yoube que podem conter esses códigos.
[php]
//Urls possíveis
//http://youtu.be/r9dWsSYStRM
//http://www.youtube.com/watch?v=K7ToNJHgp-w
//http://www.youtube.com/v/dTaD9cd8hvw
//http://www.youtube.com/watch?v=0Tb8Jo11uGo&feature=related
[/php]
A regex seria
[php]
"/youtu(be.com|.b)(\/v\/|\/watch\\?v=|e\/)(.{11})/"
[/php]
Para usar de forma a pegar todos os códigos de vídeo de uma string, sem que eles se repitam.
[php]
//Lista de urls
$str = "
//http://youtu.be/r9dWsSYStRM
//http://www.youtube.com/watch?v=K7ToNJHgp-w
//http://www.youtube.com/v/dTaD9cd8hvw
//http://www.youtube.com/watch?v=0Tb8Jo11uGo&feature=related
//http://www.youtube.com/watch?v=0Tb8Jo11uGo
//http://www.youtube.com/watch?feature=player_detailpage&v=6PDmZnG8KsM";
//Regex
//$regex = "/youtu(be.com|.b)(\/v\/|\/watch\\?v=|e\/)(.{11})/";
//UPDATE – 22-11-2011
$regex = "#youtu(be.com|.b)(/v/|/watch\\?v=|e/|/watch(.+)v=)(.{11})#";
preg_match_all($regex , $str, $matches);
if(!empty($matches[4]))
{
$codigos_unicos = array();
$quantidade_videos = count($matches[4]);
foreach($matches[4] as $code)
{
if(!in_array($code,$codigos_unicos))
array_push($codigos_unicos,$code);
}
echo ‘códigos encontrados<br/><pre>’;
print_r($codigos_unicos);
}else{
die(‘Nenhuma url válida encontrada’);
}
[/php]
Se alguem tiver alguma sugestão de melhoria, favor me enviar que eu ficarei agradecido.
Espero que este post possa ser util.
Obrigado.
7 Comments
Bruno · 2011-05-06 at 16:56
Puxa vida eu tava precisando disso…
Nussa!!!
\o/
#TODOS agradece!
Miro · 2011-05-30 at 13:13
Cara muito bom! Vou tomar vergonha na cara e começar a estudar expressões regulares. Valeu mesmo!
Josué · 2011-08-02 at 06:17
cara otimo post salvou minha madrugada, consegui adptar ao projeto do videozer.
obrigado.
Felipe · 2011-11-22 at 15:08
tem um tipo de endereço que não pega:
Por exemplo:
http://www.youtube.com/watch?feature=player_detailpage&v=6PDmZnG8KsM
Isso eu tiro apertando botao direito do mouse e escolho a 1ª opção (Copiar URL do Vídeo)
@emersonbroga · 2011-11-22 at 16:46
Valeu demais pela dica!
Quando esse post foi criado o youtube ainda não dava essa opçao do botão direito, mas agora com sua dica a regex já foi atualizada.
Obrigado por visitar o blog.
Arthur Lehdermann · 2012-01-26 at 08:54
Cara, EXCELENTE!
Problema:
Mas faltou para as URLs com /embed/codigo:
http://www.youtube.com/embed/sEhy-RXkNo0
Solução:
Adicionei “/embed/|” e funcionou 100%:
$regex = “#youtu(be.com|.b)(/embed/|/v/|/watch\?v=|e/|/watch(.+)v=)(.{11})#”;
Anonymous · 2012-01-26 at 09:54
Valeu Arthur…
Depois vou criar uma classe bacana com isso e colocar no github pra galera ir melhorando!