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;
[code]
<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>
[/code]
dikkat edilirse videolar arasında sıralanıp gider buna uygun bir bot şöyle olur.
[php]
<%
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
%>
[/php]
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 ;
[code]
<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> Vaktinden önce anlamanın şaşkınlığı mı<br> Vaktinde anlamanın sevinci mi<br> Ya da biraz geç kalmanın<br> O gereksiz tedirginliği mi<br> 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>
[/code]
Burada şuna dikkat edeceğiz benzersiz noktalar bulmak
[code]
<font size=’3′><b>
[/code]
bu şiirin başlık kısmı ve sayfada böyle bir kod daha yok bu iyiye işaret bitiş yeride önemli tabi
[code]
</b></font><br><br>
[/code]
buda benzersiz. Başlığı yakaladık sıra geldi şiire
[code]
</b></font><br><br>
[/code]
bu satırı şiirin başlangıç noktası olarak aldık
[code]
<br><br><b>Eklenme Tarihi:</b>
[/code]
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
[php]
<%
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
%>
[/php]
ServerXMLHTTP ile veri çekme
[php]
<%
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
%>
[/php]
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:
[php]
<%
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)
%>
[/php]
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
[php]
<%
strdeger = "img src\=resim1.jpg"
strdeger = "ibrahim \= 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.
Öncelikle anlatım için çok teşekkür ederim…
benim bi sorum olacak bi html sayfasından veri çekmeye çalışıyorum iki tane div tagı arasından çekmem gerek ama tag içinde ve \n gibi durumlar söz konusu bu taglar arasındaki veri nasıl alabilirim…
Asp bot yapını çok aradım ve sizin gibi açıklayıcı bir örnek göremedim.
Hem XML hem de HTML kaynaktan veri almayı açıklamışsınız. Gerçekten çok teşekkür ederim.
İyi çalışmalar.
Merhaba;
Haber sitelerinden, haber çekmek için aynı yolumu izleyeceğiz, yoksam daha farklı mı?
arkadaşım teşekkür ederim ben bot için değil başka amaçla kullanıcam herkese iyi calismalar
Allah razı olsun diyorum başka bişey demiyorum
Teşekkürler gayet başarılı.
Ben aldğım paket halindeki veriden gereksizleri süzdürüp kullanıyordum, burda ise paketteki tekrarlı değişkenleri döngüye sokup herbirine ayrı işlem uygulatma olanağımızın da olduğunu gördüm.
Tekrar teşekkürler.
Server nesnesi, ASP 0178 (0x80070005)
İzin denetimi sırasındaki Server.CreateObject çağrısı başarısız. Bu nesneye erişim engellendi.
/vericek/default.asp, line 3 şeklinde bi hata alıyorum asptear 1.0 yüklü
Elinize sağlık hocam aspde anlatmanız çok yararlı olmuş teşekkürler.
Hocam ben çalıştıramadım. Asp de yeni sayılırım. Hostta asptear yüklü mü nasıl kontrol edecegiz?
Çok uğraştım bu botlarla falan bir türlü istediğim verimi alamadım..
arkadaslar asp bot ile kendi sayfama türkiyedeki firmalari yüklemek istiyorum aceba bu mümkünmü
ben verdiğiniz örneği inceledim.. dediğiniz gibi özel karakter olan ” ve = \ koydum ama bir sonuç alamadım.. asp hata veriyor…neden acaba
ben adres girilen sitenin
meta name=”description” content çekmek istedim ama olmuyor.. tırnak işaretini asp hata olarak gösteriyor..
ben tam olarak bir türlü yapamadım. şöyle örnek bir kod koysanız güzel olurdu bence.
asp ile youtube bot ya da youtube xml den gelen verinin içinde sadece istediğimi nasıl .mdb ye kaydedebilirim. ya da tavsiye edeceğiniz başka ne var.
video sitesinin içine içeriği youtubeden alacağım kodlarla tek tek kaydetmek çok zaman alıyor bunu toplu ya da daha basit asp ile nasıl yapabiliriz
kaydedeceğim yer acsses veri tabanı .mdb