ActionScriptでRSS/Atomをパースする(as3syndicationlib)

以前、「名前空間のあるXMLを扱う - public static void main」でAS3を使ってAtomをパースするものを書きましたが、RSS1.0や2.0も自動で判定してパースしてくれるのが望ましいです。
何かライブラリがないか探したところ、as3syndicationlibというAdobeオープンソースのライブラリがありました。

Google Code Archive - Long-term storage for Google Code Project Hosting.

ダウンロードしたzipを解凍してできたフォルダのbinの中にあるxmlsyndication.swcがライブラリ本体です。
このライブラリは、as3corelibに依存しているので、これもダウンロードしてください。

Google Code Archive - Long-term storage for Google Code Project Hosting.


以下がこのライブラリを使ったソースコードです。

package{
	import com.adobe.xml.syndication.generic.*;
   
	import flash.events.Event;
	import flash.net.*;
	import flash.display.Sprite;
	import flash.text.*;
   
	public class FeedParser extends Sprite {
		private var label:TextField;
		private var loader:URLLoader;
		private var url:String = "http://twitter.com/statuses/user_timeline/4016461.atom";
		public function FeedParser(){
			label=createTextField("");
			addChild(label);
			loader = new URLLoader();
			loader.addEventListener( Event.COMPLETE, completeHandler );
			loader.load( new URLRequest(url) );
		}
	   
		private function completeHandler(e:Event):void{
			//XMLデータからFeedの種類を判別して生成Factory
			var feed:IFeed = FeedFactory.getFeedByString(e.target.data);
			var items:Array = feed.items;
			//すべてのitemのタイトルを挿入
			for each(var item:IItem in items){
				label.appendText(item.title + "\n");
			}
		}
		
		private function createTextField(text:String):TextField{
			var label:TextField = new TextField();
			label.text = text;
			label.autoSize = TextFieldAutoSize.LEFT;
			label.selectable = false;
			return label;
		}
	}
}

コンパイルは、上記の2つのライブラリをソースファイルと同じ場所において、以下のように実行します。

mxmlc -library-path+=xmlsyndication.swc,corelib.swc FeedParser.as

生成されたFeedParser.swfを実行すると、うまくRSSのタイトル一覧が取得されているはずです。
ちなみに、自分のドメインと同じところにないXMLFlashはアクセスできません。例外は、XMLを置いているサーバ側がcrossdomain.xmlを設置して、アクセスを許可している場合のみです。