﻿
{"id":2513,"date":"2014-03-06T22:47:20","date_gmt":"2014-03-06T22:47:20","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=2513"},"modified":"2014-03-12T21:42:34","modified_gmt":"2014-03-12T21:42:34","slug":"asp-net-mvc-rss-olusturma","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-rss-olusturma\/","title":{"rendered":"Asp.NET MVC &#8211; RSS Olu\u015fturma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>G\u00fcncel i\u00e7erik payla\u015f\u0131m\u0131nda bulunan web sitelerinde(<span style=\"font-size: x-small;\">haber, blog ya da sat\u0131\u015f siteleri gibi<\/span>) yeni yay\u0131nlanan i\u00e7eriklerin d\u0131\u015far\u0131dan takip edilebilmesi i\u00e7in XML alt yap\u0131s\u0131nda olan RSS yap\u0131s\u0131 kullan\u0131lmaktad\u0131r.\u0130\u00e7erikler bu yap\u0131 sayesinde kolay bir \u015fekilde takip edilebilmekte ve SEO a\u00e7\u0131s\u0131ndan da olduk\u00e7a olumlu etkiler g\u00f6stermektedir.Bu yaz\u0131m\u0131zda Asp.NET MVC mimarisiyle RSS i\u015flemleri nas\u0131l yap\u0131l\u0131r inceleyece\u011fiz.<br \/>\n<!--more--><br \/>\n\u00d6ncelikle RSS yap\u0131s\u0131n\u0131 daha detayl\u0131 bir \u015fekilde izah etmek istiyorum.<br \/>\nYukar\u0131da da bahsetti\u011fim gibi RSS&#8217;in XML format yap\u0131s\u0131nda oldu\u011fundan bahsettim.<\/p>\n<p><strong>Peki bu XML yap\u0131s\u0131 nas\u0131l olmal\u0131d\u0131r?<\/strong> diye sorarsan\u0131z e\u011fer a\u015fa\u011f\u0131daki XML kodunu inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;rss version=&quot;1.0&quot;&gt;\r\n  &lt;channel&gt;\r\n    &lt;title&gt;RSS KANAL BA\u015eLIK&lt;\/title&gt;\r\n    &lt;link&gt;RSS KANAL L\u0130NK\u0130&lt;\/link&gt;\r\n    &lt;description&gt;RSS KANAL TANITIMI&lt;\/description&gt;\r\n    &lt;copyright&gt;COPYRIGHT&lt;\/copyright&gt;\r\n    &lt;pubDate&gt;RSS YAYIN TAR\u0130H\u0130&lt;\/pubDate&gt;\r\n    &lt;language&gt;D\u0130L&lt;\/language&gt;\r\n    &lt;webMaster&gt;WEB MASTER B\u0130LG\u0130S\u0130&lt;\/webMaster&gt;\r\n    &lt;item&gt;\r\n      &lt;title&gt;RSS KONU BA\u015eLI\u011eI&lt;\/title&gt;\r\n      &lt;description&gt;RSS KONU TANIMI&lt;\/description&gt;\r\n      &lt;link&gt;RSS KONU L\u0130NK\u0130&lt;\/link&gt;\r\n      &lt;pubDate&gt;RSS KONU YAYIN TAR\u0130H\u0130&lt;\/pubDate&gt;\r\n    &lt;\/item&gt;\r\n    &lt;item&gt;\r\n     ...\r\n    &lt;\/item&gt;\r\n  &lt;\/channel&gt;\r\n&lt;\/rss&gt;\r\n<\/pre>\n<p>Yukar\u0131daki XML \u015femas\u0131n\u0131 incelerseniz e\u011fer XML yap\u0131m\u0131z bu \u015fekilde olacakt\u0131r ve &#8220;&#8221; nodeunu Repeat ederek yeni i\u00e7eriklerimizi RSS kayna\u011f\u0131na entegre edebiliriz.<\/p>\n<p>\u015eimdi Asp.NET MVC mimarisinde bu yap\u0131y\u0131 nas\u0131l dinamik bir \u015fekilde olu\u015fturaca\u011f\u0131m\u0131z\u0131 g\u00f6relim.Tabi \u00f6ncelikle Northwind veritaban\u0131n\u0131n Personeller tablosunda \u00f6rneklendirmemizi yapaca\u011f\u0131m\u0131z\u0131 bildirmemde fayda olacakt\u0131r.<\/p>\n<p>\u00d6ncelikle RSS modelimizi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Rss\r\n    {\r\n        public int ID { get; set; }\r\n        public string Baslik { get; set; }\r\n        public string Aciklama { get; set; }\r\n        public string Link { get; set; }\r\n        public string Tarih { get; set; }\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan RSS kayna\u011f\u0131n\u0131 olu\u015fturaca\u011f\u0131m\u0131z metodumuzu yazaca\u011f\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class RssOlusturucu\r\n    {\r\n        public void Olustur()\r\n        {\r\n            HttpContext.Current.Response.Clear();\r\n            HttpContext.Current.Response.ContentType = &quot;text\/xml&quot;;\r\n            XmlTextWriter rssWriter = new XmlTextWriter(HttpContext.Current.Response.OutputStream, Encoding.UTF8);\r\n            rssWriter.WriteStartDocument();\r\n            \/\/RSS Node'lar\u0131n\u0131 burada a\u00e7maya ba\u015fl\u0131yoruz.\r\n            rssWriter.WriteStartElement(&quot;rss&quot;);\r\n            rssWriter.WriteAttributeString(&quot;version&quot;, &quot;1.0&quot;);\r\n            rssWriter.WriteStartElement(&quot;channel&quot;);\r\n            rssWriter.WriteElementString(&quot;title&quot;, &quot;gencayyildiz.com RSS \u00d6RNEK&quot;);\r\n            rssWriter.WriteElementString(&quot;link&quot;, &quot;siteadi.com\/rss&quot;);\r\n            rssWriter.WriteElementString(&quot;description&quot;, &quot;Gen\u00e7ay Y\u0131ld\u0131z | Kod Yazmak Bir Sanatt\u0131r&quot;);\r\n            rssWriter.WriteElementString(&quot;copyright&quot;, &quot;(c) 2014, Gen\u00e7ay Y\u0131ld\u0131z&quot;);\r\n            rssWriter.WriteElementString(&quot;pubDate&quot;, &quot;06\/03\/2014&quot;);\r\n            rssWriter.WriteElementString(&quot;language&quot;, &quot;tr-TR&quot;);\r\n            rssWriter.WriteElementString(&quot;webMaster&quot;, &quot;gyildizmail@gmail.com&quot;);\r\n            \/*RSS kayna\u011f\u0131nda yay\u0131nlanacak yeni i\u00e7erikler nesne olarak bu listede tutuluyor.\r\n            Siz isterseniz e\u011fer burada veritaban\u0131 i\u015flemleriyle dinamik olarak son yay\u0131nlar\u0131\r\n             \u00e7ekebilir ve listeye atabilirsiniz.\r\n             *\/\r\n            List&lt;Rss&gt; rssList = new List&lt;Rss&gt;\r\n            {\r\n                new Rss\r\n                {\r\n                    ID = 1,\r\n                    Baslik = &quot;Konu Ba\u015fl\u0131\u011f\u0131 1&quot;,\r\n                    Aciklama = &quot;A\u00e7\u0131klama 1&quot;,\r\n                    Tarih = new DateTime(2014,03,07).ToString(),\r\n                    Link = &quot;http:\/\/www.bilmemne.com&quot;\r\n                },\r\n                 new Rss\r\n                {\r\n                    ID = 2,\r\n                    Baslik = &quot;Konu Ba\u015fl\u0131\u011f\u0131 2&quot;,\r\n                    Aciklama = &quot;A\u00e7\u0131klama 2&quot;,\r\n                    Tarih = new DateTime(2014,03,08).ToString(),\r\n                    Link = &quot;http:\/\/www.bilmemne.com&quot;\r\n                }\r\n            };\r\n            foreach (var rss in rssList)\r\n            {\r\n                rssWriter.WriteStartElement(&quot;item&quot;);\r\n                rssWriter.WriteElementString(&quot;title&quot;, rss.Baslik);\r\n                rssWriter.WriteElementString(&quot;description&quot;, rss.Aciklama);\r\n                rssWriter.WriteElementString(&quot;link&quot;, rss.Link);\r\n                rssWriter.WriteElementString(&quot;pubDate&quot;, rss.Tarih);\r\n                rssWriter.WriteEndElement();\r\n            }\r\n            rssWriter.WriteEndDocument();\r\n            \/\/Belgeyi tamamlay\u0131p ekrana \u00e7\u0131kt\u0131s\u0131n\u0131 yaz\u0131yoruz...\r\n            rssWriter.Flush();\r\n            rssWriter.Close();\r\n            HttpContext.Current.Response.End();\r\n        }\r\n    }\r\n<\/pre>\n<p>K\u0131saca yukar\u0131daki kod blo\u011funu \u00f6zetlersek e\u011fer,<br \/>\n<em>HttpContext.Current.Response.Clear()<\/em> ile var olan kayd\u0131 siliyoruz.<br \/>\n<em>ContentType<\/em> ile bu s\u0131n\u0131f\u0131n \u00e7al\u0131\u015faca\u011f\u0131 sayfan\u0131n alt yap\u0131s\u0131n\u0131 XML olarak belirtiyoruz.<br \/>\n<em>XmlTextWriter<\/em> tipinden olan rssWriter isimli nesnemiz ile XML yap\u0131s\u0131n\u0131 olu\u015fturaca\u011f\u0131z.<br \/>\n<em>WriteStartDocument()<\/em> metodu XML&#8217;i yap\u0131sal olarak ba\u015flat\u0131r.<br \/>\n<em>WriteStartElement()<\/em> Yeni bir root olu\u015fturmam\u0131z\u0131 sa\u011flar.<br \/>\n<em>WriteAttributeString()<\/em> Node\u2019umuza attribute eklemeyi sa\u011flar.<br \/>\n<em>WriteElementString()<\/em> String node olu\u015fturmay\u0131 sa\u011flar.<br \/>\n<em>Foreach d\u00f6ng\u00fcs\u00fc<\/em> ile RSS nesnelerindeki bilgileri XML formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcp XmlTextWriter nesnemizle derliyoruz.<\/p>\n<p>\u015eimdi &#8220;Home(Controller).cs&#8221; isimli Controller s\u0131n\u0131f\u0131 olu\u015fturup i\u00e7inde &#8220;RssOku&#8221; isimli Action metod yazal\u0131m.RSS kayna\u011f\u0131n\u0131 &#8220;RssOlustur.cshtml&#8221; View&#8217;\u0131n da g\u00f6r\u00fcnt\u00fcleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult RssOku()\r\n        {\r\n            RssOlusturucu olustur = new RssOlusturucu();\r\n            olustur.Olustur();\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>&#8220;RssOku&#8221; isimli Action metodunun View dosyas\u0131n\u0131 olu\u015fturmam\u0131za gerek yoktur.\u00c7\u00fcnk\u00fc &#8220;RssOlusturucu&#8221; s\u0131n\u0131f\u0131 sayesinde bu Action \u00e7al\u0131\u015ft\u0131\u011f\u0131 zaman XML tabanl\u0131 veri d\u00f6necektir.<\/p>\n<p>Bu son i\u015flemide bitirdikten sonra projemizi derleyip \u00e7al\u0131\u015ft\u0131r\u0131yoruz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/AspNETMVCRSS.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2516\" alt=\"AspNETMVCRSS\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/AspNETMVCRSS-300x271.png\" width=\"300\" height=\"271\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/AspNETMVCRSS-300x271.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2014\/03\/AspNETMVCRSS.png 497w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Bir sonraki makalede g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar..<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>G\u00fcncel i\u00e7erik payla\u015f\u0131m\u0131nda bulunan web sitelerinde(haber, blog ya da sat\u0131\u015f siteleri gibi) yeni yay\u0131nlanan i\u00e7eriklerin d\u0131\u015far\u0131dan takip edilebilmesi i\u00e7in XML alt yap\u0131s\u0131nda olan RSS yap\u0131s\u0131 kullan\u0131lmaktad\u0131r.\u0130\u00e7erikler bu yap\u0131 sayesinde kolay bir \u015fekilde takip edilebilmekte&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,345,234],"tags":[746,283,405,752],"class_list":["post-2513","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","category-mvc-4-0","category-xml","tag-asp-net-mvc","tag-mvc","tag-rss","tag-xml"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=2513"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2513\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=2513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=2513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=2513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}