<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lucas Marçal &#187; Redes Sociais</title>
	<atom:link href="http://www.lucasmarcal.com.br/blog/index.php/category/tutoriais/redes-sociais/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lucasmarcal.com.br/blog</link>
	<description>Flash Developer</description>
	<lastBuildDate>Wed, 31 Aug 2011 20:53:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Consumindo dados do Twitter com Actionscript 3.0</title>
		<link>http://www.lucasmarcal.com.br/blog/index.php/2010/01/consumindo-dados-do-twitter-com-actionscript-3-0/</link>
		<comments>http://www.lucasmarcal.com.br/blog/index.php/2010/01/consumindo-dados-do-twitter-com-actionscript-3-0/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 00:41:55 +0000</pubDate>
		<dc:creator>Lucas Marçal</dc:creator>
				<category><![CDATA[Redes Sociais]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Eventos Customizados]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLList]]></category>

		<guid isPermaLink="false">http://www.lucasmarcal.com.br/blog/?p=90</guid>
		<description><![CDATA[Nesse tutorial vou mostrar como acessar dados do Twitter via XML pela URL de busca do Twitter, é um tutorial básico que visa trabalhar com uma simples integração.]]></description>
			<content:encoded><![CDATA[<blockquote><p>
[ATUALIZAÇÂO]<br />
Esse post foi atualizado, agora você pode passar todos os parâmetros que a URL http://search.twitter.com oferece.
</p></blockquote>
<p>Nesse tutorial vou mostrar como acessar dados do Twitter via XML pela URL de busca do Twitter, é um tutorial básico que visa trabalhar com uma simples integração.</p>
<p>Basicamente o que fazemos é acessar um XML gerado pela busca do Twitter e fazer o “parser” desses dados, esse tutorial não vai abordar o tema de inclusão desses resultados no Stage do Flash, apenas a obtenção desses resultados através de manipulação de XML.</p>
<p>Exemplo  depois de uma pequena customização na classe Consome.as para incluir os &#8220;tweets&#8221; no layout.<br />
<a href="http://www.lucasmarcal.com.br/labs/GetTweets.swf" target="_blank">Exemplo</a></p>
<p>Basicamente vamos trabalhar com 3 classes, são elas:</p>
<p><em><strong>GetTweet.as</strong></em></p>
<ul>
<li>Essa é a classe que vai fazer a conexão com o XML e vai tratar os dados</li>
</ul>
<pre class="brush: as3; first-line: 8; gutter: false; pad-line-numbers: false; title: ; wrap-lines: false;">
package lmcosta.redesocial.twitter
{
	import flash.display.MovieClip;

	import flash.events.Event
	import flash.events.IOErrorEvent;
	import flash.events.SecurityErrorEvent;

	import flash.net.URLLoader;
	import flash.net.URLRequest;

	import lmcosta.redesocial.twitter.event.TwitterEvents

	/**
	 * ...
	 * @author LucasMarçal
	 */
	public class GetTweet extends MovieClip
	{
		public var qtdTweets:Number
		public var arrTweets:Array;
		public var url:String;
		private var _total:Number

		public function GetTweet() {}

		/**
		 *
		 * @param	_usuario:String  				Nome de usuário que você quer buscar
		 * @param	_qtd:Number       				Quantidade de Tweets que você quer que retorne
		 * @param	_palavra:String					Uma palavra específica
		 * @param	_frase:String					Uma frase específica
		 * @param	_qualquerPalavra:String			Qualquer uma dessas palavras
		 * @param	_nenhumaPalavra:String			Nenhuma dessas palavras
		 * @param	_tag:String						Uma Hastag específica
		 * @param	_idioma:String					Idioma, verificar a lista de idioma e seus valores
		 * @param	_twitterAmigo:String			Enviado para essa pessoa
		 * @param	_refAmigo:String				Referênciando essa pessoa
		 * @param	_cidade:String					Cidade específica
		 * @param	_dataInicial:String				Data inicial formato (0000-00-00) sendo Ano-Mês-Dia
		 * @param	_dataFinal:Stirng				Data Final formato (0000-00-00) sendo Ano-Mês-Dia
		 */
		public function configuraPesquisa(parametros:Object):void
		{
			this.url = &quot;http://search.twitter.com/search.atom?q=+from:&quot; + parametros.usuario + &quot;&amp;rpp=&quot; +parametros.qtd + &quot;&amp;ands=&quot; + parametros.palavra + &quot;&amp;phrase=&quot; + parametros.frase + &quot;&amp;ors=&quot; + parametros.qualquerPalavra + &quot;&amp;nots=&quot; + parametros.nenhumaPalavra + &quot;&amp;tag=&quot; + parametros.tag + &quot;&amp;lang=&quot; + parametros.idioma + &quot;&amp;to=&quot; + parametros.twitterAmigo + &quot;&amp;ref=&quot; + parametros.refAmigo + &quot;&amp;near=&quot; + parametros.cidade + &quot;&amp;since=&quot; + parametros.dataInicial + &quot;&amp;until=&quot; + parametros.dataFinal ;

			var urlReq:URLRequest =  new URLRequest(this.url);
			var loader:URLLoader =  new URLLoader();

			loader.addEventListener(Event.COMPLETE , carregouXML);
			loader.addEventListener(IOErrorEvent.IO_ERROR, erroLoadXML);
			loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, erroSeguranca);

			this.addEventListener(TwitterEvents.PARSER_COMPLETO, onComplete);

			loader.load(urlReq);
		}

		private function carregouXML(e:Event):void
		{
			if (e.target.data)
			{
				this.arrTweets =  new Array();

				var twitterXML:XML =  new XML(e.target.data);
				var twitterList:XMLList =  twitterXML.children();

				var tweet:String;
				var data:String;
				var nomeUsuario:String

				for (var i:int = 0; i &lt; twitterList.length(); i++)
				{
					if (tweet != &quot;&quot;)
					{
						this.arrTweets.push({usuario:twitterList[i]..*::name, tweet:twitterList[i].*::title,data:twitterList[i].*::published});
					}
				}
				this._total = this.arrTweets.length
				dispatchEvent(new TwitterEvents(TwitterEvents.PARSER_COMPLETO));
			}
		}

		private function erroLoadXML(e:Event):void
		{
			trace(&quot;IO Error!&quot;);
		}

		private function erroSeguranca(e:Event):void
		{
			trace(&quot;Security Error!&quot;);
		}
		private function onComplete(e:TwitterEvents):void
		{
			dispatchEvent(new TwitterEvents (TwitterEvents.DADOS_RECEBIDOS));
		}

		public function get dados():Array
		{
			return this.arrTweets;
		}

		public function get total():Number
		{
			return _total;
		}
	}

}
</pre>
<p><em><strong>TwitterEvents.as</strong></em></p>
<ul>
<li>Uma classe de eventos personalizada que informa quando os dados já estão completos (URLRequest) e quando o “parser” já foi finalizado.</li>
</ul>
<pre class="brush: as3; first-line: 8; gutter: false; pad-line-numbers: false; title: ; wrap-lines: false;">
package lmcosta.redesocial.twitter.event
{
	import flash.events.Event;

	/**
	 * ...
	 * @author LucasMarçal
	 */
	public class TwitterEvents extends Event
	{
		public static const PARSER_COMPLETO:String = &quot;PARSERCOMPLETO&quot;;
		public static const DADOS_RECEBIDOS:String = &quot;RECEBEU&quot;;

		public function TwitterEvents(tipo:String,bubbles:Boolean=false,cancel:Boolean=false)
		{
			super(tipo, bubbles, cancel);
		}

	}

}
</pre>
<p><em><strong>Primeiro Frame do ser arquivo</strong></em></p>
<ul>
<li>Responsável por criar uma instancia da classe GetTweet, você pode criar uma classe e colocar esse código, optei por fazer assim por ser mais fácil para quem está iniciando</li>
</ul>
<pre class="brush: as3; first-line: 8; gutter: false; pad-line-numbers: false; title: ; wrap-lines: false;">
//SUPER IMPORTANTE
//Lembre-se que você tem que ter configurado
//para que o seu classPath seja &quot;src&quot;
//para isso vá em CTRL + F12 &gt; Aba Flash&gt; Settings &gt; Botão de + e adicione &quot;./src/&quot;

//Importando as classes necessárias
import lmcosta.redesocial.twitter.GetTweet
import lmcosta.redesocial.twitter.event.TwitterEvents

//Criando uma instância da classe GetTweet
var rede:GetTweet =  new GetTweet();

/**
 * PARAMETROS INICIAIS
 * @param	_usuario:String  				Nome de usuário que você quer buscar
 * @param	_qtd:Number       				Quantidade de Tweets que você quer que retorne
 * @param	_palavra:String					Uma palavra específica
 * @param	_frase:String					Uma frase específica
 * @param	_qualquerPalavra:String			Qualquer uma dessas palavras
 * @param	_nenhumaPalavra:String			Nenhuma dessas palavras
 * @param	_tag:String						Uma Hastag específica
 * @param	_idioma:String					Idioma, verificar a lista de idioma e seus valores
 * @param	_twitterAmigo:String			Enviado para essa pessoa
 * @param	_refAmigo:String				Referênciando essa pessoa
 * @param	_cidade:String					Cidade específica
 * @param	_dataInicial:String				Data inicial formato (0000-00-00) sendo Ano-Mês-Dia
 * @param	_dataFinal:Stirng				Data Final formato (0000-00-00) sendo Ano-Mês-Dia
*/

var parametros:Object = {usuario:&quot;lmcosta&quot;,
						 qtd:1,
						 palavra:&quot;&quot;,
						 frase:&quot;&quot;,
						 qualquerPalavra:&quot;&quot;,
						 nenhumaPalavra:&quot;&quot;,
						 tag:&quot;&quot;,
						 idioma:&quot;&quot;,
						 twitterAmigo:&quot;&quot;,
						 refAmigo:&quot;&quot;,
						 cidade:&quot;&quot;,
						 dataInicial:&quot;&quot;,
						 dataFinal:&quot;&quot;
						 }

//Passando parametros iniciais, veja lista abaixo
rede.configuraPesquisa(parametros);

//Registrando um Listeners baseado na classe customizada de Eventos
//Toda vez que a busca retornar um resultado e os dados forem recebidos
//Esse Listener vai executar o código que estiver na função de callback
//Nesse caso a função onRecebe;
this.rede.addEventListener(TwitterEvents.DADOS_RECEBIDOS,onRecebe);

function onRecebe (e:TwitterEvents):void
{
	//Use essa forma para retornar o total re resultado
	trace(&quot;Total de Resultados: &quot; + this.rede.total);
	for(var i:Number = 0; i &lt; this.rede.dados.length; i++)
	{
		//Retornando Usuario
		trace(&quot;Usuario: &quot; + this.rede.dados[i].usuario)
		//Retornando Datas
		trace(&quot;data: &quot; + this.rede.dados[i].data)
		//Retornando Tweet
		trace(&quot;Tweets: &quot; + this.rede.dados[i].tweet)
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.lucasmarcal.com.br/blog/index.php/2010/01/consumindo-dados-do-twitter-com-actionscript-3-0/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

