vin.ingine.nl
a blog by Vincent van Ingen
7 Aug 2009
 

Yesterday I wrote a simple RSS reader in Actionscript 3.0. Nothing fancy really. But I thought I shared it with you. The code is pretty self explanational. TIP: Try to use embedded fonts, this will make a nicer transition between the feeds. NOTE: Not every html entitie is supported by Flash, like é (= é) for example. You must do string.replace( /é/, 'é' ) for every non supporting entity. But that's up to you ;)

An entity list: http://www.w3schools.com/tags/ref_entities.asp

BTW! Only RSS version 2.0 is supported.

Here's the snippet:

 
// which rss url to load?
var RSSURL:String = "http://feeds.feedburner.com/tweakers/mixed";
 
// the length per feed in seconds
var DURATION:int = 5;
 
// how fast is the alpha wipe? value must be between 0 and 1!
var FADE:Number = 0.07;	
 
// width and height of the feed
var WIDTH:int = 640;
var HEIGHT:int = 480;
 
// the layout of the feed, you can use %title% and %desc%
var LAYOUT:String
= '<font face="Verdana" color="#000000" size="20"><b>%title%</b></font><br />'
+ '<font face="Verdana" color="#444444" size="14"><b>%desc%</b></font>';
 
// use embedded fonts?
var EMBED_FONTS:Boolean = false;
 
 
 
//////////////////////////////////////////////////////////////////////
// DON'T CHANGE WHAT'S UNDERNEATH! (unless you know what you doing) //
//////////////////////////////////////////////////////////////////////
 
 
 
var loader:URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, evtComplete );
loader.addEventListener( SecurityErrorEvent.SECURITY_ERROR, evtSecurity );
loader.addEventListener( IOErrorEvent.IO_ERROR, evtIOError );
loader.load( new URLRequest( RSSURL + '?r=' + Math.random() ) );
 
var rss:XML;
var arr:Array;
var txtA:TextField;
var txtB:TextField;
var txtTemp:TextField;
var pos:int = 0;
var dWait:Date;
var dNow:Date;
 
 
 
function evtComplete( e:Event ):void
{
	try
	{
		rss = new XML( loader.data );
	}
	catch( e:Error )
	{
		trace( 'XML Parse Error: ' + e );
		return;
	}
 
	if( rss.@version != '2.0' )
	{
		trace( 'Error: RSS feed not version 2.0, your version: ' + rss.@version );
		return;
	}
 
	arr = new Array();
 
	for each ( var item:XML in rss.channel.item )
	{
   		arr.push( {
			'title': item.title,
			'desc': item.description
		} );
	}   
 
	txtA = new TextField();
	txtB = new TextField();
 
	txtA.width =
	txtB.width = WIDTH;
	txtA.height =
	txtB.height = HEIGHT;
	txtA.alpha =
	txtB.alpha = EMBED_FONTS ? 0.0 : 1.0;
	txtA.antiAliasType =
	txtB.antiAliasType = AntiAliasType.ADVANCED;
	txtA.embedFonts =
	txtB.embedFonts = EMBED_FONTS;
	txtA.wordWrap = 
	txtB.wordWrap = true;
	txtA.multiline =
	txtB.multiline = true;
	txtA.htmlText = getText();
	txtB.htmlText = '';
 
	dWait = new Date();
	dWait.setSeconds( dWait.seconds + DURATION );
 
	addEventListener( Event.ENTER_FRAME, evtEnterFrame );
	addChild( txtA );
	addChild( txtB );
}
 
function evtEnterFrame( e:Event ):void
{
	dNow = new Date();
 
	if( dNow > dWait )
	{
		txtB.htmlText = getText();
		txtTemp = txtA;
		txtA = txtB;
		txtB = txtTemp;
		dWait.setSeconds( dNow.seconds + DURATION );
	}
 
	if( EMBED_FONTS )
	{
		txtA.alpha += ( 1.0 - txtA.alpha ) * FADE;
		txtB.alpha += ( 0.0 - txtB.alpha ) * FADE;
	}
	else
	{
		txtA.visible = true;
		txtB.visible = false;
	}
}
 
function evtIOError( e:IOErrorEvent ):void
{
	trace( 'IOErrorEvent: ' + e );
}
 
function evtSecurity( e:SecurityErrorEvent ):void
{
	trace( 'SecurityErrorEvent: ' + e );
}
 
function getText():String
{
	if( !arr || arr.length == 0 ) {
		return ':(';
	}
 
	var txt:String = LAYOUT
	.replace( /%title%/, arr[pos].title )
	.replace( /%desc%/, arr[pos].desc )
	.replace( /&eacute;/, '&#233;' );	// as an example, you do the rest :P
 
	if( ++pos == arr.length ) {
		pos = 0;
	}
 
	return txt;
}
 
Tags: Actionscript, Development.
 
 
 
 
 
Comments 
 
No comments yet.