ezequielg 1 Denunciar post Postado Outubro 18, 2010 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"></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" 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>'; Compartilhar este post Link para o post Compartilhar em outros sites
Buongiorno 0 Denunciar post Postado Outubro 19, 2010 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 $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"></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" 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" width="400" height="225" frameborder="0"></iframe>'; // 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 preg_match('/(height)=("[^"]*")/i',$codigo_video, $result); $height = preg_replace('/\D/','',$result[0]); // Valores arbitrários, apenas para teste $largura_video = "120"; $altura_video = "140"; // Substitue os valores $codigo_video = str_replace("width=\"".$width."\"", "width=\"".$largura_video."\"", $codigo_video); $codigo_video = str_replace("height=\"".$height."\"", "height=\"".$altura_video."\"", $codigo_video); echo $codigo_video; ?> Até mais. Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Outubro 20, 2010 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 Compartilhar este post Link para o post Compartilhar em outros sites
Buongiorno 0 Denunciar post Postado Outubro 20, 2010 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"></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" 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" 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. Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Outubro 21, 2010 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"></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" 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. Compartilhar este post Link para o post Compartilhar em outros sites
Buongiorno 0 Denunciar post Postado Outubro 22, 2010 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. Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Outubro 22, 2010 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! Compartilhar este post Link para o post Compartilhar em outros sites
ezequielg 1 Denunciar post Postado Outubro 27, 2010 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"></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" 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 Compartilhar este post Link para o post Compartilhar em outros sites