başlık: RSS'leri okumak ve yeni RSS'ler yazmak
Özet: Nedir RSS (Really Simple Syndication) diye soracak olursanız cevap çok açık olacak "web sitelerini ziyaret etmeden site içindeki yeni içerigi almanin bir yolu"dur derim. Sanırm bunun için en iyi örnek haber siteleri olacaktır. Yeni haber yayınlandıgında siz bu haberi okumak için o siteyi ziyaret etmeniz lazim, ama bir RSS okuyucunuz varsa bu işi sizin adınıza yapacaktır. Makalemizin konusuda gelişmiş bir RSS okuyucu yapmaktansa, RSSleri nasıl okuruz ve basitce nasıl oluştururuz onu incelemek.
RSSlerin zengin içerikli bir sitenin en yeni icerigini ve özetini almak oldugunu ögrendik. Peki nedir bu RSSlerin yapısı derseniz, genellikle cool sitelerin içinde görürsünüz "turuncu RSS" butonu , işte bu butonla genellikle bir XML dosyası alırsınız. RSSler asılda XML yapısında dosyalardır.
RSS okuyucu programlara RSS in adresi verirsiniz yani URI sini o XML dosyasını çeker parse'ledikten sonra gerekli alanları bize gosterir. O hizmeti veren sitedeki yapı ise dinamik olarak RSS dokumanlarini sitenin yeni eklenen içerigine göre yaratıp veritabanına saklamaktır.
Çok çeşitli RSS okuyucuları var, outlook veya browseriniz ile organize çalışan yada kendi başına çalışan. Daha öncede söyledigimiz gibi RSS in kalbi XML standartları. Ya bu XML dosyalarını kendiniz yapacaksınız, yada dinamik olmasını istiyorsanız yaptiginiz bir araç sürekli veritabanını kontrol ederek yenileri otomatik oluşturmalıdır.
Klasik olarak hep verilen haber sitelerini bende örnek vericem bunlardan ülkemizde en yenisi NTVMSNBC'nin yeni vermeye başladıgı RSS hizmetidir. Adresi http://tools.ntvmsnbc.com/rss/news.xml . Sanırm bunu bir arkadaşımız ipucu kısmınada yazmıştı. Tabii bu haberler için, spor ve ekonomi için ayrı dosyalar yaratılmıştır.
İsterseniz ilk, RSSi oluşturan XMLin yapısına bi bakalım:
Gördügünüz gibi ilk olarak bir kanal oluşturulmuş(farklı konulu bilgiler tek dosyada olabilmesi için) ve icine bir image bir çok da items konulmuş. Kanal başlıgı ve çeşitli bilgileri gördüğünüz üzere yazılmıştır. RSS in bir kaç versiyonu bulunmaktadır bu versiyonları sırası ile 0.90, 1.0, 0.91, 0.92 ve son olarak 2.0 dır.
Her versiyonda çesitli degişilikler olmustur, Bunları detayları aşagıdaki gibidir (bu liste http://rss-net.sourceforge.net/documents/version_comparison.html alınmıştır )
Channel in içinde olması gerekenler
Şimdi RSS hakkında yeteri kadar bilgiye sahip olduktan sonra, bunları nasil C# projelerimizde kullanacagımıza bir bakalım. Elbette ki ilk aklınızdan gecen XML dosyasını indirip, parse'lemek ve için gerekli bilgileri almak geçiyordur. Çok dogru ama ben size daha kolay bir öneride bulunacagim, kaynak kodu açık bir .Net library'isi var, ismi RSS.NET. Web adresi : http://rss-net.sourceforge.net/
Ben bu kaynak kodu açık projeyi kullanıcam makalemde. Elbette ki kendimizde parse'leye biliriz ama bu tür toolları kullanmak eger özel bir durum gerektirmiyorsa kesinlikle tercih nedeni olmalıdır.
Gerekli, yani projemize ekleyecegimiz DLL in kaynak kodlarını http://rss-net.sourceforge.net/ adresinden indiriyoruz ve derliyoruz, sitede nedense tar.gz sıkıştırma formatında, ama WinRar sorunsuz acıyor merak etmeyin. Zaten makalenin donwload kısmınıda DLL i ben koyacagım, sizin özel bir degişiklik yapmayacaksanız bu DLL i saf bi şekilde kullana bilirsiniz. İlk olarak yeni projemize bu derledigimiz DLL i solution explorerden "Add reference" ile ekliyoruz. Ekledikten sonra elbette cs dosyamızın uzay ismi tanımladıgımız kısmınada using Rss; eklemeyi unutmuyoruz.
İlk olarak bir hedefdeki RSS nasıl okunur ona bir bakalım isterseniz;
Gördügünüz gibi adres çubugumuz, getir botunumuz, listbox'umuz, labelimiz ve bir pictureboxumuz var.
Listboxda channeldaki itemleri listeyecegiz, labelde description ve link'i, picture boxda ise RSS hizmetini veren yerin resmini goruntulecegiz.
private void button1_Click(object sender, System.EventArgs e) { //tek satır ile okuma işlemini gerçekleştiriyoruz //txt_adres in içinde adresimiz yaziyor //mesela http://tools.ntvmsnbc.com/rss/news.xml RssFeed feed = RssFeed.Read(txt_adres.Text); //Okudugunum RSS in icindeki kanalları aliyoruz //genelde 0. kanal sıklıkla kullanılıyor, farklı konular için farkli RSS dosyaları oluşturuluyor. for(int i=0; i<feed.Channels.Count; ++i) { //yeni kanalı oluşturuyorz RssChannel channel = (RssChannel)feed.Channels[i]; //resimi göstermek için pictureBox1.Height=channel.Image.Height; pictureBox1.Width=channel.Image.Width; //RSS in icindeki resim adresini aliyoruz-unutmamanız gereken sey uzay ismine System.Net yazmanız WebRequest req = WebRequest.Create(channel.Image.Url.ToString()); WebResponse rep = req.GetResponse(); //ve goruntuluyorz pictureBox1.Image = Image.FromStream(rep.GetResponseStream()); //icerigi gorutuluyorz listBox1.DataSource = channel.Items; } }
Diger kısım ise haberlerin üstüne tıklanıldıgında linkin ve açıklamasının görüntülenmesi, bunun icin listbox un SelectedIndexChanged eventini kulanıcaz;
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{ RssItem item = (RssItem)listBox1.SelectedItem;
label2.Text = item.Description + item.Link; }
Ve işte son hali çalışır hali;
Sanırm okuma olayı bu kadar yeterli, sıra da kendi RSS imi nasıl oluşturabilir o var;
private void button1_Click(object sender, System.EventArgs e) { //yeni kanalımız RssChannel channel = new RssChannel(); //kanalın özellikleri channel.Title = textBox1.Text; channel.Description = textBox2.Text; channel.LastBuildDate = Convert.ToDateTime(textBox3.Text); //link uri olmak zorunda Uri lnkc = new Uri(textBox7.Text); channel.Link=lnkc; //sırada kanalın nesnlerini oluşturmak var RssItem item = new RssItem(); //ozellikleri item.Title = textBox4.Text; item.Description = textBox5.Text; Uri lnk = new Uri(textBox6.Text); item.Link = lnk; //ekliyourz channel.Items.Add(item); //bu kadarr.. RssFeed feed = new RssFeed(); feed.Channels.Add(channel); //dosya cıktısı feed.Write(channel.Title+".xml"); }
İşte oluşan XML dosyası:
Elbetteki bu örnek bir nesneli(item) bir kanal için yaptik, bu bir döngü ile item sayısı ihtiyaca gore arttırılabilir. Web'i daha anlamlı kılmak adına yapılan çalışmaları okuyunca, aklıma gelen ilk isim sevgili hocam Assoc. Prof. Dr. Atilla ELÇİ dir. Kendisinin Semantic Web ile ile çalışmaları devam etmektedir. Bu konu ile ilgili çalışmalarını http://cmpe.emu.edu.tr/aelci/ adresinden takip edebilirsiniz.
Herkese çalışmalarında kolaylıklar, ve bol başarı diliyorum...