vbnet RSS Feed

Option Explicit On
 
Imports System.Data
Imports System.Data.SqlClient
 
Partial Class rss_Default
    Inherits System.Web.UI.Page
 
    Public RssSite As String = "Example.com"
    Public RssUrl As String = "http://www.example.com/"
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim RssFeed As String = "" 'whole feed
        Dim XmlHeader As String = "<?xml version=""1.0""?>" & vbCrLf 'header element
        Dim Rss As XElement = <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"></rss> 'rss element
  
        Dim Channel As XElement = <channel>
                                      <title><%= RssSite %> RSS Feed</title>
                                      <link><%= RssUrl %></link>
                                      <description><%= RssSite %> RSS 2.0 Feed</description>
                                      <language>en</language>
                                      <pubDate><%= RssDate() %></pubDate>
                                      <generator>SlickCMS</generator>
                                      <ttl>60</ttl>
                                      <atom></atom>
                                  </channel>
 
        'add the <items> to <channel>, then <channel> to the <rss>
        Rss.Add(GetItems(Channel))
 
        'build up the resulting xml, first with the <xml> header
        RssFeed = XmlHeader
 
        'then add the Atom element with the <rss>
        RssFeed += AddAtom(Rss.ToString())
 
        'render the RssFeed to User
        Response.Write(RssFeed)
    End Sub
 
    Public Function GetItems(ByVal Channel As XElement) As XElement
        'loops through RSS recordset, returning them as <item>s
        Using connection As New SqlConnection("ConnectionString appears here")
            connection.Open()
            Dim dr As SqlDataReader
            Dim cmd As SqlCommand = New SqlCommand
 
            With cmd
                .CommandText = "RSS"
                .CommandType = CommandType.StoredProcedure
                .Connection = connection
                dr = .ExecuteReader
            End With
 
            While dr.Read
                Dim RssItem As XElement = <item>
                                              <title><%= dr("Title") %></title>
                                              <link><%= dr("Link") %></link>
                                              <guid><%= dr("GUID") %></guid>
                                              <description><%= AddCDATA(dr("Description")) %></description>
                                              <comments><%= dr("Link") %>#comments</comments>
                                              <pubDate><%= dr("PublishDate") %></pubDate>
                                          </item>
 
                Channel.Add(RssItem)
            End While
 
            dr.Close()
            connection.Close()
            connection.Dispose()
        End Using
 
        'once looped, return the original <channel>, now with <item>s
        Return Channel
    End Function
 
    Public Function RssDate() As String
		'short syntax version
        Return (System.DateTime.Now.ToString("ddd, dd MMM yyyy HH:mm:ss ") & "GMT")
    End Function
 
    Public Function RssDateLong() As String
		'long syntax version
        'returns today's date formatted to RSS specification
        'reference: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx and http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
        Dim dDate As Date = CDate(System.DateTime.Now)
        Dim dDay, dDays, dMonth, dYear As String
        Dim dHours, dMinutes, dSeconds As String
 
        dDay = dDate.ToString("ddd")
 
        dDays = Day(dDate).ToString()
        dMonth = MonthName(Month(dDate), True).ToString()
        dYear = Year(dDate).ToString()
        dHours = ZeroPad(Hour(dDate).ToString(), 2)
        dMinutes = ZeroPad(Minute(dDate).ToString(), 2)
        dSeconds = ZeroPad(Second(dDate).ToString(), 2)
 
        '"Thursday, 07 Oct 2010 21:30:01 GMT"
        Return dDay & ", " & dDays & " " & dMonth & " " & dYear & " " & dHours & ":" & dMinutes & ":" & dSeconds & " GMT"
    End Function
 
    Public Function ZeroPad(ByVal m As String, ByVal t As Int32) As String
        If Len(m) < t Then
            For i = Len(m) To (t - 1)
                m = "0" & m 'add suffix of 0
            Next
        End If
 
        Return m
    End Function
 
    Public Function AddAtom(ByVal Xml As String) As String
        'add the <atom> element
        Return Xml.Replace("<atom></atom>", "<atom:link href=""" & RssUrl & "/rss/?c=" & CatID.ToString() & """ rel=""self"" type=""application/rss+xml""/>")
    End Function
 
    Public Function AddCDATA(ByVal RawXml As String) As String
        'adds prefix/suffix CDATA for encoding
        Return "<![CDATA[" & RawXml & "]]>"
    End Function
End Class
Creates an RSS 2.0 Feed from a recordset.

Updated: Thursday 7th October 2010, 07:41pm

There are 0 comments

Leave a comment of your own

Comments are currently closed.