Gökmen Korkmaz’ın Code Günlüğü
RSS ikon Email ikon Anasayfa ikon
  • Asp ile Bot Yapımı

    03 Haziran 2009 admin Yorum yok

    Merhaba arkadaşlar. Öğrenmek isteyen arkadaşlara yardımcı olması için ufak bir bot örneği hazırladım.
    Örnek olarak yazdığım bot haberler.com adresinden ekonomi haberlerini çekmekte. Ben database veya herhangi bir yere kayıt yaptırmadım. Sadece ekrana yazdırdım ama siz dilerseniz veriyi database’e de yazdırabilirsiniz.
    Bot hazırlarken öncelikli olarak hangi siteden veri çekeceksek onunla ilgili olan rss beslemesinin adresini ediniyoruz. Benim yazdığım botta kullandığım rss beslemesi:


    http://rss.haberler.com/rss.asp?kategori=ekonomi
    dir.
    Şimdi kodlama kısmına geçelim ve bakalım neler yapıyormuşuz.
    1.Adım (veriyi çekmek)
    Set createxml = Server.CreateObject("msxml2.DOMDocument")
    createxml.async = False
    createxml.SetProperty "ServerHTTPRequest", True
    createxml.Load("http://rss.haberler.com/rss.asp?kategori=ekonomi")
    Set xmllist = createxml.getElementsByTagName("item")
    Set createxml = nothing

    Burada cretatexml adında bir msxml2.DOMDocument nesnesi yaratıyor asynchronous’u false olarak ayarlıyoruz.sonra ServerHTTPRequest özelliğinin olduğunu set ediyoruz. Load ile verileri alıp (array) xmllist adlı yeni objemize atıfta bulunuyouz ve createxml’i yok ediyoruz. Elimizde artık rss’teki bilgiler mevcut ve objemize yüklenmiş durumda.
    2.Adım (Veriyi pars etmek)
    for each xmlveri in xmllist
    title = xmlveri.childNodes(1).text 'xmlveri.selectSingleNode("title") olarakda kullanılabilir
    ozet = xmlveri.childNodes(2).text
    link = xmlveri.childNodes(3).text
    next

    Burada ne yapıyoruz; Eğer rss beslemesinin kaynak kodlarını incelerseniz şöyle bişi görürsünüz:
    <item>
    <category></category>
    <title>Piyasalarda Bugün</title>
    <description>İMKB İşlem Gören Hisse Senetleri, Bugün Ortalama Yüzde 4,38 Oranında Değer Kazandı.</description>
    <link>http://www.haberler.com/piyasalarda-bugun-12-haberi/</link>
    <pubDate>20.05.2009 18:49:00</pubDate></item>
    <item>

    Hatırlarsanız ki 1.Adım’da her itemin tüm içeriğini değişkene atamıştık. Orada bahsi geçen item işte budur. Aslına bakarsanız databasedeki satırdır. Altında bulunanlar ise satırın sütunlarıdır gibi…
    title = xmlveri.childNodes(1).text yazdığımız yerde arraydaki 1. değişken olan (0 dan başlar) title’ı kendi title değişkenime atıyorum ve kalan alanları için de aynı işlemi gerçekleştirerek tüm veriyi pars etmiş oluyorum.

    Geriye kaldı ana haber metnine erişmek. İşte burası biraz sıkıntılı zaten. Çünkü çekeceğimiz linkte bir sürü html tagı bulunmakta ve bunların hepsini temizlemekte bize düşüyor. Ta ki salt olarak haber metni kalıncaya değin.
    3.Adım Kodlar
    baslangic = "<p>"
    bitis = "<p>"
    Set createxml = Server.CreateObject("msxml2.DOMDocument")
    createxml.async = False
    createxml.SetProperty "ServerHTTPRequest", True
    createxml.Load("http://rss.haberler.com/rss.asp?kategori=ekonomi")
    Set xmllist = createxml.getElementsByTagName("item")
    Set createxml = nothing
    for each xmlveri in xmllist
    title = xmlveri.childNodes(1).text
    ozet = xmlveri.childNodes(2).text
    link = xmlveri.childNodes(3).text
    response.write("<a href='" & link & "' title='" & title & "'>" & title & "</a><br />" & ozet & "<br /><br />")
    Set xmlhabermetni = Server.CreateObject("MSXML2.XMLHTTP")
    xmlhabermetni.open "get", link, false
    xmlhabermetni.send
    habermetni = xmlhabermetni.ResponseText
    Set xmlhabermetni = nothing
    for i = 0 to 2
    'do while not inStr(habermetni, baslangic) = 0
    baslangicsayi = inStr(habermetni, baslangic)
    bitissayi = inStr(baslangicsayi+3, habermetni, bitis)
    response.write baslangicsayi & " " & bitissayi & " " & "<br /><br />"
    haber = mid(habermetni, baslangicsayi, bitissayi - baslangicsayi)
    bhaber = bhaber & haber
    habermetni = replace(habermetni, haber, "")
    'loop
    i = i + 1
    next
    response.write bhaber&"<br /><br />"
    next
    Set xmllist = nothing

    işte benim çözümüm bu şekilde oldu tam olarak doğru olmayabilir. Siz biraz uğraşırsanız tüm html taglarını temizleyip haberi de kendi datanıza kaydedebilirsiniz.

    Yorum yap