|
|||
|
Multi RSS News Feed Reader
This script will take several RSS feeds and combine them into one feed
for display.
This script will take several RSS feeds and combine them into one feed
for display. For example on my
Triumph Motorcycle News page,
I use Google for my news feeds searching for several key terms that relate
to Triumph motorcycles. The script below will take those feeds, throw out the
duplicate news articles and also sort them by date making it all appear to the
visitor as a single news feed.
The examples below show using RSS News Feeds from Google.
However, it will work with feeds from any valid RSS source.
It works by grabbing each RSS Feed then creating an array out of
each news item. As it cycles through the next news feed it then
compares each headline to see if it has already been added into the
array. After each news feed has been downloaded and filtered for
duplicates, it then sorts the new news feed array by publication date.
After the sorting takes place we then have the option of how we want to
display the new news feed.
You can use this script to display multiple RSS feeds to the web browser
or to generate a new RSS feed.
Here is the code for the Multi RSS News Feed Reader for on screen viewing:
<% x = 0 'Declare Article Count dim TitleArr() 'Declare array for news feed titles dim LinkArr() 'Declare array for news feed links dim DescArr() 'Declare array for news feed descriptions dim DateArr() 'Declare array for news feed dates Sub BuildRSS(TheFeed) Set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.Async = False objXML.SetProperty "ServerHTTPRequest", True objXML.ResolveExternals = True objXML.ValidateOnParse = True objXML.Load(TheFeed) 'Load News Feed If (objXML.parseError.errorCode = 0) Then Set objRoot = objXML.documentElement If IsObject(objRoot) = False Then Response.Write "There was an error retrieving the <i>" & _ TheFeed & _ "</i> news feed " Else Set objItems = objRoot.getElementsByTagName("item") If IsObject(objItems) = True Then For Each objItem in objItems On Error Resume Next TheTitle = objItem.selectSingleNode("title").Text TheLink = objItem.selectSingleNode("link").Text TheDesc = objItem.selectSingleNode("description").Text TheDate = objItem.selectSingleNode("pubDate").Text DoAddToArr = True 'Cycle through title array looking for duplicate articles 'If it does not exist, add to array If x > 0 Then For y = 0 to UBound(TitleArr) If TheTitle = TitleArr(y) Then DoAddToArr = False End If Next End If ReDim Preserve TitleArr(x) ReDim Preserve LinkArr(x) ReDim Preserve DescArr(x) ReDim Preserve DateArr(x) If DoAddToArr = True Then TitleArr(x) = TheTitle LinkArr(x) = TheLink DescArr(x) = TheDesc DateArr(x) = TheDate x = x + 1 End If Next End If Set objItems = Nothing End If Set objRoot = Nothing Else Response.Write "There was an error retrieving the <i>" & _ TheFeed & _ "</i> news feed " End If Set objXML = Nothing End Sub 'Get the news feed TheFeed = "http://news.google.com/news" & _ "?output=rss" & _ "&num=100" & _ "&q=triumph-motorcycles" BuildRSS(TheFeed) 'Get the next news feed TheFeed = "http://news.google.com/news" & _ "?output=rss" & _ "&num=100" & _ "&q=triumph-speedmaster" BuildRSS(TheFeed) ' Keep repeating the above until you have ' all the feeds you would like to combine ' Sort the news articles by date ' The newest one on top TempLinkVal = "" TempTitleVal = "" TempDescVal = "" TempDateVal = "" For r = 0 to UBound(DateArr) For s=r+1 to UBound(DateArr) If DateArr(r)<DateArr(s) then TempLinkVal = LinkArr(r) TempTitleVal = TitleArr(r) TempDescVal = DescArr(r) TempDateVal = DateArr(r) LinkArr(r)=LinkArr(s) TitleArr(r)=TitleArr(s) DescArr(r)=DescArr(s) DateArr(r)=DateArr(s) LinkArr(s) = TempLinkVal TitleArr(s) = TempTitleVal DescArr(s) = TempDescVal DateArr(s) = TempDateVal End If Next Next 'Display the results For x = 0 to UBound(TitleArr) Response.Write "<div id=" & chr(34) & "Newsitem" & x & chr(34) & ">" & chr(13) Response.Write "<a href=" & chr(34) & LinkArr(x) & chr(34) & " " & _ "style=" & chr(34) & "font-weight:bold;" & chr(34) & ">" & chr(13) & _ TitleArr(x) & chr(13) & _ "</a>" & chr(13) & _ Response.Write "<div style=" & chr(34) & "padding-left:20px;" & chr(34) & ">" & chr(13) & _ DescArr(x) & chr(13) & _ "<div style=" & chr(34) & "padding-left:20px;" & chr(34) & ">" & chr(13) & _ DateArr(x) & chr(13) & _ "</div>" & chr(13) & _ "</div>" & chr(13) Response.Write "</div>" & chr(13) & chr(13) Next %>
Here is the code for the Multi RSS News Feed Reader for creating a brand new RSS news feed:
<?xml version="1.0" encoding="ISO-8859-1"?> <% Response.Buffer = true Response.ContentType = "text/xml" %> <rss version="2.0"> <channel> <title>Triumph motorcycles in the headlines and news</title> <link>http://www.SorenWinslow.com/TriumphNews.asp</link> <description> Triumph Motorcycle News and Headlines </description> <image> <url>http://www.SorenWinslow.com/Img/Triumph/TriumphCentury.jpg</url> <title>Triumph motorcycles in the headlines and news</title> <link>http://www.SorenWinslow.com/TriumphNews.asp</link> </image> <language>en-us</language> <% x = 0 'Declare Article Count dim TitleArr() 'Declare array for news feed titles dim LinkArr() 'Declare array for news feed links dim DescArr() 'Declare array for news feed descriptions dim DateArr() 'Declare array for news feed dates Sub BuildRSS(TheFeed) Set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.Async = False objXML.SetProperty "ServerHTTPRequest", True objXML.ResolveExternals = True objXML.ValidateOnParse = True objXML.Load(TheFeed) 'Load News Feed If (objXML.parseError.errorCode = 0) Then Set objRoot = objXML.documentElement If IsObject(objRoot) = False Then Response.Write "There was an error retrieving the <i>" & _ TheFeed & _ "</i> news feed " Else Set objItems = objRoot.getElementsByTagName("item") If IsObject(objItems) = True Then For Each objItem in objItems On Error Resume Next TheTitle = objItem.selectSingleNode("title").Text TheLink = objItem.selectSingleNode("link").Text TheDesc = objItem.selectSingleNode("description").Text TheDate = objItem.selectSingleNode("pubDate").Text DoAddToArr = True 'Cycle through title array looking for duplicate articles 'If it does not exist, add to array If x > 0 Then For y = 0 to UBound(TitleArr) If TheTitle = TitleArr(y) Then DoAddToArr = False End If Next End If ReDim Preserve TitleArr(x) ReDim Preserve LinkArr(x) ReDim Preserve DescArr(x) ReDim Preserve DateArr(x) If DoAddToArr = True Then TitleArr(x) = TheTitle LinkArr(x) = TheLink DescArr(x) = TheDesc DateArr(x) = TheDate x = x + 1 End If Next End If Set objItems = Nothing End If Set objRoot = Nothing Else Response.Write "There was an error retrieving the <i>" & _ TheFeed & _ "</i> news feed " End If Set objXML = Nothing End Sub 'Get the news feed TheFeed = "http://news.google.com/news" & _ "?output=rss" & _ "&num=100" & _ "&q=triumph-motorcycles" BuildRSS(TheFeed) 'Get the next news feed TheFeed = "http://news.google.com/news" & _ "?output=rss" & _ "&num=100" & _ "&q=triumph-speedmaster" BuildRSS(TheFeed) ' Keep repeating the above until you have ' all the feeds you would like to combine ' Sort the news articles by date ' The newest one on top TempLinkVal = "" TempTitleVal = "" TempDescVal = "" TempDateVal = "" For r = 0 to UBound(DateArr) For s=r+1 to UBound(DateArr) If DateArr(r)<DateArr(s) then TempLinkVal = LinkArr(r) TempTitleVal = TitleArr(r) TempDescVal = DescArr(r) TempDateVal = DateArr(r) LinkArr(r)=LinkArr(s) TitleArr(r)=TitleArr(s) DescArr(r)=DescArr(s) DateArr(r)=DateArr(s) LinkArr(s) = TempLinkVal TitleArr(s) = TempTitleVal DescArr(s) = TempDescVal DateArr(s) = TempDateVal End If Next Next For x = 0 to UBound(TitleArr) Response.Write "<item>" & chr(13) Response.Write "<title>" & TitleArr(x) & "</title>" & chr(13) Response.Write "<link>#34; & LinkArr(x) & "</link>" & chr(13) Response.Write "<description>" & DescArr(x) & "</description>" & chr(13) Response.Write "<pubDate>" & DateArr(x) & "</pubDate>" & chr(13) Response.Write "</item>" & chr(13) Next %> </channel> </rss> |