İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# RSS Reader Uygulaması ve User Control Kullanımı

C# RSS Reader Uygulaması ve User Control Kullanımı
+ - 0

Selamlar, geçenlerde RSS hakkında bir yazı yazmıştım. C# RSS Reader Uygulaması ve User Control Kullanımı yazımda da RSS hakkında hazırladığım bir uygulama hakkında olacak. Aynı zamanda UserControl kullanımına da değineceğim bu yazının bir çok anlamda işinize yarayacağını düşünüyorum. Belki de bir işinize yaramaz. Ama olsun. :D

C# RSS Reader Uygulaması ve User Control Kullanımı

3 hafta kadar önce RSS Feed Nedir? RSS Feed Nasıl Çalışır? yazısını yazmıştım. Bu yazımda da RSS okumayla ilgili hazırladığım bir projeyi sizlerle paylaşmak istedim. Bu projede de ayrıca UserControl kullanımına da değindim. UserControl kullanmanın ne gibi kolaylıklar getirdiğini gözler önüne serecek bir proje oldu bence. Bu projeye bir daha dönüp bakar mıyım bilmem ama en azından bir parçasının birilerinin işine yaracağından eminim. :D Bu uygulamanın çalışmasını gösteren bir videoda yayında olacaktır. Aşağıda görebilirsiniz.

Ayrıca projeyi bittabi github’a yükledim. Buradaki bağlantıya tıklayarak projeye de ulaşabilirsiniz.

C# RSS Reader Uygulaması

Öncelikle bu projede dışarıdan bir açık kaynak bir dll kullandım.  Buradaki bağlantıya tıklayarak ulaşabilirsiniz. Başlangıçta kendi çabalarımla bir şeyler yapmaya çalıştım. Ancak baktım ki bu işi mükemmele yakın bir şekilde hazırlamış biri var. O halde neden kullanmayayım dedim.

Şimdi uygulamamıza geçelim.

Projenin ana dizinindeki DLL’i referans olarak ekleyelim ve namespace’i yazalım.

using CodeHollow.FeedReader;

Videoda ekran tasarımını görmüşsünüzdür.

Load eventimizde listbox nesnesine RSS’ini çekmek istediğimiz siteleri ekleyelim. Ben test etmek için çeşitli siteler seçtim.

        private void Anaform_Load(object sender, EventArgs e)
        {
            // https://github.com/codehollow/FeedReader
            listBox1.Items.Add("https://mustafabukulmez.com/rss");
            listBox1.Items.Add("https://dinamiknetwork.com/rss/");
            listBox1.Items.Add("https://kursbil.com/feed/");
            listBox1.Items.Add("https://figurex.net/feed/");
            listBox1.Items.Add("https://www.hurriyet.com.tr/rss/anasayfa");
            listBox1.Items.Add("https://www.youtube.com/feeds/videos.xml?channel_id=UCguHtRRt-FX2CnxfMW-pW8A");
        }

Burada bu konu hakkında güzel bir proje yapmak isteyenler için bu url’leri kaydedecek bir ekran yapabilirler.

DLL’in ReadAsync() metodunu kullandığımız için satırda await ifadesi kullandık. Yani demek istiyor ki tamamı okuna kadar bekleyelim. Okuma bitince devam ederiz.

        async void Get_RSS()
        {
            string feedUrl = listBox1.Items[listBox1.SelectedIndex].ToString();

            var feed = await FeedReader.ReadAsync(feedUrl);
            var xDocument = XDocument.Parse(feed.OriginalDocument);
            var xNamespace = xDocument.Root.GetDefaultNamespace();
            int index = 0;
            foreach (var item in feed.Items)
            {
                var baseFeedItem = item.SpecificItem;
                string thumbnail = null;
                if (baseFeedItem.Element.Descendants().Any(x => x.Name.LocalName == xNamespace + "thumbnail"))
                {
                    thumbnail = baseFeedItem.Element.Descendants().First(x => x.Name.LocalName == xNamespace + "thumbnail").Attribute("url").Value;
                }
                index++;
                RSS_TekHaber rss = new RSS_TekHaber();
                rss.lbl_index.Text = index.ToString() + ".";
                rss.lbl_baslik.Text = ClearText(item.Title);
                rss.txt_aciklama.Text = ClearText(item.Description);
                rss.link_lbl_url.Text = item.Link;
                rss.lbl_Tarih.Text = item.PublishingDateString;
                rss.pic_gorsel.ImageLocation = thumbnail;
                rss.Margin = new Padding(0, -7, 0, 0);
                flowLayoutPanel1.Controls.Add(rss);
            }
        }

Listbox’tan seçili olan url’yi aldık.  Asenkron olarak url’yi okuduk. Okudğumuz XML veriyi parse ettik ve namespace’ini aldık. Foreach döngüsü ile XML içerisindeki nesneler arasında gezinmeye başladık.

                var baseFeedItem = item.SpecificItem;
                string thumbnail = null;
                if (baseFeedItem.Element.Descendants().Any(x => x.Name.LocalName == xNamespace + "thumbnail"))
                {
                    thumbnail = baseFeedItem.Element.Descendants().First(x => x.Name.LocalName == xNamespace + "thumbnail").Attribute("url").Value;
                }

Bu kısım RSS’de sunulmuş olan yazıların görsellerinin url’sini alabilmemize yarıyor.

C# User Control Kullanımı

  RSS_TekHaber rss = new RSS_TekHaber();

Bu benim hazırladığım bir usercontrol nesnesidir. Kodun devamında user kontrol içerisindeki modifiers özellikleri public olan nesnelere, RSS XML içerisinden istediğim bölümleri alarak yazıyoruz.

C# User Control Kullanımı

NOT: En dıştaki kenar çizgileri de bir labeldir. :D

Bir haber/makaleye ait bilgilerin hepsi alındıktan sonra kod oluşturduğum usercontrol nesnesini anaformdaki flowlayoutpanel nesnesine ekliyorum. Flowlayoutpanel sayesinde nesnelerin ekranda duracakları koordinatları ve videoda gördüğünüz scrollbar ile uğraşmak zorunda kalmıyorum.

rss.Margin = new Padding(0, -7, 0, 0);

Bu kod sadece mavi dikey çizgilerin arasında boşluk görünmesin, yukarıdan aşağıya tek çizgiymiş gibi görünsün diye şey ettiğim bir şeydi :D Timeline şeklinde bir görüntü olsun diye :D

        string ClearText(string text)
        {
            try
            {
                return text.Replace(".", "").Replace("<p>", "").Replace("</p>", "").Replace("<a>", "").Replace("</a>", "").Replace("’", "").Replace("[…]", "")
                     .Replace("<a rel=", "").Replace("nofollow", "").Replace("href=", "").Replace(">", "").Replace('"', ' ')
                     ;
            }
            catch (NullReferenceException ex)
            {
                return "Açıklama Bulunamadı";
            }
        }

Bu metotta açıklama kısmında gelen ve richtextbox’da görünen ve görünmesini istemediğim şeyleri temizlemek içindir. Başka bir esprisi yok.

Son olarak eğer resim gelmiş ise videoda görebildiğiniz gibi resme çift tıklayınca büyük bir formda geniş şekilde görünmesi için bir işlem daha mevcuttur.


C# RSS Reader Uygulaması ve User Control Kullanımı yazımda bu kadar arkadaşlar. Diğer proje yazılarımızda görüşmek dileği ile. Yakın zamanda bir kaç proje daha gelecek. Şuanda hazırlık aşamasındalar.

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.

Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersin projesine de bu bağlantı ile ulaşabilirsiniz.

Sağlıcakla ve kodla kalın….

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)