Linq ile veri madenciligi değil veri hırsızlıgı

23. Haziran 2009

Bakmayın veri hırsızlıgı dediğime ... Konumuz sahibinden feedlerini sitemizde yayınlamak. Bazen rss ler istedigimiz gibi formatta olmaz. Örnegin ben www.vasita.net i yaparken vitrin kısmına ayırcak zamanımız olmadıgı için sahibindeki hit ilanları çekip yayınlamak istedim. Fakat sorun olarak karşıma vasıta ilanlarının imageları istedigim formatta gelmiyordu ve onları saf almam gerekiyordu.

 Bakalım nasıl almışız :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Linq;

/// <summary>
/// Summary description for Sahibinden
/// </summary>
public class Sahibinden
{
 public Sahibinden()
 {

 }

   //ödünç almak istedigimiz tipleri belirliyoruz
    public class feedDefinition
    {
        public string Name { get; set; }
        public string Url { get; set; }
        public string Img { get; set; }
    }

   //linq sorgumuzu hazırlıyoruz... path vermemiz yeterlidir bu sorguya. Linq to xml
    public List<feedDefinition> loadFeed(string path)
    {
        XDocument feedXml = XDocument.Load(path);
        var feeds = from feed in feedXml.Descendants("item")
                    select new feedDefinition
                    {
                        Name = feed.Element("title").Value,
                        Url = feed.Element("link").Value,

                        //Image istedigimiz formatta olmadığı için 2 metin arası okuyup veriyi süzüyoruz.
                        Img =  getImage(Convert.ToString(feed.Element("description").Value))

                    };
        return feeds.Take(5).ToList();
    }

    // Ödünç almak istediğiniz verinin başlangıcını ve son noktasını biliyorsanız  Bundan iyi çalışan kod bulamazsınız :)
    public string getImage(string key)
    {
        string ilkmetin = "<img src=" ;
        string ikincimetin = "border=";
        string sonuc;
        int nIndex = 0;
        int nIndexStart = 0;
        int nIndexEnd = 0;

        nIndex = key.IndexOf(ilkmetin, nIndex);
        nIndexStart = Find(ilkmetin, nIndex, key);
        nIndexStart = nIndexStart + ilkmetin.Length;
        nIndexEnd = key.IndexOf(ikincimetin, nIndex);
        sonuc = key.Substring(nIndexStart, nIndexEnd - nIndexStart);
        return sonuc;
    }
    private static int Find(string strSearch, int nStart, string rawHtml)
    {
        try
        {
            return rawHtml.IndexOf(strSearch, nStart);
        }
        catch (Exception)
        {

            int hata = 0;
            hata += 1;
            return hata;
        }
    }
}

 

Sayfamızdanda loadFeed(string türünde pathi yollamak yeterli olacaktır)

 Takıldıgınız biryer olursa veri ödünç almakla veya linq ile ilgili burdan sorabilirsiniz...

8 kişi tarafından 3.8 olarak değerlendirildi

  • Currently 3,75/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Linq ,

Yorumlar

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading