Робимо 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, тому він є кращим, але важчим.