Adobe Flex, apresentação

Posted by Andrews on abril 29th, 2009

Fui convidado por meus colegas de classe da Uniguaçu para que ministrasse um curso de extenção sobre Adobe Flex para eles, assim mostrando os passos iniciais para se trabalhar com a ferramenta.
Pois bem, aceitei e acatei a idéia. Penso que quanto mais desenvolvedores eu conseguir trazer para o mundo das RIA, certamente todos estaremos ganhando em qualidade de softwares no mercado.
A partir deste curso estarei postando todo o material ao qual utilizamos em sala de aula aqui no blog, criando assim um passo-a-passo do curso, para que este também esteja disponível para a comunidade. Não sou um ninja em Adobe Flex, mas o pouco que conheço certamente fara a diferença e ajudará os que estão começando. No curso estaremos adaptando um sistema que está desenvolvido em php e que foi utilizado somente para estudos, o qual comentarei no próximo post.
Para dar início a este passo-a-passo, deixo aqui a apresentação utilizada na primeira aula, onde fala sobre Adobe Flex, RIA/AIR, plugins/ferramentas e sobre vantagens/desvantagens de se utilizar a ferramenta.
Bom estudo, até a próxima.

Populando ComboBox no Flash com PHP, MySQL e XML

Posted by Andrews on fevereiro 5th, 2009

Tenho estudado muito nos últimos dias, afinal quem trabalha nesta área tem de estar em aprendizado constante. Estou iniciando meus estudos em OOP no PHP e também aprofundando meu conhecimento no Adobe Flex, e tenho progredido bastante neste período.
Mas brother, vamos ao que interessa para este post, acabei escrevendo um código utilizando PHP e MySQL, onde o PHP gera um XML através de uma consulta na tabela para alimentar um ComboBox Component no Flash.
Alimentar um ComboBox é simples, mas resolvi que iremos alimetar dois ComboBox, onde, um irá alimentar o outro, utilizarei os estados do Brasil e suas cidades como exemplo.

1ª Etapa:
Aqui, definiremos nossas tabelas no MySQL.
Tabela estado

CREATE TABLE `estado` (
    `est_codigo` int(2) NOT NULL auto_increment,
    `est_nome` varchar(50),
    PRIMARY KEY  (`est_codigo`)
)
insert  into
    `estado`(`est_codigo`,`est_nome`)
values
    (1,'Santa Catarina'),
    (2,'Paraná'),
    (3,'Rio Grande do Sul'),
    (4,'São Paulo'),
    (5,'Rio de Janeiro');

Tabela cidade

CREATE TABLE `cidade` (
    `cid_codigo` int(5) NOT NULL auto_increment,
    `cid_est_codigo` int(2) default NULL,
    `cid_nome` varchar(70) default NULL,
    PRIMARY KEY  (`cid_codigo`)
)
insert  into
    `cidade`(`cid_codigo`,`cid_est_codigo`,`cid_nome`)
values
    (1,1,'Porto União'),
    (2,1,'Canoinhas'),
    (3,1,'Balneário Camboriú'),
    (4,1,'Caçador'),
    (5,1,'Florianópolis'),
    (6,2,'Curitiba'),
    (7,2,'União da Vitória'),
    (8,2,'Foz do Iguaçu'),
    (9,3,'Porto Alegre'),
    (10,3,'Canoas'),
    (11,3,'Caxias do Sul'),
    (12,4,'São Paulo'),
    (13,4,'Campinas'),
    (14,4,'Santos'),
    (15,4,'Ubatuba'),
    (16,5,'Rio de Janeiro'),
    (17,5,'Angra dos Reis'),
    (18,5,'Paraty');

2ª Etapa:
Precisaremos de uma conexão com nosso banco de dados, caso ja tenha ou saiba como criar uma pode passar para a próxima etapa.
Crie um novo arquivo PHP e salve-o com o nome de Conexao.php então escreveremos a classe Conexao.

<?php
class Conexao {
 
        // CONSTRUTOR
	function __construct() {
		return true;
	}
 
	/**
	 * FUNCTION CONEXAO
	 * @return $cnx
	 */
	function conectar() {
		$sHost      = 'nome-do-host';
		$sDB        = 'nome-do-db';
		$sUser      = 'nome-do-user-mysql';
		$sPassword  = 'senha-do-usuer';
		$cnx        = mysql_connect($sHost, $sUser, $sPassword);
		mysql_select_db($sDB, $cnx);
		return $cnx;
	}
}
?>

3ª Etapa
Nesta etapa definiremos as classes que irão gerar o XML para alimentar o ComboBox de estados que por sua vez irá alimentar o ComboBox de cidades.
Então crie um arquivo PHP chamado Estado.php e escreva a classe abaixo.

<?php
// INFORMAMOS QUE O DOCUMENTO SERA DO TIPO XML
header("Content-Type: text/xml; charset=UTF-8", true);
 
// CONEXAO
require_once('Conexao.php');
 
// CLASS ESTADO
class Estado {
 
	// CONSTRUTOR
	function __construct() {
		return true;
	}
 
	/**
	 * FUNCTION getEstado
	 * @return xml
	 */
	function getEstado() {
 
		// CONEXAO
		$conexao = new Conexao();
		$cnx     = $conexao->conectar();
 
		// SELECIONA ESTADO NO DB
		$sSQL = "SELECT est_codigo, est_nome FROM estado ORDER BY est_nome ASC";
		$qSQL = mysql_query($sSQL, $cnx) or die(mysql_error());
 
		// GERANDO XML
		echo "<?xml version='1.0' encoding='UTF-8'?> ";
		echo "<estados>";
			while( $aRow = mysql_fetch_array($qSQL) ) {
				echo "<estado>";
				echo "<codigo><![CDATA[" . $aRow['est_codigo'] . "]]></codigo>";
				echo "<nome><![CDATA["   . $aRow['est_nome']   . "]]></nome>";
				echo "</estado>";
			};
		echo "</estados>";
	}
 
}
 
// INICIA CLASSE
$estado = new Estado();
echo $estado->getEstado();
 
?>

Salve-o, e agora iremos criar a classe que alimentará as cidades.
A Classe de cidades é exibida de forma dinâmica, onde, ao selecionar o estado desejado passaremos o código dele como parametro para consultar somente as cidades que fazem referência a este estado.
Crie um novo arquivo PHP e salve-o como o nome Cidade.php, e escreva a classe para as cidades.

<?php
// INFORMAMOS QUE O DOCUMENTO SERA DO TIPO XML
header("Content-Type: text/xml; charset=UTF-8", true);
 
// CONEXAO
require_once('Conexao.php');
 
// CLASS CIDADE
class Cidade {
 
	// CONSTRUTOR
	function __construct() {
		return true;
	}
 
	/**
	 * FUNCTION getCidade
	 * @param Number codigo
	 * @return xml
	 */
	function getCidade($codigo) {
 
                // CONEXAO
		$conexao = new Conexao();
		$cnx     = $conexao->conectar();
 
		$nCodigo = $codigo;
		$sSQL    = "SELECT
		                cid_codigo, cid_nome
					FROM
					    cidade
					WHERE
						cid_est_codigo = $nCodigo
					ORDER BY
						cid_nome ASC";
		$qSQL    = mysql_query($sSQL, $cnx) or die(mysql_error());
 
		// GERANDO XML
		echo "<?xml version='1.0' encoding='UTF-8' ?>";
		echo "<cidades>";
			while ($aRow = mysql_fetch_array($qSQL)) {
				echo "<cidade>";
				echo "<codigo><![CDATA[" . $aRow['cid_codigo'] . "]]></codigo>";
				echo "<cidade><![CDATA[" . $aRow['cid_nome']   . "]]></cidade>";
				echo "</cidade>";
			}
		echo "</cidades>";
	}
}
 
/**
 * INICIAMOS A CLASSE E PASSAMOS O CODIGO DO
 * ESTADO COMO PARAMETRO PARA A CONSULTA
 */
$cidade = new Cidade();
echo $cidade->getCidade($_GET['codigo']);
?>

4ª Etapa
Nesta quarta e última etapa, criaremos e escreveremos nosso arquivo Flash.
Então, crie um novo arquivo Flash, e arraste dois Components ComboBox para o palco, de o nome de instância para eles de estado_cbx e cidade_cbx, também crie um campo de texto dinâmico com o nome de alerta_txt.
Abaixo temos a imagem de como ficará os objetos no palco.
populando-combobox
Agora, insira uma nova Layer para que possamos escrever nosso código ActionScript, onde, este por sua vez será o reponsável pelo carregamento e população dos ComboBox.

System.useCodepage = true;
 
/**
 * FUNCTION getEstado
 */
getEstado = function() {
	var xmlEstado:XML     = new XML();
	xmlEstado.ignoreWhite = true;
	xmlEstado.load("Estado.php");
	xmlEstado.onLoad = function(ok) {
		if (ok) {
 
			var aDados = Array();
			var nTotal = this.firstChild.childNodes.length;
 
			// PASSANDO DADOS DO XML PARA ARRAY
			for (var i = 0; i < nTotal; i++) {
				aNode     = this.firstChild.childNodes[i];
				aDados[i] = { data:aNode.childNodes[0].firstChild.nodeValue, label:aNode.childNodes[1].firstChild.nodeValue };
			}
 
			// POPULANDO COMBOBOX COM OS DADOS DO ARRAY
			estado_cbx.dataProvider = aDados;
		}
	};
 
	// LISTENER PARA ESTADO
	var objEstado:Object = new Object();
	objEstado.change = function() {
		sEstado         = estado_cbx.selectedItem.label;
		nCodigo         = estado_cbx.value;
		alerta_txt.text = sEstado;
		getCidade(nCodigo);
	};
	estado_cbx.addEventListener("change", objEstado);
}
getEstado();
 
/**
 * FUNCTION getCidade
 * @param Number nCodigo
 */
getCidade = function(nCodigo) {
 
	var xmlCidade:XML     = new XML();
	xmlCidade.ignoreWhite = true;
	xmlCidade.load("Cidade.php?codigo="+nCodigo);
	xmlCidade.onLoad = function(ok) {
		if (ok) {
 
			var aDados = Array();
			var nTotal = this.firstChild.childNodes.length;
 
			// PASSANDO DADOS DO XML PARA ARRAY
			for (var i = 0; i < nTotal; i++) {
				aNode     = this.firstChild.childNodes[i];
				aDados[i] = { data:aNode.childNodes[0].firstChild.nodeValue, label:aNode.childNodes[1].firstChild.nodeValue };
			}
 
			// POPULANDO COMBOBOX COM DADOS DO ARRAY
			cidade_cbx.dataProvider = aDados;
		}
	}
 
	// LISTENER PARA CIDADE
	var objCidade:Object = new Object();
	objCidade.change = function() {
		sEstado = estado_cbx.selectedItem.label;
		sCidade = cidade_cbx.selectedItem.label;		
		alerta_txt.text = sCidade + " - " + sEstado;
	};
	cidade_cbx.addEventListener("change", objCidade);
}

Agora, salve o arquivo Flash com qualquer nome, compile e teste-o.
Prontinho, nosso trabalho está feito, e com a certeza de que tiraremos bastante proveito dele.
O post ficou grande, porém tenho a certeza de que estou progredindo em meus estudos e em meu conhecimento também, e assim espero repassar o pouco do que estou aprendendo com os demais, pois, como nossa areá vive em constante apredizado e nem todos tem a oportunidade de estar aprendendo em uma sala de aula fica ai então a pequena contribuição. :)

Clique aqui e veja como ficou nossa pequena aplicação

Macanudo, finalizo este post ao som de Chromophobia, Gui Boratto. d(-_-)b

Player em Flash para vídeos diretos do youtube

Posted by Andrews on setembro 3rd, 2008

Um de meus projetos necessitou a criação de um player de vídeos e agora estou compartilhando a idéia, ai tu me diz: ok Andrews, um player é simples de se fazer, só arrastar um componente e configurar a url do vídeo FLV! porém, o desafio era fazer um player com vídeos vindos diretos do YouTube e de forma randômica, que por sua vez a url destes vídeos estariam cadastrados em um banco de dados.

Então mãos a obra e vamos fazer este player, :)

Construindo a tabela para abrigar as url’s. Usaremos o MySQL como base de dados para abrigar estas url’s.

/* CRIANDO A TABELA */
CREATE TABLE `videos` (
          `vid_codigo` int(10) NOT NULL auto_increment,
          `vid_url` varchar(300) default NULL,
          PRIMARY KEY  (`vid_codigo`)
        )
 
/* INSERINDO URL'S DO YOUTUBE */
insert  into
  `videos`(`vid_codigo`, `vid_url`)
values
  (1,'http://br.youtube.com/watch?v=DJZUrTXPIBE'),
  (2,'http://br.youtube.com/watch?v=NfxtAcjYbX0'),
  (3,'http://br.youtube.com/watch?v=TGBZfhLsljY');

Criada a tabela, partiremos agora para o php, onde criaremos uma consulta para buscar as url’s dos vídeos nesta tabela. Também criaremos a função que faz a conversão da url do vídeo do YouTube, para que tenhamos a url final/verdadeira do vídeo FLV. Esta conversão se faz necessária devido a url apresentada quando estamos vendo o vídeo no YouTube não ser a url final/verdadeira do vídeo FLV, então se colocarmos esta url o player que criaremos não conseguirá encontrar o vídeo, caracterizando assim uma url inválida.

Criando a função para conexão com o banco de dados. Após escrever a função, salve-a com o nome de conexao.php.

function conexao() {
    $cnx = mysql_connect('nome-do-servidor', 'nome-do-usuario', 'senha');
    mysql_select_db('nome-da-tabela', $cnx);
    return $cnx;
}

Criaremos então a função para selecionar a url na tabela, e fazer a conversão para a url final/verdadeira do vídeo FLV. Após escrever a função, salve-a com o nome de video_url.php.

/* INCLUINDO O ARQUIVO DE CONEXAO*/
require_once('conexao.php');
 
/* VARIAVEL DE CONEXAO COM O DB */
$cnx = conexao();
 
/* CONSULTA TABELA VIDEOS */
$SQL_video = "SELECT vid_url FROM videos ORDER BY rand() LIMIT 1";
$q_video   = mysql_query($SQL_video, $cnx) or die(mysql_error());
$row_video = mysql_fetch_array($q_video);
 
   /* PASSANDO URL SELECIONADA PARA VARIAVEL */
   $url = $row_video['vid_url'];
 
   // ATIVADA (UPDATE EM 29-01-2009)
   $data = implode("", file($url));
 
   /* FUNCTION CRIADA DEVIDO A MEU SERVER BLOQUEAR A FUNCTION file() ACIMA,
    * ENTAO curl FAZ O SERVICO DO file() E TRAZ A URL EXTERNA.
    *
    * EXPERIMENTE TESTAR EM SEU SERVER A LINHA ACIMA, SE FUNCIONAR
    * PODE REMOVER O BLOCO DE CODIGO ONDE UTILIZA AS curl
    */
 
   // DESATIVADA (UPDATE EM 29-01-2009)
   /*$ch = curl_init();
   curl_setopt ($ch, CURLOPT_URL, $url);
   curl_setopt ($ch, CURLOPT_HEADER, 1);
   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);
   $data = curl_exec($ch);
   curl_close($ch);*/
 
   if (preg_match_all("/&amp;t=[^&amp;]*/", $data, $matches)) {
      $t = $matches[0][0];
      $t = preg_split("/=/", $t);
      $t = $t[1];
 
      $v = $url;
 
      // DESATIVADA (UPDATE EM 29-01-2009)
      //$v = preg_split("/?v=/", $v);
 
      $v = explode("?v=", $v);
      $v = $v[1];
      echo "&amp;Path=http://www.youtube.com/get_video.php?video_id=".$v . "&amp;t=".$t . "&amp;.flv";
   } else {
      echo "null";
   }
 
mysql_free_result($q_video);

Ja temos a função do php que faz a ponte para trazer as url’s verdadeiras pronta. Agora partiremos para o flash, onde faremos o player para tocar o vídeo.
Crie um novo arquivo no flash, podendo deixá-lo com os tamanhos padrões 550 x 400 pixels.
Agora, renomei a Layer 1 para “player”, arraste um componente “FLVPlayback” para o palco e para o nome de instância digite “my_vid”.

Player para vídeos do YouTube

Agora vamos criar as action que serão responsáveis por fazer a ligação com o arquivo php.
Crie uma nova Layer com o nome de “Action”, clique no Frame 1 e precissione a tecla F9.

Agora iremos escrever o código actionscript a seguir para que nosso player funcione.

// INFORMANDO AO FLASH QUE A COMUNICACAO (ARQUIVO) ESTA EM OUTRO DOMINIO
System.security.allowDomain("*");
var myvar:LoadVars = new LoadVars();
// CARREGANDO O ARQUIVO PHP
myvar.load("video_url.php");
myvar.onLoad = function() {
	// PASSANDO A URL VERDADEIRA DO YOUTUBE PARA O PLAYER
	my_vid.contentPath = myvar.Path + "&t=" + myvar.t + "&.flv";
};

Pronto! agora salve e compile seu arquivo flash, e pode testá-lo em seu servidor.

Veja aqui o player em funcionamento. Clique no botão de refresh para ver os vídeos de forma randômica.

Abraço. Espero que tenham aproveitado.


Feito com Wordpress
Copyright © 2008 Andrews Roberson.