Cazzeri 1 Denunciar post Postado Setembro 18, 2014 Boa tarde, Digamos que eu receba como valor o link do youtube "youtube.com/watch?v=wRLDED03fPQ"... como ficaria uma função que corte apenas a parte da ID do vídeo, que seria o valor depois do v= wRLDED03fPQ, e retornar apenas esse pedaço. Já ouvi falar do explode e do split... alguém tem alguma ideia de como fazer? Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Setembro 18, 2014 É só usar substr() $link = 'youtube.com/watch?v=wRLDED03fPQ'; $id = substr($link, 20); // Pega tudo a partir do 21º caractere Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Setembro 18, 2014 Ah boaa... vou testar. Valeu Massaki. Isso aí... só uma coisa, se souber responder... não existe uma função nativa que conte quantos caracteres tem na string? Só para validar caso ele coloque só .com (32) e se for .com.br (35). Vou dar uma pesquisada ;) Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Diogo Camargo 18 Denunciar post Postado Setembro 18, 2014 Existe uma função nativa para tratar URLs chamada parse_url (php.net/parse_url) $url = parse_url('http://www.youtube.com/watch?v=wRLDED03fPQ', PHP_URL_QUERY); parse_str($url, $query); echo $query['v']; // wRLDED03fPQ Compartilhar este post Link para o post Compartilhar em outros sites
Gleyson Abreu 49 Denunciar post Postado Setembro 18, 2014 Como o Massaki boto e uma das opções. Já que youtube como você de de referencia, o id do video e sempre depois do sinal da igualdade(=) você pode da um explode. <?php $link = 'youtube.com/watch?v=wRLDED03fPQ'; $id = explode('=', $link); echo $id[1]; ?> o echo $id[1]; ele pega que se refere a wRLDED03fPQ eo $id[0]; se refere a youtube.com/watch?v Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Setembro 18, 2014 A melhor solução é a do post #4 (Diogo Camargo), já que nem sempre só tem o parametro V no link... tem casos que vem outros, e aí a manipulação pode ficar comprometida! Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Setembro 18, 2014 Para saber a quantidade de caracteres, strlen($string) Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Setembro 18, 2014 Os três funcionam perfeitamente, tanto o substr (Massaki), o explode (Gleyson) e o parse_url/parse_str (Diogo). O único que compromete mesmo é o substr. Pq o cara pode colocar tanto http:// quanto http://www... ou nada, só youtube.com/... "estragando" a contagem. Valeu gurizada pelas dicas. Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Setembro 19, 2014 Olá, Criei uma classe que faz o envio de vídeos do youtube e vimeo. vou colocar a ideia de uso. <?php $urlVideoYoutube = "http://www.youtube.com/watch?v=d7HahF30vH4"; $Embed = ( strstr($urlVideoYoutube, 'https') ? substr($urlVideoYoutube, 32, 11) : substr($urlVideoYoutube, 31, 11) ); $youtube = get_meta_tags('http://www.youtube.com/watch?v=' . $Embed); dentro da $youtube a mesma virou um array com as informações básica para uso, poderá dar um var_dump($youtube); e saber tudo que pode fazer com a mesma. Solucionou seu problema, marque como resolvido e me der um ponto positivo de reputação. Att: João Paulo - Desenvolvedor Compartilhar este post Link para o post Compartilhar em outros sites
Diogo Camargo 18 Denunciar post Postado Setembro 19, 2014 Vocês ainda estão nessa é? Não adianta tratar URL com funções do php que foram criadas para outros propositos, é como tentar usar expressão regular para trabalhar com DOM. Se me permite, eu diria que se quer realmente algo confiável, vai ter que observar o que o PHP fez para resolver esse problema. Se me permite mostrar um exemplo, eu faria algo assim. AbstractVideoUrl.php <?php // Strategy abstract class AbstractVideoUrl { private $url = ''; private $parts = array(); public function __construct($url) { $this->url = $url; $this->parts = parse_url($this->url); } protected function checkHost() { if (in_array($this->getHost(), $this->domains) === false) { return false; } return true; } abstract public function getVideoId(); public function getHost() { return $this->get('host'); } public function getPath() { return $this->get('path'); } public function get($part) { return $this->parts[$part]; } } YouTubeVideoUrl.php <?php class YouTubeVideoUrl extends AbstractVideoUrl { protected $domains = array( 'www.youtube.com', 'youtube.com', 'youtu.be', 'www.youtu.be' ); public function getVideoId() { if (!$this->checkHost()) { throw new InvalidArgumentException('URL inválida!... etc...'); } if (strpos($this->getHost(), 'youtu.be') !== false) { return ltrim($this->getPath(), '/'); } if (preg_match('</(v|vi|embed)/>i', $this->getPath())) { $split = explode('/', $this->getPath()); return end($split); } parse_str($this->get('query'), $result); foreach($result as $key => $value) { if (in_array($key, array('v', 'vi')) !== false) { return $value; } } return ''; } } <?php $YouTubeVideoUrl = new YouTubeVideoUrl('//www.youtube.com/watch?v=IFkBudUijgo'); /* * $YouTubeVideoUrl = new YouTubeVideoUrl('//youtu.be/IFkBudUijgo'); * $YouTubeVideoUrl = new YouTubeVideoUrl('//www.youtube.com/watch?v=IFkBudUijgo'); * $YouTubeVideoUrl = new YouTubeVideoUrl('//www.youtube.com/watch?v=IFkBudUijgo'); * $YouTubeVideoUrl = new YouTubeVideoUrl('//www.youtube.com/vi/IFkBudUijgo'); * $YouTubeVideoUrl = new YouTubeVideoUrl('//www.youtube.com/embed/IFkBudUijgo'); */ try { echo $YouTubeVideoUrl->getVideoId(); } catch (InvalidArgumentException $InvalidArgumentException) { echo $InvalidArgumentException->getMessage(); } Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Setembro 24, 2014 Nossa Diogo... uma classe inteira cheia de functions para algo simples? No meu caso, analisando parece muito bom, mas o parse_url ou usando o explode tbm já foram bem úteis. Compartilhar este post Link para o post Compartilhar em outros sites
Diogo Camargo 18 Denunciar post Postado Setembro 24, 2014 Nossa Diogo... uma classe inteira cheia de functions para algo simples? Olá Cazzeri, não se trata de uma classe inteira, se trata de solução, veja algo sobre DRY Não se pode falar de classe como se isso fosse como "carregar uma cruz", as linguagens mais poderosas do mundo são completamente orientadas a objetos. Toda vez que você precisar pegar uma ID em um site diferente, vai ter que reescrever tudo ou copiar e colar o mesmo código. Esse exemplo que dei resolve isso, veja. DailyMotionVideoUrl.php class DailyMotionVideoUrl extends AbstractVideoUrl { protected $domains = array( 'www.dailymotion.com', 'dailymotion.com', 'dai.ly' ); public function getVideoId() { /* * [...] */ } /* * [...] */ Outro detalhe no caso do YouTube, se você usar apenas o exemplo simples com parse_url, não vai conseguir obter a ID do vídeo quando a URL for diferente de .../watch?v= A classe YouTubeVideoUrl nunca irá falhar em qualquer URL de vídeo do YouTube. Compartilhar este post Link para o post Compartilhar em outros sites
valeriabarros 11 Denunciar post Postado Setembro 25, 2014 Diogo, KISS! Compartilhar este post Link para o post Compartilhar em outros sites
Diogo Camargo 18 Denunciar post Postado Setembro 25, 2014 Diogo, KISS! Olá Valéria, é interessante notar e entender muito bem, acredito que uma opinião deve ser fundada em pesquisa e vivencia, bem, digo isso por que vejo que o uso desses princípios virou um tipo de moda aqui no Brasil. Colocar KISS aqui é como usar algo que não possui ligação para justificar outro. Quero dizer, usar KISS para justificar a preguiça e código ruim. O que é simples: Escrever tudo toda vez, ou apenas uma vez? Ver como é simples abrirmos um cadeado ou ainda acender uma lâmpada? Mas não é fácil fazer um cadeado ou lâmpada. KISS parte deste principio. Existem duas coisas a serem observadas: 1 - Será que esse código é complicado ou eu não tenho conhecimento suficiente? 2 - Estou usando KISS apenas para mim, ou é uma opinião de todos? Existem diferenças entre coisas complicadas e coisas que apenas alguns ainda não conseguiram entender. Tenho visto uma grande rejeição dos membros do fórum quando o assunto é orientação a objetos, todos vêem como uma coisa complicada, isso não é bom, acaba por afastar programadores experiêntes do site. Eu programo orientado a objetos, algo que acontece desde que somos bebê em Java. Um grande abraço pra você. Compartilhar este post Link para o post Compartilhar em outros sites
valeriabarros 11 Denunciar post Postado Setembro 25, 2014 Caro Diogo, Desenvolvo usando orientação a objetos desde sempre. Não se preocupe, entendi perfeitamente o que quis dizer. Minha rejeição ao seu código não é pelo uso de OO, mas sim por apresentar uma solução mais complexa que o necessário, visto que a necessidade do colega é simples, e facilmente implementável em duas linhas de código, como citado acima. Acredito muito na iniciativa KISS, não por preguiça, mas por experiência com desenvolvimento ágil. Compartilhar este post Link para o post Compartilhar em outros sites
Diogo Camargo 18 Denunciar post Postado Setembro 25, 2014 por apresentar uma solução mais complexa que o necessário, visto que a necessidade do colega é simples, e facilmente implementável em duas linhas de código, como citado acima. Já que você fez uma réplica, deixe-me da uma tréplica :P rss. É assim, um fórum não é composto apenas pela pessoa que perguntou, por isso, quando respondemos, estamos falando para muitos, mesmo que o colega quer algo simples, vi aqui a oportunidade de um dia daqui a 30 anos alguém entrar no fórum e ver um exemplo bacana e profissional. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
valeriabarros 11 Denunciar post Postado Setembro 25, 2014 vi aqui a oportunidade de um dia daqui a 30 anos alguém entrar no fórum e ver um exemplo bacana e profissional. :thumbsup: Bacana pensar isso. Bom, daqui a 30 anos alguém irá ler isso e concordar comigo =p Hahahha. (E hey, KISS também pode ser bacana e profissional. Nem tudo precisa ser engessado =D ) []'s Compartilhar este post Link para o post Compartilhar em outros sites
BoinaVerde 16 Denunciar post Postado Setembro 25, 2014 Juro que na hora que eu li : KISS eu pensei que ela tava mandando um beijo pra ele :( vou procurar saber o que diabos e KISS KKK Compartilhar este post Link para o post Compartilhar em outros sites
Marcos_imasters 288 Denunciar post Postado Setembro 25, 2014 <?php $file = file_get_contents ('http://www.youtube.com/watch?v=2ninzFW4MIo'); preg_match('/(?<=url_encoded_fmt_stream_map"\: ")(.*?)(?=")/',$file,$result); preg_match('/(?<=(<title>))(.*?)(?=(<\/title>))/',$file,$title); $data = explode(',',$result[0]); $i = 1; echo urldecode($data[0]); foreach ($data as $d){ $t = str_replace("&","&",urldecode($d)); parse_str($t,$b); $a = parse_url($b['url']); parse_str($a['query'],$z); $b = array_merge($b,$z); $url[$i]['type']=$b['type']." = ".$b['quality']; $url[$i]['url'] = "http://r20---sn-bg07dn7s.youtube.com/videoplayback?sver={$b['sver']}&ratebypass={$b['ratebypass']}&sparams=cp,id,ip,ipbits,itag,ratebypass,source,upn,expire&mt={$b['mt']}&key={$b['key']}&ip={$b['ip']}&ipbits={$b['ipbits']}&itag={$b['itag']}&source={$b['source']}&upn={$b['upn']}&mv={$b['mv']}&fexp={$b['fexp']}&ms={$b['ms']}&expire={$b['expire']}&id={$b['id']}&cp={$b['cp']}&signature={$b['sig']}&title={$title[0]}"; $i++; } foreach ($url as $v) { echo "<p>{$v['type']} ---- <a href='{$v['url']}' target='_blank'>Click Here To Download</a></p>"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Setembro 25, 2014 BoinaVerde bem nessas rsrsrs... estava pronto para responder a valeriabarros "kiss pra ti tbm" :coolio: Diogo Camargo, vou começar a levar essa frase comigo nos projetos: "O que é simples: Escrever tudo toda vez, ou apenas uma vez?"... E outra, sempre quando peço ajuda, sempre utilizo aquela ideia de código onde deu certo e eu entendi o que estava acontecendo naquele código. Até a próxima pessoal pesquisar o que é kiss Compartilhar este post Link para o post Compartilhar em outros sites