jan 8, 2010

Posted by admin in Redes Sociais, Tutoriais | 4 comments

Consumindo dados do Twitter com Actionscript 3.0

Consumindo dados do Twitter com Actionscript 3.0

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.

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.

Exemplo depois de uma pequena customização na classe Consome.as para incluir os “tweets” no layout.
Exemplo

Basicamente vamos trabalhar com 3 classes, são elas:

GetTweets.as

  • Essa é a classe que vai fazer a conexão com o XML e vai tratar os dados
/**
 * @author: Lucas Marçal
 * @version: 1.0
 * @email: inbox@lucasmarcal.com.br
 * @link: www.lucasmarcal.com.br/blog
 */
package lmcosta.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;

	public class GetTweets extends MovieClip
	{
		internal var usuario			:String;
		internal var url				:String;
		internal var tag				:String;
		internal var qtdTweets		    :int;
		internal var arrTweets		    :Array;
		internal var dataTweets		    :Array;

		public function GetTweets() { }

		/**
		 *
		 * @param	_user:String;
		 * @param	_tag:String;
		 * @param	_qtd:Number;
		 */
		public function configTwitter(_user:String,_tag:String,_qtd:Number):void
		{
			this.usuario = _user;
			this.tag = _tag;
			this.qtdTweets = _qtd;
			this.carregaXML();
		}
		/**
		 * Responsavel pela chamada do XML
		 */
		public function carregaXML():void
		{
			this.url = "http://search.twitter.com/search.atom?q=+from:" + this.usuario + "&rpp=" + this.qtdTweets + "&tag=" + this.tag
			var urlReq:URLRequest =  new URLRequest(this.url);
			var loader:URLLoader = new URLLoader();

			loader.addEventListener(Event.COMPLETE, parserDados);
			loader.addEventListener(IOErrorEvent.IO_ERROR, IOError);
			loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, SError);

			this.addEventListener(TwitterEvents.PARSER_COMPLETO, onComplete);

			loader.load(urlReq);
		}
		/**
		 * Responsavel por tratar os dados vindos
		 * do XML
		 * @param	e:Event
		 */
		public function parserDados(e:Event):void
		{
			if (e.target.data)
			{
				this.arrTweets = new Array();
				this.dataTweets = new Array();

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

				var tweetItem:String;
				var timeItem:String;

				for (var i:int = 0; i < tweetList.length(); i++)
				{
					//Assim traz o HTML
					//tweetItem = tweetList[i].*::content;
					tweetItem = tweetList[i].*::title;
					timeItem = tweetList[i].*::published;

					if (timeItem != "")
					{
						timeItem = timeItem.split("T").join(" - ");
						timeItem = timeItem.split("Z").join("");
						dataTweets.push(timeItem);
						arrTweets.push(tweetItem + dataTweets);
					}
				}
				dispatchEvent(new TwitterEvents(TwitterEvents.PARSER_COMPLETO));
			}
		}

		private function IOError(e:Event):void
		{
			trace("IO Error!");
		}
		private function SError(e:Event):void
		{
			trace("Security Error!");
		}
		/**
		 * Dispara um evento ao completar o recebimento
		 * @param	e:TwitterEvents
		 */
		private function onComplete(e:TwitterEvents):void
		{
			dispatchEvent(new TwitterEvents(TwitterEvents.DADOS_RECEBIDOS));
		}
		/**
		 * Retorna os dados
		 */
		public function get dados():Array
		{
			return this.arrTweets;
		}
	}

}

TwitterEvents.as

  • Uma classe de eventos personalizada que informa quando os dados já estão completos (URLRequest) e quando o “parser” já foi finalizado.
/**
 * @author: Lucas Marçal
 * @version: 1.0
 * @email: inbox@lucasmarcal.com.br
 * @link: www.lucasmarcal.com.br/blog
 */
package lmcosta.twitter
{
	import flash.events.Event;

	public class TwitterEvents extends Event
	{
		public static const PARSER_COMPLETO:String = "PARSERCOMPLETO";
		public static const DADOS_RECEBIDOS:String = "RECEBEU";
		/**
		 *
		 * @param	tipo:String
		 * @param	bubbles:Boolean
		 * @param	cancel:Boolean
		 */
		public function TwitterEvents(tipo:String,bubbles:Boolean=false,cancel:Boolean=false)
		{
			super(tipo, bubbles, cancel);
		}
	}

}

Consome.as

  • Responsável por criar uma instancia da classe GetTweets
/**
 * @author: Lucas Marçal
 * @version: 1.0
 * @email: inbox@lucasmarcal.com.br
 * @link: www.lucasmarcal.com.br/blog
 */
package lmcosta.twitter
{
	import flash.display.MovieClip;
	import lmcosta.twitter.GetTweets
	import lmcosta.twitter.TwitterEvents

	public class Consome extends MovieClip
	{
		public var resultTwitter:GetTweets

		public function Consome()
		{
			this.resultTwitter =  new GetTweets();
			this.resultTwitter.configTwitter("lmcosta", "", 1);
			this.resultTwitter.addEventListener(TwitterEvents.DADOS_RECEBIDOS, initLista);
		}
		/**
		 * Responsavel por criar a lista dos Tweets
		 * Aqui você pode distribuir os itens como
		 * achar melhor.
		 * @param	e
		 */
		private function initLista(e:TwitterEvents):void
		{
			trace("Pronto para iniciar lista: ");
			trace(this.resultTwitter.dados);
		}
	}

}
  1. Esse código simplesmente não funciona. Precisa testar antes de postar alguma coisa que ache realmente útil. Só perda de tempo.

  2. Sr. Paulo
    O fato de você não conseguir copiar e colar um código do meu blog não quer dizer que ele não funcione, seu comentário foi desnecessário e mostra a sua real falta de capacidade!
    Abs!

  3. Excelente cara!

    Fiz uns testes aqui, implementei com uma outra classe que criei e consegui exibir os dados do twitter no palco.

    Valeu pelo post!

    Abraço!

  4. Maicon Rosairo da Cruz disse:

    Ta de Parabéns, funcionou Perfeitamente

Leave a Reply