Робимо RSS стрічку новин

Ех, багато розвелось по сайтах цих оранжевих кнопочок :) Зараз це модно, тому треба зробити таку і на своєму сайті, крім того це зовсім не важко. В цій статті я розкажу як зробити RSS стрічку новин на Asp.Net.
Як можна довідатись з вікіпедії, RSS канал - це просто певної структури XML-файл, в якому містяться останні новини сайту. Отже, задача полягає в тому, щоб згенерувати цей XML-файл, і поставити на сайті на нього лінк.
Спочатку глянемо що собою являє цей XML-файл:
<?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>Lukom.Org</title> <link>http://lukom.org/rss20feed.aspx</link> <description>Останні новини з блогу на Lukom.Org</description> <copyright>© 2004, Lukom. All rights reserved.</copyright> <ttl>5</ttl> <item> <title>Петиції</title> <description>Новина 1...</description> <link>http://lukom.org/blog/petitions</link> <pubDate>Mon, 22 Oct 2007 13:27:28 GMT</pubDate> </item> <item> <title>Хроніки DnD. частина перша</title> <description>Новина 2...<a href="http://lukom.org/blog/dnd-begin">(Читати далі...)</a></description> <link>http://lukom.org/blog/dnd-begin</link> <pubDate>Sun, 21 Oct 2007 10:34:31 GMT</pubDate> </item> </channel> </rss>
Вражає, правда? Структура дуже проста. Починається все з обов'язкової xml-декларації, потім вкладений елемент rss, в якому обов'язковими елементами є title і description. Також дуже потрібними є елементи link i pubDate, які містять відповідно лінк на оригінальну новину і час публікації у форматі GMT. Елемент ttl (time to live) вказує на скільки часу клієнт має закешувати файл.
Всі елементи які дозволяє RSS стандарт можна подивитись тут - RSS 2.0 Specification
Тепер зробимо генерування цього файлу. Своримо нову aspx-сторінку з таким контентом:
<%@ Page Language="C#" CodeFile="rss20feed.aspx.cs" Inherits="rss20feed" EnableViewState="false" %> <%@ OutputCache Duration="300" VaryByParam="none" %>
Другий рядок вказує Asp.Net`у, що цей файл треба закешувати на 5 хвилин. Можна поставити, звісно, більше число, але не хотілося б щоб був великий проміжок часу між з'являнням новини на сайті і з'являнням у стрічці новин.
На сторінку з кодом впишемо таке:
using System; using System.Data.SqlClient; using System.Text; using System.Web.UI; using System.Xml; public partial class rss20feed : Page { protected override void OnLoad(EventArgs e) { base.OnLoad(e); Response.Clear(); Response.ContentType = "text/xml"; XmlTextWriter rss = new XmlTextWriter(Response.OutputStream, Encoding.UTF8); rss.WriteStartDocument(); rss.WriteStartElement("rss"); rss.WriteAttributeString("version", "2.0"); rss.WriteStartElement("channel"); rss.WriteElementString("title", "Lukom.Org"); rss.WriteElementString("link", "http://lukom.org/rss20feed.aspx"); rss.WriteElementString("description", "Останні новини з блогу на Lukom.Org"); rss.WriteElementString("copyright", "© 2004, Lukom. All rights reserved."); rss.WriteElementString("ttl", "5"); SqlConnection conn = new SqlConnection(Global.ConnectionString); conn.Open(); try { string sql = "SELECT TOP 10 Title, Summary, ArticleUrlName, PostTime FROM Articles ORDER BY PostTime DESC"; SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { rss.WriteStartElement("item"); rss.WriteElementString("title", reader.GetString(0)); rss.WriteElementString("description", reader.GetString(1)); rss.WriteElementString("link", "http://lukom.org/blog/" + reader.GetInt32(2)); rss.WriteElementString("pubDate", reader.GetDateTime(3).ToString("R")); rss.WriteEndElement(); } } finally { conn.Close(); } rss.WriteEndElement(); rss.WriteEndElement(); rss.WriteEndDocument(); rss.Flush(); rss.Close(); Response.End(); } }
Тут створюється об'єкт XmlTextWriter, який займається генеруванням XML. Останні новини дістаємо з бази даних. Звісно, в мене на сайті трохи складніший код, але загалом суть та сама. Гарною ідеєю є покласти цей код в HttpHandler, а не в OnLoad.
І так, та-дам, готово! Тепер коли код написано, залишилось кинути на строрінку лінки, щоб про RSS взнав відвідувач і браузер.
Для того щоб знав відвідувач, десь на видному місці розміщуємо таку кнопочку з лінком на наш RSS канал новин. Користувач замітить цей значок і скопіює лінк у свій агрегатор новин.
Для того, щоб про RSS знав браузер, треба в head`і документа розмістити таке:
<link rel="alternate" type="application/rss+xml" title="Останні новини з блогу на Lukom.Org" href="rss20feed.aspx" />
В цьому випадку більшість браузерів в правій стороні адресної стрічки намалює RSS-іконку, на якій можна буде клацнути і щось там зробити.
Тепер, коли на сайті є RSS стрічка новин, відвідувачам відкриваються нові корисні можливості:
- не треба завантажувати всю сторінку з новинами
- можна легко слідкувати за оновленнями
Ще на багатьох сайтах є стрічка новин у форматі ATOM, яка виникла внаслідок незадоволення форматом RSS, тому він є кращим, але важчим.