Código complexo YouTube!

08/10/2014

Bom pessoal, no meu blogue tenho imagens ou vídeos como destaque e estou tendo uma dificuldade, os vídeos que eu adicione são do YouTube no momento, e antes eu adicionava o código de compartilhamento do vídeo, isso tava xato para meus futuros colunistas podia ser algo que atrasariam eles, e resolvi colocar a URL do vídeo apenas, mas estou tendo dificuldades quanto a estrutura da URL, visto que nem sempre ela mantem um padrão! vejamos!

URL NO NAVEGADOR
https://www.youtube.com/watch?v=8h8v7tu9118


CÓDIGO DE INCORPORAÇÃO
<iframe width="560" height="315" src="//www.youtube.com/embed/8h8v7tu9118" frameborder="0" allowfullscreen></iframe>


URL DE INCORPORAÇÃO
//www.youtube.com/embed/8h8v7tu9118


Notem a diferença entre URL's

https://www.youtube.com/watch?v=8h8v7tu9118
//www.youtube.com/embed/8h8v7tu9118


a única parte que tem igual é o identificador do vídeo que e este!
8h8v7tu9118


Ele nunca muda e notando isso e fiz o seguinte código.

$video_original = $_POST['video'];
		$trata_link = array(
		'www.youtube.com/watch?v=' => '',
		'www.youtube.com/' => '',
		'www.youtube.com' => '',
		'//' => '',
		'embed/' => '',
		'?feature=player_detailpage' => '',
		'feature=player_embedded&v=' => '',
		'feature=player_profilepage&v=' => '',
		'feature=player_detailpage&v=' => '',
		'watch?' => '',
		'https://' => ''	
		);
		
		$video = strtr($video_original, $trata_link);


isso está funcionando legal quase sem problemas, e meu código php grava as duas variáveis no meu banco que no final saem como!

Resultado final e gravado no Banco de dados!
$video_original = 'https://www.youtube.com/watch?v=8h8v7tu9118';
$video = '8h8v7tu9118';


então quando exibido o artigo eu chamo a variável $video com esse código.

<iframe src='//www.youtube.com/embed/$video?feature=player_detailpage' class='you' frameborder='0' allowfullscreen></iframe>


Notem que no local que vem o código eu utilizei a variável vídeo com o código ou identificador do vídeo e assim ta beleza, funcionando! o único problema é que algumas URLs ainda fogem desses padrões que estabeleci para que seja substituindo por
''
tem um código que faça isso de forma mais simples? algo semelhante ao WordPress só colocar qualquer URL do YouTube e ele identificar e exibir logo o Player? me ajudem :D

PHP

Cleyton Caetano

Respostas

08/10/2014

Ronaldo Lanhellas

Bom, imagino que todas as url's sigam o padrão: 'https://www.youtube.com/watch?v=xxxx' e nesse caso só pegar o valor da variável 'v' e armazenar como id do vídeo para usar com o novo link "embeded".
Responder Citar

10/10/2014

Cleyton Caetano

Bom, imagino que todas as url's sigam o padrão: 'https://www.youtube.com/watch?v=xxxx' e nesse caso só pegar o valor da variável 'v' e armazenar como id do vídeo para usar com o novo link "embeded".

mas nem sempre segue esse padrão, olhe..

http://youtu.be/lEfr5nPnB1g

https://www.youtube.com/watch?v=lEfr5nPnB1g&feature=player_detailpage

//www.youtube.com/embed/lEfr5nPnB1g
Responder Citar

10/10/2014

Fabiano Carvalho

Veja os padrões que eles tem que acredito que seja apenas esses 3, e faça a validação para pegar somente o ID do video.
Pode tentar utilizando RegExp
Responder Citar

10/10/2014

Cleyton Caetano

Veja os padrões que eles tem que acredito que seja apenas esses 3, e faça a validação para pegar somente o ID do video. Pode tentar utilizando RegExp


Já estou fazendo isso! veja neste exemplo!

$video_original = $_POST['video'];
        $trata_link = array(
        'www.youtube.com/watch?v=' => '',
        'www.youtube.com/' => '',
        'www.youtube.com' => '',
        '//' => '',
        'embed/' => '',
        '?feature=player_detailpage' => '',
        'feature=player_embedded&v=' => '',
        'feature=player_profilepage&v=' => '',
        'feature=player_detailpage&v=' => '',
        'watch?' => '',
        'https://' => ''
        );
         
        $video = strtr($video_original, $trata_link);


e mesmo retirando todos esses padrões já listados ainda assim me deparo hora ou outra com uma URL fora dos meus padrões!
Responder Citar

10/10/2014

Fabiano Carvalho

Então acredito que você terá que acessar o youtube através de cURL e utilizar RegExp para retornar os links independentemente do padrão.
Acredito que será mais "automático" isso, ao invés de informar os padrões que sua aplicação suporta.
Responder Citar

11/10/2014

Ronaldo Lanhellas

[quote]Bom, imagino que todas as url's sigam o padrão: 'https://www.youtube.com/watch?v=xxxx' e nesse caso só pegar o valor da variável 'v' e armazenar como id do vídeo para usar com o novo link "embeded".

mas nem sempre segue esse padrão, olhe..

http://youtu.be/lEfr5nPnB1g

https://www.youtube.com/watch?v=lEfr5nPnB1g&feature=player_detailpage

//www.youtube.com/embed/lEfr5nPnB1g
[/quote]

Regex é uma boa pedida mas se você não sabe quais padrões suportados então regex também não adianta. Enfim, a melhor opção é você ver quais os padrões utilizados e definir casos de tratamento para cada um.
Responder Citar

12/10/2014

Cleyton Caetano

[quote][quote]Bom, imagino que todas as url's sigam o padrão: 'https://www.youtube.com/watch?v=xxxx' e nesse caso só pegar o valor da variável 'v' e armazenar como id do vídeo para usar com o novo link "embeded".

mas nem sempre segue esse padrão, olhe..

http://youtu.be/lEfr5nPnB1g

https://www.youtube.com/watch?v=lEfr5nPnB1g&feature=player_detailpage

//www.youtube.com/embed/lEfr5nPnB1g
[/quote]

Regex é uma boa pedida mas se você não sabe quais padrões suportados então regex também não adianta. Enfim, a melhor opção é você ver quais os padrões utilizados e definir casos de tratamento para cada um.[/quote]

Acho que no final de tudo essa vai ser a solução mesmo! :D
Responder Citar