همانگونه که حتما مستحضر می باشید، مسائل و مشکلات برنامه نویسی معمولا از روش
های مختلفی قابل حل می باشند و هر روش معایب و مزایای خاص خود را دارد. در این میان
روش هایی که خلاصه ترین راه حل ها را ارائه می دهند همواره جذابیت ویژه ای دارند و
این مقاله بنا به همین دلیل نوشته شده است.
صورت مسئله:
قصد داریم قطعه کدی بنویسیم که از آدرس های مختلف، فید های RSS را خوانده و
نتایج را بر اساس زمان انتشار مرتب سازی نموده و در یک صفحه در قالب فید RSS منتشر
نماید.
برای انجام این کار از کلاس های موجود در فضای نامی System.ServiceModel.Syndication و کلاس XmlReader استفاده
می کنیم. بنابراین ابتدا باید این فضاهای نامی
را به صفحه خود اضافه نمایید.
using System.ServiceModel.Syndication;
using System.Xml;
به قطعه کد زیر توجه کنید.
protected void Page_Load(object sender, EventArgs e)
{
string url1 = "http://www.30sharp.com/rss/csharp.aspx";
string url2 = "http://www.30sharp.com/rss/aspnet.aspx";
// Section 1 : read feed 1
XmlReader reader1 = XmlReader.Create(url1);
Rss20FeedFormatter formatter1 = new Rss20FeedFormatter();
formatter1.ReadFrom(reader1);
reader1.Close();
// Section 2 : read feed 2
XmlReader reader2 = XmlReader.Create(url2);
Rss20FeedFormatter formatter2 = new Rss20FeedFormatter();
formatter2.ReadFrom(reader2);
reader2.Close();
// Section 3 : merge and sort feed 1 and feed 2 items
List<SyndicationItem> allItems = new List<SyndicationItem>();
allItems.AddRange(formatter1.Feed.Items);
allItems.AddRange(formatter2.Feed.Items);
allItems.Sort(CompareDates);
// Section 4: final feed
SyndicationFeed feed = new SyndicationFeed();
feed.Title = new TextSyndicationContent("My RSS Feed");
feed.Copyright = new TextSyndicationContent("Copyright (C) 2011. All rights reserved.");
feed.Description = new TextSyndicationContent("RSS Feed Generated .NET Syndication Classes");
feed.Generator = "My RSS Feed Generator";
feed.Items = allItems;
//Section 5 : write final feed
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "text/xml";
XmlWriter rssWriter = XmlWriter.Create(Response.Output);
Rss20FeedFormatter formatter3 = new Rss20FeedFormatter(feed);
formatter3.WriteTo(rssWriter);
rssWriter.Close();
Response.End();
}
public int CompareDates(SyndicationItem x, SyndicationItem y)
{
return y.PublishDate.CompareTo(x.PublishDate);
}
قطعه کد فوق از 5 قسمت تشکیل شده است که اکنون به معرفی هر قسمت می پردازیم.
Section 1:
با استفاده از کلاس Rss20FeedFormatter فید
های موجود در آدرس url1 را خوانده ایم.
Section 2:
مشابه قسمت اول، با استفاده از کلاس Rss20FeedFormatter
فید های موجود در آدرس url2 را خوانده ایم.
Section 3:
یک لیست از نوع SyndicationItem ایجاد نموده
ایم و فید های خوانده شده از قسمت اول و دوم را داخل این لیست قرار داده و سپس متد
Sort مربوط به لیست را فراخوانی نموده ایم. این متد با کمک تابع CompareDates
همانطور که در قطعه کد بالا ملاحظه می کنید، عملیات مرتب سازی را بر اساس تاریخ
انتشار فید ها انجام می دهد.
Section 4:
خوب اکنون لیست ما آماده است و ما هر آنچه را که بخواهیم می توانیم با آن انجام
دهیم. به طور مثال اگر قصد داشتیم نتایج را به یک کنترل Repeate یا GridView جهت
نمایش در وب سایت خود بایند کنیم، هیچ مشکلی پیش رو نبود. اما چون در اینجا ما می
خواهیم که نتایج را با فرمت RSS منتشر کنیم، یک کلاس از نوع SyndicationFeed
ایجاد نموده و خصوصیات مورد نظر خود را از قبیل Title، Copyright، Description و
Generator با مقادیر مناسب پر نموده ایم.
Section 5:
اکنون زمان آن رسیده است که نتایج را بر روی جریان خروجی صفحه بنویسم! و کار
تمام است.
قطع کد کامل این مقاله از لینک بالای صفحه
قابل دریافت می باشد.
برگفته از :
bipinjoshi.net