خواندن فید های RSS از منابع مختلف و انتشار مجموع آن ها با فرمت RSS
  در این ترفند به معرفی روشی جهت خواندن فید های RSS از منابع مختلف و منتشر نمودن مجموعه آن ها در یک صفحه می پردازیم
   ASP.NET
   ۱۴۸۰۸
   دانلود
   مرتضی صحراگرد
   ۱۳۹۰/۹/۲۵
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

همانگونه که حتما مستحضر می باشید، مسائل و مشکلات برنامه نویسی معمولا از روش های مختلفی قابل حل می باشند و هر روش معایب و مزایای خاص خود را دارد. در این میان روش هایی که خلاصه ترین راه حل ها را ارائه می دهند همواره جذابیت ویژه ای دارند و این مقاله بنا به همین دلیل نوشته شده است.

صورت مسئله:

قصد داریم قطعه کدی بنویسیم که از آدرس های مختلف، فید های 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