%
Option Explicit
Dim sql,rsnews,count,xmlrssfeed,rscache,tcheck,xmlstatus
Response.Buffer=True
xmlrssfeed = Request.QueryString("rssurl")
if xmlrssfeed="" then xmlrssfeed="http://rss.news.yahoo.com/rss/world"
%>
<%
Function getXML(sourceFile) 
	dim styleFile 
	dim xmlsource, xmlstyle, xmldoc
	styleFile = Server.MapPath("news.xsl")
'Check if Feed exists in cache:
sql = "SELECT mynews_sites.url, mynews_sites.cacheInterval, mynews_sites.lastChecked, mynews_sites.xml FROM mynews_sites WHERE (((mynews_sites.url)='" & sourceFile& "'))"
Set rscache = Server.CreateObject("ADODB.Recordset")
rscache.Open sql, conn, 3, 3
if rscache.EOF then
	xmlstatus="none"
else
	'How long since cache was updated?
	tcheck=int((now()-rscache("lastchecked"))*24*60)
	if tcheck >= rscache("cacheInterval") then
		xmlstatus="update"
	end if
end if
'Cache is out of date or cache does not exist. Get current from web.
if xmlstatus="none" or xmlstatus="update" then
	Dim xmlhttp
	Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
	xmlhttp.Open "GET", sourceFile, false
	xmlhttp.Send
	
	if xmlhttp.status <>200 then
		%>HTTP Error: <%=xmlhttp.status%>
<%
	end if
	
	set xmlsource= xmlhttp.responseXML
	if xmlsource.xml = "" then
		xmlsource.loadxml(xmlhttp.ResponseText)
	end if
	
	xmlsource.setProperty "ServerHTTPRequest", True
	xmlsource.resolveExternals = false
	xmlsource.validateOnParse = false
	xmlsource.async = false
	
	
	if xmlsource.parseError.errorCode <> 0 and xmlhttp.status = 200 then%>
		XML Parse Error: 
		File Position: <%=xmlsource.parseError.filepos%>
		Line: <%=xmlsource.parseError.line%>
		Line Position: <%=xmlsource.parseError.linepos%>
		Reason: <%=xmlsource.parseError.reason%>
		Text: Line: <%=xmlsource.parseError.srctext%>
		ErrorCode: <%=xmlsource.parseError.errorCode%>
		URL: <%=xmlsource.parseError.URL%>
<%	else
	if xmlstatus="update" then
		'Now update database with current feed.
		rscache("xml")=xmlsource.xml
		rscache("lastchecked")=now()
		rscache.update
	end if
	end if
else
	'Get XML from Cache in Database.
	set xmlsource = Server.CreateObject("Microsoft.XMLDOM")
	xmlsource.loadxml(rscache("xml"))
end if
	set xmlstyle = Server.CreateObject("Microsoft.XMLDOM")
	xmlstyle.load(styleFile)
	getXML = xmlsource.transformNode(xmlstyle) 
	set xmlsource = nothing 
	set xmlstyle = nothing 
End Function 
%>
| <% rsnews.Movenext if rsnews.EOF then exit for end if next %> | <%=getXML(xmlrssfeed)%> | 
© Jaidev Vasudevan 2004 <% rsnews.close set rsnews = nothing conn.close set conn = nothing %>