Sätt upp ett RSS-flöde

RSS står för Really Simple Syndication och är en XML-dialekt som följer XML 1.0-specifikationen. RSS är av de nya beståndsdelarna i den "nya webben" och har blivit väldigt populärt på senare tid. Användare kan med egna RSS-läsare, prenumenera på innehåll från en webbplats. Fördelen är enorm genom att man kan från en samlad plats se exakt vilka av ens favoritsajter som har skrivit något nytt. RSS skapar även möjligheten för olika nyhetssajter att publicera innehåll från en annan webbsida.

Jag använde artikeln "Skapa en RSS-feed för din webbplats" som inspiration. Jag skrev om den för att passa till ASP.NET C# samt att jag i mitt kodexempel skriver en fysisk xml fil direkt på hårddisken. I exemplet på Dileno.com läggs xml-filen i cache. Min funktion som skapar ett RSS-flöde av posterna i min blogg och ser ut ungefär så här.

//Funktion som skapar RSS flöde
protected void GenerateRss()
{
try
{

//Fysisk sökväg på servern (Byt ut mot den på din server)
string strXMLPath = "C:/ . . . /rss.xml";

FileStream objFileStream = new FileStream(strXMLPath,FileMode.Create);
XmlTextWriter xtw = new XmlTextWriter(objFileStream,System.Text.Encoding.GetEncoding("iso-8859-1"));
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument();

//skriv ut <rss version="2.0">
xtw.WriteStartElement("rss");
xtw.WriteAttributeString("version","2.0");

//skriv ut <channel>
xtw.WriteStartElement("channel");

//skriv ut element som tillhör <channel>
xtw.WriteElementString("title","Codeodyssey.se");
xtw.WriteElementString("link","http://www.codeodyssey.se/");
xtw.WriteElementString("description","Code Odyssey - expanderar webben");
xtw.WriteElementString("language","sv-SE");
xtw.WriteElementString("copyright","Copyright (c) 2004-2006 Code Odyssey");

OleDbConnection conn = new OleDbConnection (strConn);
bool boolPermission = false;
OleDbDataReader objDataReader=null;
try
{
string strSQL = "SELECT Blog.Id, Blog.Title, Blog.Body, Blog.PublishDate FROM Blog ORDER BY Blog.PublishDate DESC";

conn.Open();

OleDbCommand objCommand = new OleDbCommand(strSQL, conn);
objDataReader = objCommand.ExecuteReader();
while (objDataReader.Read() == true)
{
int Id = Convert.ToInt32(objDataReader["Id"]);
string Title = Convert.ToString(objDataReader["Title"]);
string Body= Convert.ToString(objDataReader["Body"]);
//Se till att datum följer RFC-822 standard
string PublishDate = Convert.ToString( ((DateTime)objDataReader["PublishDate"]).ToString("r"));


//skriv ut <item> och dess innehåll
xtw.WriteStartElement("item");
xtw.WriteElementString("title",Title);
xtw.WriteElementString("link","http://www." + strUrl.ToLower() + "/Blog.aspx_id=" + Id);
xtw.WriteElementString("guid","http://www." + strUrl.ToLower() + "/Blog.aspx_id=" + Id);
xtw.WriteElementString("description",Body);
xtw.WriteElementString("pubDate",PublishDate);
xtw.WriteEndElement();
}
objCommand.Dispose();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
finally
{
if(objDataReader!=null)
{
objDataReader.Close();  
}
conn.Close();
}

//skriv ut </channel>
xtw.WriteEndElement();

//skriv ut </rss>
xtw.WriteEndElement();

//Stäng xml skrivaren
xtw.Close();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
}

Visa RSS för läsaren
Sen är det dags att lägga till en länk så att Firefox (och antagligen IE7) ska kunna se att din webbplats innehåller ett RSS-flöde och visa detta med den lilla RSS ikonen.

Denna tagg ser ut så här:

<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="xml/rss.xml" />

Vill man lägga till en länk till RSS från koden kan man göra så här:

//Lägg till RSS länk
HtmlLink link = new HtmlLink();
link.Attributes.Add("type", "application/rss+xml");
link.Attributes.Add("rel", "alternate");
link.Attributes.Add("href", "feed/rss.xml");
this.Page.Header.Controls.Add(link);

Bilder i RSS?
Först tänkte jag visa de bilder i mitt RSS-flöde men efter ha läst "RSS - bra eller dåligt?" så ångrade jag mig. Speciellt om man ska prenumenera på RSS genom en mobiltelefon så vill man ju inte ladda med en massa bilder i onödan.

Validera bloggen
Till sist är det dags att prova så att allt fungerar som det ska. Mozilla Thunderbirds inbyggda RSS läsare fungerar utmärkt till detta. Eller aktiva bokmärken i Firefox. Man bör även validera CSS-flödet, en valideringstjänst finns på Feedvalidator.org.

Comments

Vad använder du för bibliotek för FileStream? Jag vet inte om jag har förstått artikeln rätt, men jag får "The type or namespace name 'FileStream' could not be found (are you missing a using directive or an assembly reference?)". Har bara ändrat om från OLEDB till SQL i stort sett.
Hej Per. FileStream finns i namespacet System.IO, lägg till det så ska det nog gå bättre.
Hej Per. FileStream finns i namespacet <i>System.IO</i>, lägg till det så ska det nog gå bättre.
Nu gick det bättre. Tack för ett bra exempel. Fick ändra strXMLPath och köra server.MapPath för att servern skulle hitta filen.
Fint att du fick det att fungera till sist. Jag såg att koden innehåll lite onödiga rader där Connections-strängen stängdes ( man behöver inte sätta conn=null och inte heller kolla om conn!=null när man stänger ) Tog bort detta från exemplet. Något som tillägget "Resharper" i Visual studio har hjälpt mig med att komma till insikt med.
Jag kör using(), så slipper jag stänga databasanslutningen över huvud taget. http://pastebin.com/m36b0d419 så ser koden ut när jag gjort om till MS SQL. Jag använder metoden i ett skolprojekt, ifall jag råkat ta bort någon copyrightkod som måste stå kvar. Resharper får jag kika på, för det har jag inte kollat på tidigare.
Ok det ser ju bra ut med databasanslutningen, tack för att du visade kodexemplet. Du behöver inte bry dig om att ha kvar något copyright meddelande. Ser att på rad 57 står "Code Odyssey" kvar i din kod, den kan du byta ut mot ditt eget meddelande om du vill.
Bästa pris på måleriservice
Svar till Helsingborgsmålarna.se: Konstigt ställe att berätta att ni har bästa pris på måleriservice. Det har liksom inte så mycket med resten av artikeln att göra. Var snälla och sluta spamma!

Nice, precis vad jag letade efter: En guide om hur man sätter upp ett RSS-flöde med ASP.NET! Äntligen hittade jag en, tack! :)