Nova Função para baixar videos do Youtube utilizando PHP – Janeiro 2012

Olá pessoal, estou disponibilizando aqui uma função que eu fiz para baixar video do Youtube, com esta função você pode escolher até a qualidade e o tipo de video. A url do Youtube pode estar em qualquer formato. Segue abaixo a função atualizada para 01/2012:

<?php
    /**
    @author Leandro Alves Moreira <contato@killme.com.br>
    @param string $video_url Url do video em qualquer formato
    @param string $video_savepath Caminho em que sera salvo o arquivo, se nao
    for setado, ele ira salvar no mesmo diretorio do arquivo.
    @param string $video_filename Nome do arquivo sem extensao, se nao for
    setado o nome sera o id do video no Youtube
    @param string $video_quality Qualidade do video, opcoes: hd1080,hd720,large,medium,small
    @param string $video_type Tipo de video, opcoes: video/mp4, video/webm, video/x-flv
    @name getYoutubeVideo
    @return bool
    @version 2012-01-29
    Download videos Youtube
    **/
    function getYoutubeVideo($video_url = '', $video_savepath = '', $video_filename = '', $video_quality = null, $video_type = null ) {
 
        //setando algumas variaveis
        $video_ext = Array('video/mp4'=>'mp4','video/webm'=>'webm','video/x-flv'=>'flv');
        $video_url_dl = '';
        $video_found = false;
        $video_options = Array();
 
        //validando parametros da funcao
        if(filter_var($video_url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)) {
 
            //pegando html da pagina do youtube
            $youtube_page = file_get_contents($video_url);
 
            //procurando trecho do codigo em JSON
            $data1 = explode("yt.playerConfig = ", $youtube_page);
            $data2 = explode("yt.setConfig({",$data1[1]);
 
            //atribuindo somente o JSON a uma variavel
            $youtube_json = substr(trim($data2[0]), 0,-1);
 
            //decodificando JSON para Objeto
            $youtube_json_decoded = json_decode(html_entity_decode($youtube_json));
 
            //inserindo as urls dos videos em um array
            $youtube_video_urls = explode(',',$youtube_json_decoded->args->url_encoded_fmt_stream_map);
 
 
 
 
            foreach($youtube_video_urls AS $key => $val) {
 
                //pegando somente a parte que interessa
                $val = explode(urlencode(';'), $val);
 
                //sobrescrevendo em cima da mesma informacao
                $youtube_video_urls[$key] = urldecode(urldecode(substr($val[0], 4)));
            }
 
 
 
            //verifica a qualidade selecionada do video, se a qualidade nao existir no youtube
            //ou nenhuma for selecionada, a melhor qualidade sera escolhida
            if(isset($video_quality)) {
                switch($video_quality) {
 
                    case 'hd1080':
                    case 'hd720':
                    case 'large':
                    case 'medium':
                    case 'small':
                        $video_options["quality"] = $video_quality;
                    break;
 
                    default:
                        $video_options["quality"] = 'hd1080';
                    break;
                }
 
            } else {
                $video_options["quality"] = 'hd1080';
            }
 
 
            //verifica o tipo do video, se tipo nao existir no youtube
            //ou nenhum for selecionado, mp4 sera escolhida
            if(isset($video_type)) {
                switch($video_type) {
 
                    case 'video/mp4':
                    case 'video/webm':
                    case 'video/x-flv':
                        $video_options["type"] = $video_type;
                    break;
 
                    default:
                        $video_options["type"] = 'video/mp4';
                    break;
                }
 
            } else {
                $video_options["type"] = 'video/mp4';
            }
 
            //procurando video
            foreach($youtube_video_urls AS $key => $val) {
 
                $parsed_url = parse_url($val);
 
                parse_str($parsed_url["query"], $parsed_query);
 
                if(in_array($video_options["type"], $parsed_query) && in_array($video_options["quality"], $parsed_query)) {
                    $video_found = true;
                    $video_url_dl = $val;
                    break;
                }
            }
 
            //se o nome do arquivo nao for setado
            if(!isset($video_filename)) {
                $video_filename = $youtube_json_decoded->args->video_id.'.'.$video_ext[$video_options["type"]];
            } else {
                $video_filename = $video_filename.'.'.$video_ext[$video_options["type"]];
            }
 
            //se o caminho para salvar o arquivo nao for setado
            if(!isset($video_savepath) || !is_dir($video_savepath)) {
                $video_savepath = './';
            } else {
                $video_savepath = $video_savepath.'/';
            }
 
            //se o video foi encontrado
            if($video_found) {
                $video_stream = file_get_contents($video_url_dl);
            } else {
                $video_stream = file_get_contents($youtube_video_urls[0]);
            }
 
            //fazendo download do video e salvando
            $handle = fopen($video_savepath.$video_filename, 'w+');
            fwrite($handle, $video_stream);
            fclose($handle);
 
            return true;
 
        } else {
            return false;
        }
    }
?>

Exemplo de uso:

getYoutubeVideo('http://www.youtube.com/watch?v=nm42UBPnpxI&feature=mh_lolz&list=FLwT0FQqRkWv3Tni9SlrEQuw', 'video/', 'teste2', 'hd720', 'video/mp4');

 

Essa função já está funcionando com a nova versão 2012 do Youtube, críticas, sugestões e melhorias no código podem ser postadas nos comentários. Obrigado.

Função para baixar videos do Youtube utilizando PHP

Atenção, essa função já não funciona mais no youtube, segue o link desta função atualizada: Nova Função para baixar videos do Youtube utilizando PHP – Janeiro 2012

Olá pessoal, estou disponibilizando aqui uma função que eu fiz para baixar video do Youtube, com esta função você pode escolher até a qualidade e o tipo de video. A url do Youtube pode estar em qualquer formato. Segue abaixo a função:

<!--?php 
/**
    @author Leandro Alves Moreira <contato@killme.com.br-->
    @param string $video_url Url do video em qualquer formato
    @param string $video_savepath Caminho em que sera salvo o arquivo, se nao
    for setado, ele ira salvar no mesmo diretorio do arquivo.
    @param string $video_filename Nome do arquivo sem extensao, se nao for
    setado o nome sera o id do video no Youtube
    @param string $video_quality Qualidade do video, opcoes: hd1080,hd720,large,medium,small
    @param string $video_type Tipo de video, opcoes: video/mp4, video/webm, video/x-flv
    @name getYoutubeVideo
    @return bool
    @version 2011-08-26
    Download videos Youtube
    **/
    function getYoutubeVideo($video_url = '', $video_savepath = '', $video_filename = '', $video_quality = null, $video_type = null ) {
 
        //setando algumas variaveis
        $video_ext = Array('video/mp4'=>'mp4','video/webm'=>'webm','video/x-flv'=>'flv');
        $video_url_dl = '';
        $video_found = false;
        $video_options = Array();
 
        //validando parametros da funcao
        if(filter_var($video_url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)) {
 
            //pegando html da pagina do youtube
            $youtube_page = file_get_contents($video_url);
 
            //procurando trecho do codigo em JSON
            $data1 = explode("'PLAYER_CONFIG': ", $youtube_page);
            $data2 = explode("  });",$data1[1]);
 
            //atribuindo somente o JSON a uma variavel
            $youtube_json = $data2[0];
 
            //decodificando JSON para Objeto
            $youtube_json_decoded = json_decode(html_entity_decode($youtube_json));
 
            //inserindo as urls dos videos em um array
            $youtube_video_urls = explode(',',$youtube_json_decoded->args->url_encoded_fmt_stream_map);
 
            foreach($youtube_video_urls AS $key => $val) {
 
                //pegando somente a parte que interessa
                $val = explode(urlencode(';'), $val);
 
                //sobrescrevendo em cima da mesma informacao
                $youtube_video_urls[$key] = urldecode(urldecode(substr($val[0], 4)));
            }
 
            //verifica a qualidade selecionada do video, se a qualidade nao existir no youtube
            //ou nenhuma for selecionada, a melhor qualidade sera escolhida
            if(isset($video_quality)) {
                switch($video_quality) {
 
                    case 'hd1080':
                    case 'hd720':
                    case 'large':
                    case 'medium':
                    case 'small':
                        $video_options["quality"] = $video_quality;
                    break;
 
                    default:
                        $video_options["quality"] = 'hd1080';
                    break;
                }
 
            } else {
                $video_options["quality"] = 'hd1080';
            }
 
            //verifica o tipo do video, se tipo nao existir no youtube
            //ou nenhum for selecionado, mp4 sera escolhida
            if(isset($video_type)) {
                switch($video_type) {
 
                    case 'video/mp4':
                    case 'video/webm':
                    case 'video/x-flv':
                        $video_options["type"] = $video_type;
                    break;
 
                    default:
                        $video_options["type"] = 'video/mp4';
                    break;
                }
 
            } else {
                $video_options["type"] = 'video/mp4';
            }
 
            //procurando video
            foreach($youtube_video_urls AS $key => $val) {
 
                $parsed_url = parse_url($val);
 
                parse_str($parsed_url["query"], $parsed_query);
 
                if(in_array($video_options["type"], $parsed_query) && in_array($video_options["quality"], $parsed_query)) {
                    $video_found = true;
                    $video_url_dl = $val;
                    break;
                }
            }
 
            //se o nome do arquivo nao for setado
            if(!isset($video_filename)) {
                $video_filename = $youtube_json_decoded->args->video_id.'.'.$video_ext[$video_options["type"]];
            } else {
                $video_filename = $video_filename.'.'.$video_ext[$video_options["type"]];
            }
 
            //se o caminho para salvar o arquivo nao for setado
            if(!isset($video_savepath) || !is_dir($video_savepath)) {
                $video_savepath = './';
            } else {
                $video_savepath = $video_savepath.'/';
            }
 
            //se o video foi encontrado
            if($video_found) {
                $video_stream = file_get_contents($video_url_dl);
            } else {
                $video_stream = file_get_contents($youtube_video_urls[0]);
            }
 
            //fazendo download do video e salvando
            $handle = fopen($video_savepath.$video_filename, 'w+');
            fwrite($handle, $video_stream);
            fclose($handle);
 
            return true;
 
        } else {
            return false;
        }
    }
?>

Exemplo de uso:

getYoutubeVideo('http://www.youtube.com/watch?v=nm42UBPnpxI&feature=mh_lolz&list=FLwT0FQqRkWv3Tni9SlrEQuw', 'video/', 'teste2', 'hd720', 'video/mp4');

 

Essa função já está funcionando com a nova versão 2011 do Youtube, críticas, sugestões e melhorias no código podem ser postadas nos comentários. Obrigado.

Formatando moeda Real no Javascript e Jquery

Formatar moeda no Javascript ou Jquery é muito fácil:

function reais(num){
   num = num.replace(".","");
   num = num.replace(",",".");
   return parseFloat(num);
}

Formatando moeda no Smarty, frameworks para PHP

Formatar moeda no framework Smarty é muito fácil, veja a seguir:

{$value|number_format:2:",":"."}

Formatar moeda Real no PHP usando money_format

Formatar moedas no PHP é muito fácil, veja como fazer isto utilizando a função money_format().

<?php
$valor = 87946.00;
echo number_format($valor,2,',','.');
?>

O resultado será: 87.946,00

Formatar moeda Real no PHP usando number_format

Formatar moedas no PHP é muito fácil, veja como fazer isto utilizando a função number_format().

<?php
$valor = 87946.00;
echo number_format($valor,2,',','.');
?>

O resultado será: 87.946,00

Separando URLs açucaradas em um array com PHP

Com esta função abaixo você consegue pegar a URL atual e separar com um array para poder usar como quiser.

function get_url_array() {
    $url = array_values(array_filter(explode("/",str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]))));
    return $url;
 }

Uma URL como esta: http://www.phpmysqljquery.com.br/level1/level2/level3/level4/level5 irá retornar algo assim: Array(0=>’level1′,1=>’level2′,2=>’level3′,3=>’level4′,4=>’level5′).

Fique sempre atento a documentação do PHP, MySQL e jQuery. Até mais.

Separando URLs açucaradas em um array com Javascript

Com esta função abaixo você consegue pegar a URL atual e separar com um array para poder usar como quiser. Geralmente eu uso para fazer algum tipo de ação em alguma página que sei a URL.

function get_url_array() {
    url = window.location;
    url = url.toString();
    url = url.split('/');
    url.splice(0,3);
    return url;
 }

Uma URL como esta: http://www.phpmysqljquery.com.br/level1/level2/level3/level4/level5 irá retornar algo assim: Array(‘level1′,’level2′,’level3′,’level4′,’level5′).

Fique sempre atento a documentação do PHP, MySQL e jQuery. Até mais.

Convertendo datas no formato string para o formato de data do MySQL com o str_to_date

Se você precisa converter aquela data esquisita que só você entende para um formato padrão usado no MySQL, preste atenção logo abaixo:

SELECT STR_TO_DATE('Dec/22/2010', '%M/%d/%Y') as date;

Retorna: 2010-12-22

SELECT STR_TO_DATE('Dec/22/2010 10:11', '%M/%d/%Y') as date;

Retorna: 2010-12-22 10:11:00

Basta você mostrar a data e dar um layout a ela e depois ver o resultado. Isto pode ser usado em qualquer tipo de Query.

As funções usadas do MySQL foram:STR_TO_DATE. Fique sempre atento a documentação do PHP, MySQL e jQuery. Até mais.

Datas no formato de arquivo de sitemap ou ISO 8601 no PHP

Olá, no PHP 4 para fazer datas para os meus sitemaps eu utilizava uma gambiarra feia pra caramba, pois segundo as normas o tipo de data utilizado na maioria deles é a ISO 8601, ou seja, neste formato aqui: 2004-02-12T15:19:21+00:00

Então eu tinha de fazer algo como:

<?php
    echo date('Y-m-d\TH:i:sP');
?>

Mas agora no PHP 5 não é mais necessário, basta fazer:

<?php
    echo date(c);
?>

Simples não?

As funções usadas do PHP foram: date. Fique sempre atento a documentação do PHP, MySQL e jQuery. Até mais.