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のタイトル一覧が取得されているはずです。
ちなみに、自分のドメインと同じところにないXMLにFlashはアクセスできません。例外は、XMLを置いているサーバ側がcrossdomain.xmlを設置して、アクセスを許可している場合のみです。