diff options
Diffstat (limited to 'bPod/com/feeds/ProcessRSS.as')
| -rw-r--r-- | bPod/com/feeds/ProcessRSS.as | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/bPod/com/feeds/ProcessRSS.as b/bPod/com/feeds/ProcessRSS.as new file mode 100644 index 0000000..1c09d8d --- /dev/null +++ b/bPod/com/feeds/ProcessRSS.as @@ -0,0 +1 @@ +import mx.utils.Delegate;
import mx.controls.TextArea;
import com.events.EventBroadcaster;
class com.feeds.ProcessRSS {
//declare public properties:
//the TextArea component which will display the information
public var target_txt:Array;
//the address of the PHP proxy script
public var proxyURL:String;
//declare private properties:
private var _xml:XML;
private var items:Array;
private var senderObj:LoadVars;
private var loaderID:Number;
//constructor
function ProcessRSS (target:Array, proxy:String) {
target_txt = target;
proxyURL = proxy;
_xml = new XML();
_xml.ignoreWhite = true;
_xml.onLoad = Delegate.create(this, onLoadEvent);
}
private function onLoadEvent(success:Boolean):Void {
if (success) {
//terminate any running intervals
clearInterval(loaderID);
// target_txt.text = "<p>Click a headline to open that entry in a new window.</p><br>";
//populate "items" array
items = getNodes(_xml, "item");
displayContent(items);
} else {
// target_txt.text = "<p>XML failed to load.</p>";
}
}
public function loadFeed(feedURL:String):Void {
//initialization:
//terminate any running intervals
clearInterval(loaderID);
//start with an empty array - replace any previous content
items = new Array();
//clear any previous text
// target_txt.text = "";
//reset scroll position of TextArea component
// target_txt.vPosition = 0;
//create LoadVars Object
senderObj = new LoadVars();
//assign a value to a property of the LoadVars Object
senderObj.rss = feedURL;
/*
The LoadVars.sendAndLoad method conveniently accepts an XML Object as
its target. We can send a string (url) to the PHP proxy script and
get an XML document back.
*/
senderObj.sendAndLoad(proxyURL, _xml, "GET");
/*
Use setInterval to monitor load progress every 25 milliseconds. Pass
the XML document whose download progress you wish to monitor as the 4th
argument. Ue of "this" in "this.loaderID" is critical for telling
the loadingFeedback() method in what scope to find the XML object.
Thanks to Colin Moock for the code this is based loosely on.
*/
this.loaderID = setInterval(this, "loadingFeedback", 25, _xml);
}
/*
getNodes(): a recursive method for "walking" the XML tree searching for a
match to a node name. This is based on an ActionScript 1 XML prototype by
Peter Hall. The method returns an array of all XML nodes that match "name".
It is used to populate the "items" array with all nodes in the rss document
named "item". Note that a node of nodeType 3 is a text node (a string). We
don't want to waste time with that now, so the script skips them.
*/
private function getNodes(node:XMLNode, name:String):Array {
var nodes:Array = new Array();
var c:XMLNode = node.firstChild;
while (c) {
if (c.nodeType != 3) {
if (c.nodeName == name) {
nodes.push(c);
}
nodes = nodes.concat(getNodes(c, name));
}
c = c.nextSibling;
}
return nodes;
}
/*
displayContent() is the method responsible for extracting the data I am
interested in (the text content of title, link and description) and
formatting it for the TextArea component.
*/
private function displayContent(source:Array):Void {
var entries:Number = source.length;
var currentNode:XMLNode;
var tempTitle:String;
var tempLink:String;
var tempDescription:String;
for (var i:Number = 0; i<entries; i++){
currentNode = source[i];
tempTitle = extractContent(currentNode, "title");
tempLink = extractContent(currentNode, "link");
tempDescription = extractContent(currentNode, "description");
var oneEntry:String = "<headline><a href='"+
tempLink+"' target='_blank'>"+tempTitle+
"</a></headline><p>"+
tempDescription+"</p><br>";
var tmpObj:Object = new Object();
tmpObj.name = tempTitle;
tmpObj.link = tempLink;
tmpObj.desc = tempDescription;
target_txt.push (tmpObj);
// target_txt.text += oneEntry;
}
EventBroadcaster.getInstance().broadcastEvent("feedListMade", null);
}
/*
extractContent() is a modified version of getNodes(). Like getNodes(),
it searches the source node recursively for a match to "name", but what it
returns when it does find a match is the text content of that node.
*/
private function extractContent (source:XMLNode, name:String):String {
var nodeTxt:String = "";
var c:XMLNode = source.firstChild;
while (c) {
if (c.nodeType != 3) {
if (c.nodeName == name) {
nodeTxt = c.firstChild.nodeValue;
}
nodeTxt += extractContent(c, name);
}
c = c.nextSibling;
}
return nodeTxt;
}
//the progress monitor called by setInterval
private function loadingFeedback(xmlObj:XML):Void {
var amtLoaded:Number = xmlObj.getBytesLoaded();
if (amtLoaded <= 4){
// target_txt.text = "<p>Requesting Data...</p>";
} else {
// target_txt.text = "<p>Loaded: "+ Math.floor(amtLoaded/1024) + " kilobytes</p>";
}
}
}
\ No newline at end of file |
