آشنایی با RSS

مقدمه

امروزه با توجه به استفاده روز افزون از اینترنت و همچنین افزایش تعداد پایگاههای اطلاع رسانی که ارائه دهنده اخبار، اطلاعات تخصصی و... می‌باشند، نیاز به اشتراک گذاشتن اطلاعات بیش از پیش احساس می‌گردد. اما به اشتراک گذاشتن اطلاعات، بدون داشتن بستر فنی واحد و در عین حال استانداردی یکسان قابل انجام نخواهد بود. یکی از معمول ترین راههای استفاده مشترک از اطلاعات , قالب 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 استفاده نمایند:

  1. برای نقل اطلاعات و اخبار از پایگاههای دیگربا استفاده از بخش " نقل اطلاعات RSS دیگران در پایگاه اطلاع رسانی "، مدیر سیستم می‌تواند از اطلاعات و اخبار سایتهای دیگر در پایگاه خود استفاده نماید.
  2. برای ارائه اطلاعات و اخبار پایگاه خود در قالب RSSبا استفاده از بخش " ارائه RSS در پایگاه اطلاع رسانی "، مدیر سیستم می‌تواند اطلاعات و اخبار پایگاه خود را در این قالب در دسترس سایرین قرار دهد.

 

نرم افزار

نرم افزار های مختلفی برای جمع آوری و خواندن اطلاعات پایگاههای ارائه دهنده RSS وجود دارد که ما 3 نمونه از آنها را در اینجا معرفی می‌کنیم:

 

 نگاهی به استانداردهای پایه ای XML

با توجه به اینکه RSS از فایلهای XML استفاده می‌کند، پیش از شروع، چند قانون ساده در مورد فایلهای XML را به خاطر بسپارید:

  1.  محتویات فایلهای XML به بزرگی و کوچکی حروف حساس می‌باشند. بنابراین <item> با <Item> یکسان نمی‌باشد.
  2. عناصر در هر فایل xml، باید به درستی در داخل یکدیگر قرار داده شوند. در نظر داشته باشید که چگونه قرار گرفتن عناصر در فایل xml، تاثیر مستقیمی بر استاندارد بودن Feed بر حسب نسخه آن دارد.
  3.  کاراکترهایی نظیر < ,  >, &, " و  ' در صورتی که در داخل متن و مقادیر صفات باشند، باید با &lt; ، &gt;  ، &amp; ، &qout; و &apos; جایگزین گردند.
  4.  تمامی مقادیر مشخصه ها، در داخل “” قرار داده می‌شوند. به عنوان مثال <"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 لازم داریم:

 

  1.  ایجاد و یا به روز رسانی فایل xml
  2. اتصال به پایگاه داده برای خواندن اطلاعات مورد نظر
  3. بستن تگها و اتمام کار بر روی فایل

 ایجاد و یا به روز رسانی فایل 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 پایگاه خود را وارد کرده و نتیجه نهایی را دریافت کنید.
 
از دیگر پایگاههای ارائه دهنده این سرویسFeed Validator می‌باشد.

 

نقل اطلاعات 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[را استخراج نمایید.

با استفاده از روش بالا می‌توان اطلاعات را به درستی نمایش داد. اما استفاده از 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>




آخرین بروزرسانی
۲۳ بهمن ۱۴۰۲ 
تعداد کلیک
۵,۴۰۷

فهرست نظرها و ارسال نظر جدید

نام را وارد کنید
ایمیل را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید