// parser for rss2 function RSS2Enclosure(encElement) { if (encElement == null) { this.url = null; this.length = null; this.type = null; } else { this.url = encElement.getAttribute("url"); this.length = encElement.getAttribute("length"); this.type = encElement.getAttribute("type"); } } function RSS2Guid(guidElement) { if (guidElement == null) { this.isPermaLink = null; this.value = null; } else { this.isPermaLink = guidElement.getAttribute("isPermaLink"); this.value = guidElement.childNodes[0].nodeValue; } } function RSS2Source(souElement) { if (souElement == null) { this.url = null; this.value = null; } else { this.url = souElement.getAttribute("url"); this.value = souElement.childNodes[0].nodeValue; } } function RSS2Item(itemxml) { //required this.title; this.link; this.description; //optional vars this.author; this.comments; this.pubDate; //optional objects this.category; this.enclosure; this.guid; this.source; var properties = new Array("title", "link", "description", "author", "comments", "pubDate"); //var properties = new Array("title", "link"); var tmpElement = null; for (var i=0; i<properties.length; i++) { tmpElement = itemxml.getElementsByTagName(properties[i])[0]; if ((tmpElement != null) && (tmpElement.firstChild)) eval("this."+properties[i]+"=tmpElement.firstChild.nodeValue"); } this.category = new RSS2Category(itemxml.getElementsByTagName("category")[0]); this.enclosure = new RSS2Enclosure(itemxml.getElementsByTagName("enclosure")[0]); this.guid = new RSS2Guid(itemxml.getElementsByTagName("guid")[0]); this.source = new RSS2Source(itemxml.getElementsByTagName("source")[0]); } function RSS2Category(catElement) { if (catElement == null) { this.domain = null; this.value = null; } else { this.domain = catElement.getAttribute("domain"); this.value = catElement.childNodes[0].nodeValue; } } function RSS2Image(imgElement) { if (imgElement == null) { this.url = null; this.link = null; this.width = null; this.height = null; this.description = null; } else { imgAttribs = new Array("url","title","link","width","height","description"); for (var i=0; i<imgAttribs.length; i++) if (imgElement.getAttribute(imgAttribs[i]) != null) eval("this."+imgAttribs[i]+"=imgElement.getAttribute("+imgAttribs[i]+")"); } } function RSS2Channel(rssxml) { //required this.title; this.link; this.description; //array of RSS2Item objects this.items = new Array(); //optional vars this.language; this.copyright; this.managingEditor; this.webMaster; this.pubDate; this.lastBuildDate; this.generator; this.docs; this.ttl; this.rating; //optional objects this.category; this.image; var chanElement = rssxml.getElementsByTagName("channel")[0]; var itemElements = rssxml.getElementsByTagName("item"); for (var i=0; i<itemElements.length; i++) { Item = new RSS2Item(itemElements[i]); this.items.push(Item); //chanElement.removeChild(itemElements[i]); } var properties = new Array("title", "link", "description", "language", "copyright", "managingEditor", "webMaster", "pubDate", "lastBuildDate", "generator", "docs", "ttl", "rating"); var tmpElement = null; for (var i=0; i<properties.length; i++) { tmpElement = chanElement.getElementsByTagName(properties[i])[0]; if ((tmpElement!= null) && (tmpElement.firstChild)) eval("this."+properties[i]+"=tmpElement.firstChild.nodeValue"); } this.category = new RSS2Category(chanElement.getElementsByTagName("category")[0]); this.image = new RSS2Image(chanElement.getElementsByTagName("image")[0]); } // loader and display method for rss // this needs ajax.js and a method showRSS(RSS) to display a rss file var xhr; function getRSS(url){ xhr = createRequestObject(); xhr.open("GET",url,true); xhr.setRequestHeader("Cache-Control", "no-cache"); xhr.setRequestHeader("Pragma", "no-cache"); xhr.onreadystatechange = processRSS; xhr.send(null); } function processRSS() { if (xhr.readyState == 4) { if (xhr.status == 200) { if ((xhr.responseText != null) && (xhr.responseXML != null)) { RSS = new RSS2Channel(xhr.responseXML); showRSS(RSS); } else { alert("rss file not found."); return false; } } else //alert("Error code " + xhr.status + " received: " + xhr.statusText); return false; } }