Forumda bir çok konu açılmış yazılmış çizilmiş bir çok soru sorulmuş fakat tam bir çözüm yok.

Bu makale umarım faydalı olur.

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

1- ) ASP ile xml kaynağından veri çekmek

Her xml servisi sayfasında başlangıç ve bitiş değerleri vardır örn:
<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 <video></video> 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.

2- ) 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 kodlar dı 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.

Örn :
[PHP]
<%
strdeger = "img src\=resim1.jpg"
strdeger = "halit \= dediki \""naber nasılsın\"""
strdeger = ""
%>
[PHP]

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