Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET MVC – RSS Oluşturma

Güncel içerik paylaşımında bulunan web sitelerinde(haber, blog ya da satış siteleri gibi) yeni yayınlanan içeriklerin dışarıdan takip edilebilmesi için XML alt yapısında olan RSS yapısı kullanılmaktadır.İçerikler bu yapı sayesinde kolay bir şekilde takip edilebilmekte ve SEO açısından da oldukça olumlu etkiler göstermektedir.Bu yazımızda Asp.NET MVC mimarisiyle RSS işlemleri nasıl yapılır inceleyeceğiz.

Öncelikle RSS yapısını daha detaylı bir şekilde izah etmek istiyorum.
Yukarıda da bahsettiğim gibi RSS’in XML format yapısında olduğundan bahsettim.

Peki bu XML yapısı nasıl olmalıdır? diye sorarsanız eğer aşağıdaki XML kodunu inceleyiniz.

<?xml version="1.0" encoding="utf-8"?>
<rss version="1.0">
  <channel>
    <title>RSS KANAL BAŞLIK</title>
    <link>RSS KANAL LİNKİ</link>
    <description>RSS KANAL TANITIMI</description>
    <copyright>COPYRIGHT</copyright>
    <pubDate>RSS YAYIN TARİHİ</pubDate>
    <language>DİL</language>
    <webMaster>WEB MASTER BİLGİSİ</webMaster>
    <item>
      <title>RSS KONU BAŞLIĞI</title>
      <description>RSS KONU TANIMI</description>
      <link>RSS KONU LİNKİ</link>
      <pubDate>RSS KONU YAYIN TARİHİ</pubDate>
    </item>
    <item>
     ...
    </item>
  </channel>
</rss>

Yukarıdaki XML şemasını incelerseniz eğer XML yapımız bu şekilde olacaktır ve “” nodeunu Repeat ederek yeni içeriklerimizi RSS kaynağına entegre edebiliriz.

Şimdi Asp.NET MVC mimarisinde bu yapıyı nasıl dinamik bir şekilde oluşturacağımızı görelim.Tabi öncelikle Northwind veritabanının Personeller tablosunda örneklendirmemizi yapacağımızı bildirmemde fayda olacaktır.

Öncelikle RSS modelimizi oluşturalım.

    public class Rss
    {
        public int ID { get; set; }
        public string Baslik { get; set; }
        public string Aciklama { get; set; }
        public string Link { get; set; }
        public string Tarih { get; set; }
    }

Ardından RSS kaynağını oluşturacağımız metodumuzu yazacağız.

    public class RssOlusturucu
    {
        public void Olustur()
        {
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ContentType = "text/xml";
            XmlTextWriter rssWriter = new XmlTextWriter(HttpContext.Current.Response.OutputStream, Encoding.UTF8);
            rssWriter.WriteStartDocument();
            //RSS Node'larını burada açmaya başlıyoruz.
            rssWriter.WriteStartElement("rss");
            rssWriter.WriteAttributeString("version", "1.0");
            rssWriter.WriteStartElement("channel");
            rssWriter.WriteElementString("title", "gencayyildiz.com RSS ÖRNEK");
            rssWriter.WriteElementString("link", "siteadi.com/rss");
            rssWriter.WriteElementString("description", "Gençay Yıldız | Kod Yazmak Bir Sanattır");
            rssWriter.WriteElementString("copyright", "(c) 2014, Gençay Yıldız");
            rssWriter.WriteElementString("pubDate", "06/03/2014");
            rssWriter.WriteElementString("language", "tr-TR");
            rssWriter.WriteElementString("webMaster", "gyildizmail@gmail.com");
            /*RSS kaynağında yayınlanacak yeni içerikler nesne olarak bu listede tutuluyor.
            Siz isterseniz eğer burada veritabanı işlemleriyle dinamik olarak son yayınları
             çekebilir ve listeye atabilirsiniz.
             */
            List<Rss> rssList = new List<Rss>
            {
                new Rss
                {
                    ID = 1,
                    Baslik = "Konu Başlığı 1",
                    Aciklama = "Açıklama 1",
                    Tarih = new DateTime(2014,03,07).ToString(),
                    Link = "http://www.bilmemne.com"
                },
                 new Rss
                {
                    ID = 2,
                    Baslik = "Konu Başlığı 2",
                    Aciklama = "Açıklama 2",
                    Tarih = new DateTime(2014,03,08).ToString(),
                    Link = "http://www.bilmemne.com"
                }
            };
            foreach (var rss in rssList)
            {
                rssWriter.WriteStartElement("item");
                rssWriter.WriteElementString("title", rss.Baslik);
                rssWriter.WriteElementString("description", rss.Aciklama);
                rssWriter.WriteElementString("link", rss.Link);
                rssWriter.WriteElementString("pubDate", rss.Tarih);
                rssWriter.WriteEndElement();
            }
            rssWriter.WriteEndDocument();
            //Belgeyi tamamlayıp ekrana çıktısını yazıyoruz...
            rssWriter.Flush();
            rssWriter.Close();
            HttpContext.Current.Response.End();
        }
    }

Kısaca yukarıdaki kod bloğunu özetlersek eğer,
HttpContext.Current.Response.Clear() ile var olan kaydı siliyoruz.
ContentType ile bu sınıfın çalışacağı sayfanın alt yapısını XML olarak belirtiyoruz.
XmlTextWriter tipinden olan rssWriter isimli nesnemiz ile XML yapısını oluşturacağız.
WriteStartDocument() metodu XML’i yapısal olarak başlatır.
WriteStartElement() Yeni bir root oluşturmamızı sağlar.
WriteAttributeString() Node’umuza attribute eklemeyi sağlar.
WriteElementString() String node oluşturmayı sağlar.
Foreach döngüsü ile RSS nesnelerindeki bilgileri XML formata dönüştürüp XmlTextWriter nesnemizle derliyoruz.

Şimdi “Home(Controller).cs” isimli Controller sınıfı oluşturup içinde “RssOku” isimli Action metod yazalım.RSS kaynağını “RssOlustur.cshtml” View’ın da görüntüleyelim.

    public class HomeController : Controller
    {
        public ActionResult RssOku()
        {
            RssOlusturucu olustur = new RssOlusturucu();
            olustur.Olustur();
            return View();
        }
    }

“RssOku” isimli Action metodunun View dosyasını oluşturmamıza gerek yoktur.Çünkü “RssOlusturucu” sınıfı sayesinde bu Action çalıştığı zaman XML tabanlı veri dönecektir.

Bu son işlemide bitirdikten sonra projemizi derleyip çalıştırıyoruz.
AspNETMVCRSS

Bir sonraki makalede görüşmek üzere…
İyi çalışmalar..

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. OĞUZHAN SARI dedi ki:

    Merhaba, çok iyi bir bilgi teşekkürler.

  2. ekrem dedi ki:

    Teşekkürler Gencay hocam, yine tam olarak çözüm üreten bir makale yazmışsın 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir