herkesin son günler de daha çok merak ettiği ve neredeyse bot yapımını öğrenmek için sıraya girdiği şu günlerde bundan daha güzel bir makale yazamazdım diye düşünüyorum. ilk önce bot nedir ve ne işe yararı kısaca anlattıktan sonra gerekli bilgileri vereceğim.

bot kısaca ve öz olarak sanal alemde dolaşıp, bütün sitelerin içeriğini belleğine yazan bir türden solucan gibi binevi. bu makale umarım faydalı olur.

ASP ile bot yapmak farklı şekillerde olabilir, önemli olan veri çekilecek url nin text biçimidir.

ASP ile xml kaynağından veri çekmek

Her xml servisi sayfasında başlangıç ve bitiş değerleri vardır örnek;

<videolar>
<video>
<resimyolu>orn1.jpg</resimyolu>
<embedkodu>orn1.flv</embedkodu>
<filmadi>orne1filmi</filmadi>
</video>
<video>
<resimyolu>orn2.jpg</resimyolu>
<embedkodu>orn2.flv</embedkodu>
<filmadi>ornek2filmi</filmadi>
</video>
</videolar>

dikkat edilirse videolar arasında sıralanıp gider buna uygun bir bot şöyle olur.

<%
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.Async = False
objXML.SetProperty "ServerHTTPRequest", True
objXML.ResolveExternals = True
objXML.ValidateOnParse = True
objXML.Load("http://www.orneksiteadresi.com/xmlservice.xml") ' Xml in alınacağı adres

Set objRoot = objXML.documentElement
Set objItems = objRoot.getElementsByTagName("video")

Dim objItem
For Each objItem in objItems

strResimYolu = objItem.selectSingleNode("resimyolu").Text
strEmbedKodu = objItem.selectSingleNode("embedkodu").Text
strFilmAdi = objItem.selectSingleNode("filmadi").Text

'For next döngüsü içinde sql sorgularını çalıştırabilirsiniz db nize göre uyarlayın
'yada sadece gösterim yapın tercih sizin
'rs.Addnew
'    rs("resimyolumuz") = strResimYolu
'    rs("embedkodumuz") = strEmbedKodu
'    rs("filmadimiz") = strFilmAdi
'rs.Update

Next
%>

Bu işlem için ( xml servisinden veri çekmek için ) Microsoft.XMLDOM bileşenini kullandık.

Yukarda anlatılan en basit yoldan ve zahmetsizce veri çekme yolu idi ve sadece xml servisi için kullanılabilir %99.

ASP ile HTML kaynağından veri çekmek

En zoru ise html yada asp yada php sayfadan (hiç farketmez sonuçta tarayıcıya salt html kodları gönderilmektedir ki bazı arkadaşlar bu konuda hataya düşüyorlar aceba php sayfadan veri çekmek ile asp sayfadan veri çekmek farklımı diye, hayır farketmez) veri çekmektir. Sebebi çok karmaşık bir kod dizilimi görebileceğimizdendir neyi nerden nasıl alırız iyi değerlendirmek lazım. Sayfayı analiz ettik kaynak koduna bakarak ve işimize yarar kısmı olan şu kodlardı mesela ;

<title>Acaba Şiiri , oku , canlı şiir dinle</title>
<font size='3'><b>Acaba</b></font><br><br>Dönelim<br>Döndürsün bizi<br>Kalbin akıp giden bulutlara benzeyen sesi<br>Yağmursuz bir yağmura açılmış kapılardan<br>Ve akılda kalan bir yokuştan<br>Ve yalnız çocuklara özgü o sonsuz sinema koltuklarından<br>Ve çocukluktan<br>Dönelim<br>Dönelim mi biz<br>Gençlikten, oralardan<br>Mutluluğu bir kabuk gibi saran mutsuzluklardan<br>Dönelim mi acıya<br>Acıya, büyük acıya<br>Ve soralım mı acaba<br>Ey büyük yalnızlık insansan eğer<br>Bir kaya<br>Dalgalar yalarken onu<br>O bakarken kaskatı kalabalıklara<br>Ah, kalbin bulut bulut akan sesi.<br><br>Bütünüyle bir semte benziyor Ruhi Bey<br>Binlerce, on binlerce kedinin hep birden kımıldadığı<br>Kedilerden örülmüş bir semte<br>Ve soğuk bir tuvalde yerini bulamamış renkler gibi<br>Soğuk ve ayakta tutan çelişkileri<br>Bir görünümden bir başka görünüme kolayca sıçranan<br>Her şeyin, ama herşeyin çok dıştan farkedildiği<br>Eh belki de bir satır fazlalığı ya da bir satır eksikliği<br>Belki de genç bir şairden ödünç alınan.<br><br>Yürüyor mu, yürümeyi mi düşünüyor Ruhi Bey<br>Düşünmesi daha mı sonra koyuluyor yola<br>Nereye gidecek ama, nereye varacak sanki<br>Yoksa bir oyun tadı mı buluyor bunda<br>Oyundan atılmaktan korkmayan bir oyuncu gibi<br>Boşvermiş de sanki oyunun kurallarına<br>Üstelik son bölümde, perdenin kapanmasına<br>Azıcık vakit kalmış<br>Ya da vakit var daha. Ama ne çıkar<br>Gövdenin yazgıya başkaldırması mı<br>Ruhi Beyin<br>Başkaldırması mı yoksa<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vaktinden önce anlamanın şaşkınlığı mı<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vaktinde anlamanın sevinci mi<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ya da biraz geç kalmanın<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;O gereksiz tedirginliği mi<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hangisi<br><br>Ama belli ki sonundayız her şeyin<br>En sonunda.<br><br><b>Eklenme Tarihi:</b> 26.06.1999<br><br><b><a href='?sayfa=sair&sair_id=71&sair=Edip Cansever'>Edip Cansever</a></b><br><br>  <tr style="font-family:tahoma,verdana">
<td colspan="2">Puan: <b>6.44/27</b> Oy<br><font color="#333399">
Şiire puan vermek için:<br>
Aşağıdaki kodu sağındaki kutuya girip, puanınızı seçin ve Gönder butonunu tıklayın.<br>

Burada şuna dikkat edeceğiz benzersiz noktalar bulmak

<font size='3'><b>

bu şiirin başlık kısmı ve sayfada böyle bir kod daha yok bu iyiye işaret bitiş yeride önemli tabi

</b></font><br><br>

buda benzersiz. Başlığı yakaladık sıra geldi şiire

</b></font><br><br>

bu satırı şiirin başlangıç noktası olarak aldık

<br><br><b>Eklenme Tarihi:</b>

bunuda bitiş noktası olarak aldık ve şiir de tamam bu noktaları yakaladıysak planı kafamızda kurduk ve kodlamaya geçelim.

Unutmadan söylemek gerek , bazı sayfaların kodlama dilinden dolayı (.asp , php v.b değil) utf-8 yada iso-8859-9 olması veri çekmede kullanacağımız bileşeni değiştirebilir aspTear yada MSXML2.ServerXMLHTTP arasından seçim yapmamız gerekebilir, karakter hatası verip vermediğini deneyerek kendimiz bulacağız tabi.

aspTear bileşeni ile veri çekme

<%
strVeriCekilecekAdres = "http://orneksiteadresi.com/ornek.asp"
Set stTear = Server.CreateObject("Softwing.AspTear")
stTear.FollowRedirects = True 'Bazı sayfalar başka sayfaya otomatik yönlendirilmiş olabilir onun için lazım

blnAlinanVeri = stTear.Retrieve(strVeriCekilecekAdres,2, "","","") 'Veri Aldık değişkene atadık

Set stTear = Nothing
%>

ServerXMLHTTP ile veri çekme

<%
strVeriCekilecekAdres = "http://orneksiteadresi.com/ornek.asp"

Set oXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oXMLHttp.open "GET", strVeriCekilecekAdres, False
oXMLHttp.Send()
blnAlinanVeri = oXMLHttp.responseText 'Veri Aldık değişkene atadık
Set oXMLHttp = Nothing
%>

Veri Çekmeye anladık şimdi gelen veriyi işleyelim bunun için RegExp kullanacağız.
Örnek çalışma aspTear ve RegExp ile yapılmıştır.
Yukardaki sayfa örneği için kodlayalım , VeriBul ve veriCek Functionlar ı sapittir biz degişkenler üzerinde değişiklikler yapmak zorunda kalırız:

<%
Function VeriBul(BaslangicDegeri,BitisDegeri,Verimizden)

Set RegEx = New RegExp

With RegEx
.IgnoreCase = True
.Global = True
.Pattern = "(" & BaslangicDegeri & ")(.+?)(" & BitisDegeri & ")"
End With

Set Sonuc = RegEx.Execute(Verimizden)

For Each i In Sonuc
VeriBul =  i.SubMatches(1)
Next

If IsEmpty(VeriBul) Then VeriBul = "Sonuc Yok"
Set RegEx = Nothing
Set Sonuc = Nothing

End Function

Function veriCek(Adresten)

On Error Resume Next
Set strTear = Server.CreateObject("Softwing.AspTear")
strTear.FollowRedirects = True
veriCek = strTear.Retrieve(Adresten,2, "","","")
Set strTear = Nothing

End Function

strDeger1 = "<font size\='3'><b>"
strDeger2 = "</b></font><br><br>"
strDeger3 = "</b></font><br><br>"
strDeger4 = "<br><br><b>Eklenme Tarihi:</b>"

strDeger5 = "<title>"
strDeger6 = "</title>"

HTMLalAdresten = veriCek("http://orneksiteadresi.com/ornek.html")

strBaslikBul = VeriBul(strDeger1,strDeger2,HTMLalAdresten)
strSiiriBul = VeriBul(strDeger3,strDeger4,HTMLalAdresten)

strTitleBul = VeriBul(strDeger5,strDeger6,HTMLalAdresten)

Response.Write(strBaslikBul)
Response.Write("<hr>")
Response.Write(strSiiriBul)
Response.Write("<hr>")
Response.Write(strTitleBul)
%>

ve sonuç : şiir başlığını , şiiri , sayfa title ını aldık ,
strDeger lerde dikkat etmemiz gereken hususta değişkenin içine giren değerlerde
( = ve ” ) işaretleri RegExp de özel karakterler olduğu için başına \ işareti koymak gerekir.
Örnek

<%
strdeger = "img src\=resim1.jpg"
strdeger = "ibrahim \= dediki \""naber nasılsın\"""
strdeger = ""
%>

Anlamadığınız yerler hakkında uzunca düşünün örnek functionları kullanın sizde kolayca Bot yazabileceksiniz.