package { //import com.example.programmingas3.utils.DateUtil; import flash.geom.Point; public dynamic class actionscript_book_PodcastPlayer_com_example_programmingas3_podcastplayer_RSSChannel extends actionscript_book_PodcastPlayer_com_example_programmingas3_podcastplayer_RSSBase { // * title // * description or itunes:summary // * itunes:subtitle // * copyright // * language // * link // * pubDate // * itunes:category (recursive) // * itunes:keywords // * image->url,title,link or itunes:image // * itunes:explicit // The following RSS 2.0 elements are defined in the RSSBase superclass // Required RSS 2.0 elements // public var title:String; // public var link:String; // public var description:String; // public var pubDate:String; // public var category:String; // derived values // public var categoryArray:Array; // public var publishDate:Date; // ITunes RSS 2.0 elements public var subtitle:String; public var summary:String; // Optional RSS 2.0 elements public var author:String; public var content:Object; // contains fileSize, rating, type, uid, url public var contentType:String; public var copyright:String; public var language:String; public var webMaster:String; public var managingEditor:String; public var guid:String; public var _keywords:String; public var origLink:String; public var _lastBuildDate:String; public var lastPublishDate:Date; public var uid:String; public var keywordsArray:Array; public var items:Array; public function get keywords():String { return this._keywords; } public function set keywords(keywordStr:String):void { this._keywords = keywordStr; var delim:String = " "; if (keywordStr.indexOf(", ") > 0) { delim = ", "; } else if (keywordStr.indexOf(", ") > 0) { delim = ","; } this.keywordArray = keywordStr.split(delim); } public function get lastBuildDate():String { return this._lastBuildDate; } public function set lastBuildDate(dateStr:String):void { if (dateStr != null) { this._lastBuildDate = dateStr; this.lastPublishDate = actionscript_book_PodcastPlayer_com_example_programmingas3_utils_DateUtil.parseRFC822(dateStr); } } public static function parseFeed(channelXml:XML):actionscript_book_PodcastPlayer_com_example_programmingas3_podcastplayer_RSSChannel { var feed:actionscript_book_PodcastPlayer_com_example_programmingas3_podcastplayer_RSSChannel = new actionscript_book_PodcastPlayer_com_example_programmingas3_podcastplayer_RSSChannel(); var kids:XMLList = channelXml.children(); var elementName:String; var propName:String; for each (var element:XML in kids) { elementName = element.localName(); if (elementName != "item") { // handle itunes names var iTunesIndex:int = element.name().toString().indexOf("itunes"); if (iTunesIndex >= 0) { propName = "itunes_" + elementName; } else { propName = elementName; } if (element.hasSimpleContent() && element.attributes().length() == 0) { feed[propName] = element.toString(); } else { feed[propName] = element; } } } var itemArray:Array = new Array(); var itemObj:Object; var itemList:XMLList = channelXml.item; for each (var itemXml:XML in itemList) { itemObj = actionscript_book_PodcastPlayer_com_example_programmingas3_podcastplayer_RSSItem.parseItem(itemXml); itemArray.push(itemObj); } feed.items = itemArray; return feed; } public function getFullHTML():String { var html:String = ""; if (this.imageUrl != null) { html += ""; } if (this.subtitle != null) { html += "

" + this.subtitle + "

"; } if (this.description != null) { html += "

" + this.description + "

"; } else if (this.summary != null) { html += "

" + this.summary + "

"; } if (this.link != null) { // html += "

" + "<" + "a href='" + this.link + "' target='_blank'>[link]

"; html += "

" + "<" + "a href='" + this.link + "'>[link]

"; } return html; } public function getDescriptionHTML():String { var html:String = ""; if (this.subtitle != null) { html += "

" + this.subtitle + "

"; } if (this.description != null) { html += "

" + this.description + "

"; } else if (this.summary != null) { html += "

" + this.summary + "

"; } if (this.link != null) { html += "

" + "<" + "a href='" + this.link + "' target='_blank'>[link]

"; } return html; } public function getImageSize():Point { var p:Point = new Point(88, 31); if (this.image != null) { var h:int = int(this.image.height); var w:int = int(this.image.width); if (this.image.height > 31 || this.image.width > 88) { p = new Point(w, h); } } return p; } } }