-
Asp ile Bot Yapımı
03 Haziran 2009 Yorum yokMerhaba 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



Son Yorumlar