مقدمه
امروزه با توجه به استفاده روز افزون از اینترنت و همچنین افزایش تعداد پایگاههای اطلاع رسانی که ارائه دهنده اخبار، اطلاعات تخصصی و... میباشند، نیاز به اشتراک گذاشتن اطلاعات بیش از پیش احساس میگردد. اما به اشتراک گذاشتن اطلاعات، بدون داشتن بستر فنی واحد و در عین حال استانداردی یکسان قابل انجام نخواهد بود. یکی از معمول ترین راههای استفاده مشترک از اطلاعات , قالب RSS میباشد که خود امروزه به عنوان یک استاندارد معرفی میگردد. برای پیاده سازی RSS، از زبان XML استفاده میشود که هم بوسیله بسیاری از زبانهای برنامه سازی پشتیبانی میگردد و هم سکوهای مختلف (Platform) برداشت یکسانی از آن دارند.
Really Simple Syndication ) RSS ) چیست؟
قالبی برای دریافت آخرین اخبار از پایگاههای اطلاع رسانی. اما میتوان تعریف دقیق تری به صورت زیر ارائه داد: قالبی برای دریافت هر مطلبی که بتوان آن را به نوعی در قالب یک جدول جای داد. این قالب توسط مدیر پایگاه اطلاع رسانی تعریف شده و در یک فایل ذخیره میگردد و شما به عنوان کاربر میتوانید از طریق برنامه هایی که برای خواندن این قالب طراحی شده اند، به فایل پایگاه اطلاع رسانی مورد نظر خود مراجعه کرده و آخرین اطلاعات و تغییرات آن را دریافت نمایید.
تاریخچه RSS
از شرکت Netscape به عنوان مبتکر RSS یاد میشود. بعد ها شرکت Userland توسعه و کنترل نسخه های RSS را بر عهده گرفت. اما همزمان با این شرکت، یک گروه غیر تجاری نیز که مبنای کار خود را تعاریف اصلی ارائه شده از سوی Netscape قرار داده بود، نسخه جدیدی برای RSS ارائه داد که این نسخه با استقبال Userland روبه رو نگردید. Userland به توسعه نسخه اصلی خود ادامه داد تا RSS 2.0 را ارائه کرد.
RSS 0.90
اولین بار Netscape برای پخش اخبار، مطالب و اطلاعات جدید خود، RSS را پایه گذاری کرد. این نسخه که RSS 0.90 نامیده میشد، در پایگاه my.netscape.com مورد استفاده قرار گرفت. نکته مهم در مورد این نسخه، پشتیبانی آن از scriptingNews ( قدیمی ترین قالبی که بنگاههای خبری برای به اشتراک گذاشتن اخبار از آن استفاده میکردند ) میباشد.(3/15/1999)
RSS 0.91
Netscape نسخه جدید RSS را بر مبنای scriptingNews 2.0b1 ارائه داد. در این نسخه گامهای اصلی استاندارد سازی این قالب برداشته شد و بسیاری از تگ ( tag ) های قالب <scriptingNews> مورد استفاده قرار گرفت ( 7/10/1999 ). پس از این Netscape کار برروی RSS را رها کرد و Userland با اعمال تغییراتی بر روی RSS 0.91، این نسخه را ارائه کرد (6/4/2000).
RSS 1.0
این نسخه که ارتباط چندانی با نسخه های قبلی RSS نداشت، توسط یک گروه خصوصی و با هدایت Real Dornfest ارائه شد. این نسخه که به نسبت نسخه های قبلی از پیچیدگی های بیشتری برخوردار بود، توسط Userland به عنوان نسخه جدید RSS پذیرفته نشد.( 8/14/2000).
RSS 0.92
در حقیقت این نسخه همان RSS 0.91 میباشد که تعدادی عناصر اختیاری به آن افزوده شده است. طراح آن Dave Winer طراح اصلی ScriptingNewsاز Userland میباشد(12/25/2000).
RSS 2.0
Dave Winer پس از ترک Userland این نسخه را طراحی کرد (9/18/2002). سپس مشخصات RSS 2.0 توسط دانشگاه هاروارد و تحت مجوز پدید آورندگان آن منتشر گردید. (7/15/2003).
از چه نسخه ای از RSS استفاده کنیم؟
پایگاه اطلاع رسانی Syndic8.com اعلام کرده است که بیش از 50 درصد از feed های موجود از RSS 0.91 استفاده میکنند، تنها 25 درصد، RSS 1.0 را مورد استفاده قرار میدهند و 25 در صد باقی مانده از قالب RSS 9.x و یا RSS 2.0 استفاده میکنند.
با این حال، گفتن این مطلب که کدامیک از این نسخه ها به نسبت دیگری در وضعیت بهتری قرار میگیرد، کار چندان ساده ای نمیباشد و با توجه به اینکه امروزه نرم افزار های موجود، تمامی قالب ها را پشتیبانی میکنند، از این لحاظ مشکلی برای کاربران ایجاد نخواهد کرد. اما به واسطه اینکه RSS 2.0 آخرین نسخه ارائه شده میباشد و RSS 1.0 تنها نسخه ای است که از استانداردهای دیگر نسخه ها پیروی نمیکند، ما از RSS2.0 استفاده و آن را توصیه مینماییم.
نحوه استفاده از RSS برای افراد عادی و مدیران پایگاههای اطلاع رسانی
افراد عادی
همانطور که در تعریف RSS ذکر شده است، برای مطالعه اطلاعات و اخبار از طریق RSS، احتیاج به نرم افزارهای خاصی میباشد که اصطلاحا گرد آور خبر ( News aggregators ) نامیده میشوند. این نرم افزار این امکان را به کاربران میدهد که کانال های مورد علاقه خود را ( پایگاههای اطلاع رسانی که مطالب خود را به صورت RSS نیز ارائه میدهند ) اضافه کرده و در یک بازه زمانی دلخواه، آخرین تغییرات را مشاهده نمایند.
به همین منظور نرم افزارهای مختلفی ارائه شده اند که در بخش نرم افزار میتوانید نام آن ها را مشاهده نمایید.
مدیران پایگاههای اطلاع رسانی
مدیران پایگاههای اطلاع رسانی به دو صورت میتوانند از RSS استفاده نمایند:
- برای نقل اطلاعات و اخبار از پایگاههای دیگر: با استفاده از بخش " نقل اطلاعات RSS دیگران در پایگاه اطلاع رسانی "، مدیر سیستم میتواند از اطلاعات و اخبار سایتهای دیگر در پایگاه خود استفاده نماید.
- برای ارائه اطلاعات و اخبار پایگاه خود در قالب RSS: با استفاده از بخش " ارائه RSS در پایگاه اطلاع رسانی "، مدیر سیستم میتواند اطلاعات و اخبار پایگاه خود را در این قالب در دسترس سایرین قرار دهد.
نرم افزار
نرم افزار های مختلفی برای جمع آوری و خواندن اطلاعات پایگاههای ارائه دهنده RSS وجود دارد که ما 3 نمونه از آنها را در اینجا معرفی میکنیم:
نگاهی به استانداردهای پایه ای XML
با توجه به اینکه RSS از فایلهای XML استفاده میکند، پیش از شروع، چند قانون ساده در مورد فایلهای XML را به خاطر بسپارید:
- محتویات فایلهای XML به بزرگی و کوچکی حروف حساس میباشند. بنابراین <item> با <Item> یکسان نمیباشد.
- عناصر در هر فایل xml، باید به درستی در داخل یکدیگر قرار داده شوند. در نظر داشته باشید که چگونه قرار گرفتن عناصر در فایل xml، تاثیر مستقیمی بر استاندارد بودن Feed بر حسب نسخه آن دارد.
- کاراکترهایی نظیر < , >, &, " و ' در صورتی که در داخل متن و مقادیر صفات باشند، باید با < ، > ، & ، &qout; و ' جایگزین گردند.
- تمامی مقادیر مشخصه ها، در داخل “” قرار داده میشوند. به عنوان مثال <"rss version="2.0> یک نمونه صحیح میباشد.
نگاهی به قواعد موجود برای ایجاد یک Feed مبتنی بر RSS 2.0
فایل RSS با عنصر <rss> آغاز شده و با <rss/> پایان مییابد.
<rss version="2.0">
....
</rss>
تنها عنصر فرزند <rss>، <channel> نامیده میشود که دارای 3 عنصر اجباری میباشد. در نظر داشته باشید که <<channel، در حقیقت همان عنصر اصلی است که اطلاعات پایگاه ما را در بر میگیرد. در نرم افزار های گردآورنده خبر(News aggregator) نیز، از هر پایگاه جدید به عنوان یک channel جدید یاد میشود. عناصر <channel> عبارتند از:title،link، description که در جدول زیر موارد استفاده آنها بیان شده است.
عنوان feed که اغلب شامل نام پایگاه اطلاع رسانی میباشد
|
title |
آدرس پایگاه اطلاع رسانی
|
link |
توضیحات مربوط به پایگاه اطلاع رسانی
|
decription |
در مشخصات ارائه شده برای RSS 2. 0 عناصر اختیاری دیگری نیز وجود دارد نظیر:
توضیح
|
عنصر
|
زبانی که کانال به آن زبان نوشته شده است.دانستن زبان این امکان را به نرم افزارهای گردآورنده خبر میدهد تا کانال هایی که زبان یکسانی دارند را در یک صفحه نمایش دهد و یا کارکترهای مخصوص آن زبان را لحاظ کند.
|
language
|
نمایش دهنده پدید آورنده کانال
|
copyright
|
آدرس پست الکترونیکی فردی که مسوولیت اخبار و مقالات را بر عهده دارد.
|
managingEditor
|
آدرس پست الکترونیکی فردی که مسوولیت مسائل فنی کانال را بر عهده دارد.
|
webMaster
|
زمانی که کانال به روز میگردد این تاریخ با استفاده از RFC 822 نوشته میشود.
|
pubDate
|
تاریخ آخرین بار مرتبه ای که اطلاعات کانال به روز شده است. این تاریخ تاریخ با استفاده از RFC 822 نوشته میشود.
|
lastBuildDate
|
طبقه بندی محتوایی کانال. اینکه کانال حاوی چه مطالبی میباشد.
|
category
|
بیان کننده نرم افزاری که کانال را تولید کرده است.
|
generator
|
آدرسی که به مستندات نسخه ای از RSS اشاره میکند که در کانال مورد استفاده قرار گرفته است.
|
docs |
ttl یا Time To Live بیان کننده مدت زمانی است که گردآورنده خبر پس از آن زمان مجددا فایل مربوط به کانال را برای به روز رسانی فایل خود چک کرده و اطلاعات فعلی را "قدیمی" به شمار میآورد.
|
ttl
|
فایلی از نوع GIF , JPEG و یا PNG که به همراه کانال نمایش داده میشود.
|
image
|
PICS rating(Platform for Internet Content Selection) مربوط به کانال
|
rating
|
نمایش دهنده یک Text Box به همراه کانال که میتواند کاربری های متفاوتی داشته باشد از جمله دریافت نظر مشاهده کنندگان کانال.
|
textInput
|
با این عنصر به نرم افزار گردآورنده خبر گفته میشود که در چه ساعاتی کانال مورد نظر را برای اطلاعات جدید چک نکند.
|
skipHours
|
با این عصر به نرمم افزار گردآورنده خبر گفته میشود که در چه روزی کانال مورد نظر را برای اطلاعات جدید چک نکند.
|
skipDays
|
هر اطلاع و یا خبر، داخل یک عنصر <item> قرار گرفته میشود. این عنصر در داخل <channel> قرار داده میشود. در نظر داشته باشید که تعداد عناصر <item> در هر <channel> دلخواه میباشد. به جز یکی از دو عنصر title و یا description، بقیه موارد اختیاری میباشند.
عناصر معمول در <item> شامل موارد زیر میباشند:
عنوان
|
title
|
آدرس
|
link
|
توضیحات
|
description
|
نویسنده
|
author
|
تاریخ انتشار
|
pubDate
|
نکته: pubDate از قالب RFC 822 پیروی میکند. 3 حرف معادل روز (اختیاری) سپس ","، تاریخ روز، سپس، 3 حرف به عنوان نماد ماه سپس سال و در انتها ساعت و Time Zone به عنوان مثال Sat, 07 Sep 2002 00:00:01 GMT
نمونه ای ساده از یک Feed استاندارد در RSS 2.0
<rss version="2.0">
<channel>
<title>Latest DataWebControls.com FAQs</title>
<link>http://datawebcontrols.com</link>
<description>
This is the syndication feed for the FAQs at DataWebControls.com
</description>
<item>
<title>Working with the DataGrid</title>
<link>http://datawebcontrols.com/faqs/DataGrid.aspx</link>
<pubDate>Mon, 07 Jul 2003 21:00:00 GMT</pubDate>
</item>
<item>
<title>Working with the Repeater</title>
<description>
This article examines how to work with the Repeater control.
</description>
<link>http://datawebcontrols.com/faqs/Repeater.aspx</link>
<pubDate>Tue 08 Jul 2003 12:00:00 GMT</pubDate>
</item>
</channel>
</rss>
در این قسمت شما به عنوان مدیر یک پایگاه اطلاع رسانی هستید که میخواهد بخش RSS اخبار پایگاه خود را در اختیارسایرین ( دیگر پایگاههای اطلاع رسانی و یا خوانندگان خبر از طریق برنامه گردآور خبر(News aggregator) (قرار دهد.
پیش از شروع، لازم است که قوانین پایه ای مربوط به xml و RSS 2.0 را مطالعه نماید.حال جدولی از پایگاه داده (Data base) را که میخواهید تغییرات آن را نمایش دهید انتخاب نمایید برای مثال ما در اینجا از جدولی به نام _NEWS استفاده میکنیم که شامل فیلدهای زیر است:
ID
TITLE
LEAD
IMAGE_PATH
DATE
در بخش بعدی با استفاده از .NET برنامه ای خواهیم نوشت تا فایل RSS جدول بالا را تولید نماید.
نوشتن برنامه ای با استفاده از .Net برای ایجاد Feed( Feed یک فایل xml است که از پایگاه داده خود میسازید تا از آن برای ارائه RSS استفاده شود. ) NameSpace های مورد استفاده مشخص است که برای کار با داده های xml احتیاج به System.Xml خواهیم داشت و چون به کلاس Encoding نیز احتیاج داریم باید از NameSpace مربوط به آن System.Text استفاده کنیم.
توضیح: نکات تکمیلی در مورد هر کد در برابر آن ارائه شده است.
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Web;
using System.Xml;
آنچه در Page_load لازم داریم:
- ایجاد و یا به روز رسانی فایل xml
-
اتصال به پایگاه داده برای خواندن اطلاعات مورد نظر
-
بستن تگها و اتمام کار بر روی فایل
ایجاد و یا به روز رسانی فایل xml
عملکرد
|
دستورالعمل
|
تعریف شئ از نوع xmlWriter این امکان را داریم که یک فایل xml ایجاد کرده و یا اطلاعات آن را به روز نماییم. با استفاده از این شی میتوان Encoding فایل را نیز تعیین کرد.
|
XmlTextWriter xmlWriter = new XmlTextWriter(Server.MapPath("rss.xml") ,Encoding.UTF8);
|
شروع فایل و افزودن مشخصات لازم برای فایل xml نظیر نسخه1.0 برای تگ xml
|
xmlWriter.WriteStartDocument();
|
افزودن تگ شروع کننده عنصر <rss> به عنوان اولین عنصر در فایل
|
xmlWriter.WriteStartElement("rss");
|
افزودن مشخصه "نسخه" برای عنصر <rss>
|
xmlWriter.WriteAttributeString("version","2.0");
|
افزودن تگ شروع کننده عنصر <channel> برای معرفی پایگاه ارائه دهنده RSS
|
xmlWriter.WriteStartElement("channel");
|
افزودن عنصر <title> به عنوان فرزند <channel> برای نمایش عنوان پایگاه ارائه دهنده RSS. به عنوان مثال mydomain.com نمایان گر این مطلب است که این feed متعلق به سایت mydomain.com میباشد.
|
xmlWriter.WriteElementString("title", "MyDomain NewsWriter");
|
افزودن عنصر
به عنوان فرزند <channel> برای نمایش آدرس پایگاه ارائه دهنده RSS
|
xmlWriter.WriteElementString("link","http://mydomain.com");
|
افزودن عنصر به عنوان فرزند <channel> برای نمایش توضیحات پایگاه ارائه دهنده RSS
|
xmlWriter.WriteElementString("description","mycomain.com");
|
افزودن عنصر به عنوان فرزند <channel> برای نمایش حقوق پدید آورندگان پایگاه ارائه دهنده RSS
|
xmlWriter.WriteElementString("copyright","(c) 2004, Mydomain.com. All rights reserved.");
|
افزودن عنصر یا Time To Live به عنوان فرزند <channel> برای اینکه نرم افزار گردآور خبر بداند پس از چه مدت زمانی باید فایل مورد نظر را برای اطلاعات جدید چک نماید. به عبارت دیگر پس از چه مدت زمانی اطلاعات موجود "قدیمی" به حساب میآیند و دوباره باید به روز شوند. بر حسب دقیقه میباشد.
|
xmlWriter.WriteElementString("ttl","25");
|
خواندن از روی پایگاه داده
خواندن رشته حاوی اطلاعات اتصال به پایگاه داده از web.config
|
SqlConnection sqlCn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
|
تعریف پرس وجو برای نمایش ردیفهای مورد نظر
|
string sqlNews = "SELECT TOP 15 ID, LEAD, TITLE, DATE FROM NEWS WHERE STATUS_ID=2 ORDER BY DATE DESC";
|
برقراری اتصال با پایگاه داده و شروع خواندن اطلاعات
|
sqlCn.Open();
SqlCommand sqlcmdNews = new SqlCommand(sqlNews, sqlCn);
SqlDataReader drNews = sqlcmdNews.ExecuteReader();
|
افزودن تگ شروع کننده عنصر <item> و مطالب آن به ازای هر خبر خوانده شده از پایگاه
|
while (drNews.Read())
{
xmlWriter.WriteStartElement("item");
|
افزودن عنصر <title> به عنوان فرزند عنصر <item> به ازای هر خبر خوانده شده از پایگاه که حاوی عنوان خبر خوانده شده میباشد.
|
xmlWriter.WriteElementString("title",drNews.GetString(drNews.GetOrdinal("TITLE")));
|
افزودن عنصر <description> به عنوان فرزند عنصر <item> به ازای هر خبر خوانده شده از پایگاه که حاوی خلاصه خبر خوانده شده میباشد.
|
xmlWriter.WriteElementString("description",drNews.GetString(drNews.GetOrdinal("LEAD")));
|
افزودن عنصر <link> به عنوان فرزند عنصر <item> به ازای هر خبر خوانده شده از پایگاه که حاوی آدرس خبر بوده و برای نمایش متن کامل خبر در مرور گر مورد استفاده قرار میگیرد.
|
xmlWriter.WriteElementString("link", "http://mydomain.com/news.aspx?"+drNews.GetInt32(drNews.GetOrdinal("ID")).ToString());
|
افزودن عنصر <pubDate> به عنوان فرزند عنصر <item> به ازای هر خبر خوانده شده از پایگاه حاوی تاریخ خبر خوانده شده میباشد. این تاریخ باید به صورت استاندارد RTC 822نوشته شده باشد.
|
xmlWriter.WriteElementString("pubDate",drNews.GetDateTime(drNews.GetOrdinal("DATE")).ToString("R"));
|
افزودن تگ پایانی <item/> در پایان هر خبر
|
xmlWriter.WriteEndElement();
|
در انتها: بستن تگ ها و پایان کار بروی فایل
افزودن تگ پایانی <channel/>
|
xmlWriter.WriteEndElement();
|
افزودن تگ پایانی <rss/>
|
xmlWriter.WriteEndElement();
|
بستن تمامی تگ ها و یا مشخصه ها که بسته نشده اند.
|
xmlWriter.WriteEndDocument();
|
پایان کار با فایل
|
xmlWriter.Close();
|
نسخه کامل برنامه
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.IO;
using System.Text;
using System.Configuration;
namespace rss
{
/// <summary>
/// Summary description for createXml.
/// </summary>
public class createXml : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
XmlTextWriter xmlWriter = new XmlTextWriter(Server.
MapPath("rss.xml")
,Encoding.UTF8);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("rss");
xmlWriter.WriteAttributeString("version","2.0");
xmlWriter.WriteStartElement("channel");
xmlWriter.WriteElementString("title", "MyDomain News");
xmlWriter.WriteElementString("link","http://MyDomain.com");
xmlWriter.WriteElementString("description","MyDomain");
xmlWriter.WriteElementString("copyright","(c) 2004,
MyDomain.com. All rights reserved.");
xmlWriter.WriteElementString("ttl","25");
SqlConnection sqlCn = new
SqlConnection(ConfigurationSettings.AppSettings
["ConnectionString"]);
sqlCn.Open();
string sqlNews = "SELECT TOP 15 ID, LEAD,
TITLE, IMAGE_PATH,DATE FROM NEWS WHERE
STATUS_ID=2 ORDER BY DATE
DESC";
SqlCommand sqlcmdNews = new SqlCommand(sqlNews, sqlCn);
SqlDataReader drNews = sqlcmdNews.ExecuteReader();
while (drNews.Read())
{
xmlWriter.WriteStartElement("item");
xmlWriter.WriteElementString("title",drNews.GetString
(drNews.GetOrdinal("TITLE")));
xmlWriter.WriteElementString("description",drNews.GetString
(drNews.GetOrdinal("LEAD")));
xmlWriter.WriteElementString("link",
"http://mydomain.com/news.aspx?"
+drNews.GetInt32(drNews.GetOrdinal("ID")).
ToString()+".html");
xmlWriter.WriteElementString("pubDate",
drNews.GetDateTime(drNews.GetOrdinal("DATE"))
.ToString("R"));
xmlWriter.WriteEndElement();
}
drNews.Close();
sqlCn.Close();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Close();
}
}
تعیین درستی Feed تولید شده از پایگاه اطلاعاتی
هرگز فراموش نکنید که در انتهای کار، اطلاعات تولیدی خود را از جهت درستی و استاندارد بودن Feed ایجاد شده، بیازمایید. به همین دلیل نرم افزار ها و پایگاههایی وجود دارند که عملیات تعیین درستی فایل xml شما را انجام میدهند. به عنوان مثال از پایگاه
RSS Validator میتوانید استفاده کنید. برای استفاده از خدمات این پایگاه، کافی است که آدرس فایل xml پایگاه خود را وارد کرده و نتیجه نهایی را دریافت کنید.
نقل اطلاعات RSS دیگران در پایگاه اطلاع رسانی خود
ساده ترین نوع استفاده از RSS در پایگاه اطلاع رسانی، نمایش آخرین اخبار پایگاههای دیگر میباشد. در این حالت کافی است که محلی برای نمایش اطلاعات پایگاه مورد نشر در نظر بگیرید و بسته به اینکه بخواهید فایل مورد نظر چگونه نمایش داده شود، آن را سفارشی نمایید.
مثال:
برای نمایش اخبار منتشر شده در BBC در پایگاه خود، در ساده ترین حالت، کافی است که یک صفحه .aspx ایجاد نمایید. سپس یک Datagrid در صفحه قرار دهید:
<asp:DataGrid id="dgPost" runat="server" AutoGenerateColumns="False" BorderColor="#DEBA84" BorderStyle="None"
CellSpacing="2" BorderWidth="1px" BackColor="#DEBA84" CellPadding="3" dir=rtl>
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#738A9C"></SelectedItemStyle>
<ItemStyle ForeColor="#8C4510" BackColor="#FFF7E7"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#A55129"></HeaderStyle>
<FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle>
<Columns>
<asp:TemplateColumn HeaderText="title">
<ItemTemplate>
<a href=<%# DataBinder.Eval(Container, "DataItem.link") %>><%# DataBinder.Eval(Container, "DataItem.title") %>
</a>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="description" HeaderText="Description"></asp:BoundColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#8C4510" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
namespace rss
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dgPost;
private void Page_Load(object sender, System.EventArgs e)
{
dgPost.DataSource=GetRss("http://www.bbc.co.uk/syndication/feeds/news/ukfs_news/world/rss091.xml");
dgPost.DataBind();
}
public DataTable GetRss(string str)
{
XmlTextReader xmlr = new XmlTextReader(str);
DataSet ds = new DataSet();
ds.ReadXml(xmlr);
return ds.Tables[2];
}
همانطور که مشخص استDatagrid تعریف شده، برای نمایش عنوان و توضیح خبر مورد استفاده قرار میگیرد. این ساده ترین حالت ممکن برای استفاده از xml پایگاههای دیگر میباشد.
در این حالت میتوان به شی "XmlTextReader"، نشانی فایل مورد نظر را ارسال کرد. سپس فایل را از طریق متد ReadXml در DataSet قرار داد. نکته مهم این است که در هنگام خواندن xml ، DataSet به ازای هر سطح از xml یک DataTable ایجاد میکند. بنابراین عناصر <rss> و <channel> هرکدام به عنوان یک جدول در DataSet شناخته خواهند شد. میتوان نتیجه گرفت که برای نمایش اطلاعات <channel> (شامل زبان ، ttl ، copyright و ...) کافی است که اطلاعات جدول شماره 1 یا [ ds.Tables[1 را استخراج نمایید.
با استفاده از روش بالا میتوان اطلاعات را به درستی نمایش داد. اما استفاده از UserControl این امکان را میدهد که بتوانیم بدون تغییر محسوس در صفحات، کدی ایجاد نماییم که هم قابلیت استفاده مجدد ( بدون تکرار کردن کد ) را داشته باشد و هم تغییر و کنترل آن ساده و از یک فایل، برای تمامی صفحات باشد. برای اینکار ابتدا با استفاده از Visual Studio فایلی با عنوان rssFeed.ascx میسازیم و مجددا روند ذکر شده در روش قبل را تکرار میکنیم.
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="RssFeed.ascx.cs" Inherits="rss.RssFeed" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<asp:DataGrid id="dgPost" runat="server" AutoGenerateColumns="False" BorderColor="#DEBA84" BorderStyle="None"
CellSpacing="2" BorderWidth="1px" BackColor="#DEBA84" CellPadding="3" dir=rtl>
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#738A9C"></SelectedItemStyle>
<ItemStyle ForeColor="#8C4510" BackColor="#FFF7E7"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#A55129"></HeaderStyle>
<FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle>
<Columns>
<asp:TemplateColumn HeaderText="title">
<ItemTemplate>
<a href=<%# DataBinder.Eval(Container, "DataItem.link") %>><%# DataBinder.Eval(Container, "DataItem.title") %>
</a>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="description" HeaderText="Description"></asp:BoundColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#8C4510" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
namespace rss
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
/// <summary>
/// Summary description for RssFeed.
/// </summary>
public class RssFeed : System.Web.UI.UserControl
{
private void Page_Load(object sender, System.EventArgs e)
{
dgPost.DataSource=GetRss("http:/mydomain.com/rss.xml");
dgPost.DataBind();
}
public DataTable GetRss(string str)
{
XmlTextReader xmlr = new XmlTextReader(str);
DataSet ds = new DataSet();
ds.ReadXml(xmlr);
return ds.Tables[2];
}
}
}
چگونگی استفاده از UserControl
نکته مهم در مورد UserControl نحوه استفاده از این فایل میباشد. برای استفاده از UserControl در صفحات دیگر، احتیاج به معرفی Usercontrol ایجاد شده داریم که از طریق کد زیر قابل انجام میباشد.
<%@ Register TagPrefix="rss" TagName="rssFeed" Src="ssFeed.ascx" %>
با استفاده از این کد میتوان کنترل جدید را در هر صفحه .aspx که میخواهید از آن استفاده کنید، معرفی نمایید. به عنوان مثال:
<%@ Register TagPrefix="rss" TagName="rssFeed" Src="rssFeed.ascx" %>
<%@ Page language="c#" Codebehind="View.aspx.cs" AutoEventWireup="false" Inherits="rss.WebForm1" %>
<HTML>
<HEAD>
</HEAD>
<body MS_POSITIONING="GridLayout">
<TABLE height="163" cellSpacing="0" cellPadding="0" border="0" ms_2d_layout="TRUE">
<TR vAlign="top">
<TD width="57" height="163">
<form id="frm" method="post" runat="server">
<TABLE height="40" cellSpacing="0" cellPadding="0" border="0" ms_2d_layout="TRUE">
<TR vAlign="top">
<TD width="10" height="15"></TD>
<TD width="141"></TD>
</TR>
<TR vAlign="top">
<TD height="25"></TD>
<TD>
<rss:rssFeed id="ucRssFeed" runat="Server" /></TD>
</TR>
</TABLE>
</form>
</TD>
</TR>
</TABLE>
</body>
</HTML>
استفاده از caching
مطمئنا در هنگام نمایش اطلاعات سایرین در پایگاه خود، بهتر است که به ازای هر بار، بارگذاری صفحه، به پایگاه ارائه دهنده RSS مراجعه نکنیم. بلکه در یک مدت زمان مشخص تغییر اطلاعات را چک نماییم. یکی از ساده ترین روشها Cache کردن اطلاعات RSS برای یک مدت زمان دلخواه میباشد تا هر زمان که این بازه زمانی به پایان میرسد بتوانیم اطلاعات Feed را از پایگاه ارائه دهنده مجددا بخوانیم. برای این کار میتوانیم به صورت زیر عمل نماییم:
<%@ Register TagPrefix="rss" TagName="rssFeed" Src="rssFeed.ascx" %>
<%@ Page language="c#" Codebehind="View.aspx.cs" AutoEventWireup="false" Inherits="rss.WebForm1" %>
<HTML>
<HEAD>
</HEAD>
<body MS_POSITIONING="GridLayout">
<TABLE height="163" cellSpacing="0" cellPadding="0" border="0" ms_2d_layout="TRUE">
<TR vAlign="top">
<TD height="163">
<form id="frm" method="post" runat="server">
<TABLE height="40" cellSpacing="0" cellPadding="0" border="0" ms_2d_layout="TRUE">
<TR vAlign="top">
<TD height="15"></TD>
<TD "></TD>
</TR>
<TR vAlign="top">
<TD height="25"></TD>
<TD>
<rss:rssFeed id="ucRssFeed" runat="Server" /></TD>
</TR>
</TABLE>
</form>
</TD>
</TR>
</TABLE>
</body>
</HTML>