Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos do Imasters.
Estou com um problema há muito tempo e depois de pesquisar bastante, resolvi abrir este post.
Preciso pegar um vídeo do Youtube, Vimeo, Videolog ou outras fontes e alterar os valores "width" e "height".
Para isso, criei a seguinte função abaixo
<?php
# You Tube
$codigo_video = '<object width="560" height="340"><param name="movie" value="http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR"></param><param'>[http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR)></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="[http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR) type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>';
# Pegando a largura e altura do video
preg_match_all('/(width)=("[^"]*")/i',$codigo_video, $result);
$width = trim($result[2][1]);
preg_match_all('/(height)=("[^"]*")/i',$codigo_video, $result);
$height = trim($result[2][1]);
# Substituindo o valor numerico por uma variavel
$codigo_video = str_replace($width, '$largura_video', $codigo_video);
$codigo_video = str_replace($height, '$altura_video', $codigo_video);
?>
A função acima funciona, porém apenas para o YouTube.
Se eu pegar um vídeo do Vimeo, já dá erro, por exemplo.
$codigo_video = '<iframe src="http://player.vimeo.com/video/15081749" width="400" height="225" frameborder="0"></iframe>';
Amigo, Muito Obrigado!
Funcionou que é uma maravilha.
Só preciso fazer mais dois ajustes.
Atualmente ele está alterando o valor de width="400", mas se for com aspas simples, não altera, exemplo: width='400'.
Também gostaria que alterasse caso não houver aspas, exemplo: width=400
Irei usar este código em uma função para manipular URLs de vídeos e como o usuário pode pegar vídeo de vários sites, estas situações acabam acontecendo.
Vlw
Olá ezequielg, tudo bem.
Testa esse aí.
//$codigo_video = '<object width="560" height="340"><param name="movie" value="http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR"></param><param'>[http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR)></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="[http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=Q2sInhKqvJI?fs=1&hl=pt_BR) type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>';
$codigo_video = '<iframe src="[http://player.vimeo.com/video/15081749"](http://player.vimeo.com/video/15081749) width="400" height="225" frameborder="0"></iframe>';
// Pega a largura do video
preg_match("/(width=)+[\"']?+[0-9]*+[\"']?/i",$codigo_video, $result);
// Do resultado por ex. width="560" , retiramos tudo que não for número
$width = preg_replace('/\D/','',$result[0]);
// Idem à largura
preg_match("/(height=)+[\"']?+[0-9]*+[\"']?/i",$codigo_video, $result);
$height = preg_replace('/\D/','',$result[0]);
// Valores arbitrários, apenas para teste
$largura_video = "220";
$altura_video = "180";
// Substitue os valores
$codigo_video = preg_replace("/(width=)+[\"']?+[0-9]*+[\"']?/i", "width=\"".$largura_video."\"", $codigo_video);
$codigo_video = preg_replace("/(height=)+[\"']?+[0-9]*+[\"']?/i", "height=\"".$altura_video."\"", $codigo_video);
echo $codigo_video;
Até mais.
Fera, valeu mesmo.
Ficou uma maravilha.
Abaixo estou postando todo o código novamente em forma de função para quem precisar.
<?php
function VideoEmbed($codigo_video, $nova_largura, $nova_altura)
{
# Pega a largura do video, apenas a primeira ocorrencia ao contrário do preg_match_all
# A largura deve estar em um destes formatos: width="500" ou width='500' ou width=500
preg_match("/(width=)+[\"']?+[0-9]*+[\"']?/i",$codigo_video, $result);
# Retiramos, do resultado, tudo que nao for número
$width = preg_replace('/\D/','',$result[0]);
# Pega a altura do video, apenas a primeira ocorrencia ao contrário do preg_match_all
# A altura deve estar em um destes formatos: height="500" ou height='500' ou height=500
preg_match("/(height=)+[\"']?+[0-9]*+[\"']?/i",$codigo_video, $result);
# Retiramos, do resultado, tudo que nao for número
$height = preg_replace('/\D/','',$result[0]);
# Substitue os valores
$codigo_video = preg_replace("/(width=)+[\"']?+[0-9]*+[\"']?/i", "width=\"".$nova_largura."\"", $codigo_video);
$codigo_video = preg_replace("/(height=)+[\"']?+[0-9]*+[\"']?/i", "height=\"".$nova_altura."\"", $codigo_video);
return $codigo_video;
}
$youtube = '<object width="560" height=340><param name="movie" value="http://www.youtube.com/watch?v=Re40Ix9JHbY?fs=1&hl=pt_BR"></param><param'>[http://www.youtube.com/watch?v=Re40Ix9JHbY?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=Re40Ix9JHbY?fs=1&hl=pt_BR)></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="[http://www.youtube.com/watch?v=Re40Ix9JHbY?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=Re40Ix9JHbY?fs=1&hl=pt_BR) type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width=560 height="340"></embed></object>';
$codigo_video = VideoEmbed($youtube, 300, 250);
echo $codigo_video;
?>
Esse negócio de Expressão Regular é ótimo.
O que significa este trecho do código? "/(width=)+[\"']?+[0-9]*+[\"']?/i"
Se tiver alguns tutoriais de expressão regular, favor passar, quero estudar esse assunto pois é poderoso.
Abraços e Obrigado.
Olá ezequielg, tudo bem.
As expressões anteriores, que fiz, estão com alguns erros crassos. Esses sinais de adição e os parênteses não tem razão para estar aí. Troque as expressões por estas aqui embaixo:
"/width[\s]=[\s][\"']?[0-9]+[\"']?/i"
"/height[\s]=[\s][\"']?[0-9]+[\"']?/i"
Breve explicação:
"/width[\s]=[\s][\"']?[0-9]+[\"']?/i"
"/ - Delimita a expressão;
width - Indica que quero exatamente a palavra width;
[\s]* - Indica que pode ser zero ou mais espaços em branco;
[\"']? - Indica que pode ser zero ou uma aspas simples ou dupla, a aspas dupla, neste caso, está escapada pois ela também está sendo usada para delimitar a expressão;
[0-9]+ - Indica que pode ser um ou mais números de 0 a 9;
[\"']? - Idem ao anterior;
/i" - Delimita a expressão, o modificador i indica que o quê procuro pode estar tanto em maiúscula quanto minúscula.
Algum material para estudo:
http://lawrence.ecorp.net/inet/samples/regexp-intro.php
http://imasters.com.br/artigo/2515/javascript/regular_expression/
Até mais.
Amigo, muito obrigado!
Ficou perfeito!
Obrigado também pelas pelos links e pela explicação.
Vou estudá-los com certeza.
Me interessei muito por Expressões Regulares.
Abraços e Sucesso!
Segue abaixo o código final com todas as alterações comentadas neste post.
Façam bom proveito.
<?php
function VideoEmbed($codigo_video, $nova_largura, $nova_altura)
{
# Pega a largura do video, apenas a primeira ocorrencia ao contrário do preg_match_all
# A largura deve estar em um destes formatos: width="500" ou width='500' ou width=500
preg_match("/width[\s]*=[\s]*[\"']?[0-9]+[\"']?/i",$codigo_video, $result);
# Retiramos, do resultado, tudo que nao for número
$width = preg_replace('/\D/','',$result[0]);
# Pega a altura do video, apenas a primeira ocorrencia ao contrário do preg_match_all
# A altura deve estar em um destes formatos: height="500" ou height='500' ou height=500
preg_match("/height[\s]*=[\s]*[\"']?[0-9]+[\"']?/i",$codigo_video, $result);
# Retiramos, do resultado, tudo que nao for número
$height = preg_replace('/\D/','',$result[0]);
# Substitue os valores
$codigo_video = preg_replace("/width[\s]*=[\s]*[\"']?[0-9]+[\"']?/i", "width=\"".$nova_largura."\"", $codigo_video);
$codigo_video = preg_replace("/height[\s]*=[\s]*[\"']?[0-9]+[\"']?/i", "height=\"".$nova_altura."\"", $codigo_video);
return $codigo_video;
}
$youtube = '<object width="480" height="385"><param name="movie" value="http://www.youtube.com/watch?v=KWABDpgziIY?fs=1&hl=pt_BR"></param><param'>[http://www.youtube.com/watch?v=KWABDpgziIY?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=KWABDpgziIY?fs=1&hl=pt_BR)></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="[http://www.youtube.com/watch?v=KWABDpgziIY?fs=1&hl=pt_BR"](http://www.youtube.com/watch?v=KWABDpgziIY?fs=1&hl=pt_BR) type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>';
$codigo_video = VideoEmbed($youtube, 300, 250);
echo $codigo_video;
?>
Abraços,
Ezequiel
Olá ezequielg, tudo bem.
O problema estava no uso do preg_match_all que encontra todas as ocorrências da expressão regular. Assim, a sua variável $result[2][1] não servia quando o preg_match_all encontrava apenas uma ocorrência como no caso do vimeo.
Veja as alterção que proponho.
<?php
You Tube
// Pega a largura do video, apenas a primeira ocorrência ao contrário do preg_match_all
preg_match('/(width)=("[^"]*")/i',$codigo_video, $result);
// Do resultado por ex. width="560" , retiramos tudo que não for número
$width = preg_replace('/\D/','',$result[0]);
// Idem à largura
// Valores arbitrários, apenas para teste
// Substitue os valores
Até mais.