hızlı veri çekmek için tek çözüm : XMLHTTP
Arkadaşlar asptear ı biliyorsunuz rahat veri çekmek için kullanılıyor..Ama benimde çok yaşadığım olay 3-4 tane aynı anda çalıştırılınca bekletiyor ve hızlı açılmıyor..
bunun için size hızlı bir alternatifi olan ve kodlaması nerdeyse aynı olan ServerXMLHTTP bileşeni sayesinde veri çekmek için bilgiler vericem :
Önce bir örnek olarak herhangi bi siteyi xmlhttp.asp dosyasından açarak nası çekildiğini gösterelim..
Kod:
<%
vericekilecekadres = "http://www.domain.com/sayfa.asp"
Dim objXmlHttp
Set objXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXmlHttp.Open "GET" , vericekilecekadres , false
objXmlHttp.sEnd
alinanveri = objXmlHttp.ResponseText
Set objXmlHttp = Nothing
response.write alinanveri
%>
üstteki kodu xmlhttp.asp ye yapıştırıp açtığımızda veri çekilecek adresin tüm kaynak kodunu(bi sayfaya sağ tıklayın kaynak kodunu yani html kodlarını gösterdiğimizdeki) alır ve yayınlar..
üstte gösterdiğim bi sayfayı tamamen çekmek için kullanılıyor.. isteğe göre veri çekmek için yardımcı nesneler var onları tanıtalım.. :
left
right
mid
instr
trim
lcase
ucase
len
split
Bu nesneleri örnek ile açıklayalım.
Left kullanımı :
Kod:
<%
isim = "forum.iyinet.com"
yazdir = left(isim,6)
response.write yazdir
%>
Açıklama(Left) : Kullanımdaki gibi verilen rakamı soldan başlayarak karakter sayısına kadar olan yazıyı alır.Bu örnekte ekrana forum.iyin olarak çıkar.
Right kullanımı :
Kod:
<%
isim = "forum.iyinet.com"
yazdir = right(isim,6)
response.write yazdir
%>
Açıklama(right) : Sağ tarafdan başlayarak verilen rakam kadar olan yazıyı alır.Bu örnekte ekrana iyinet.com olarak bir yazı çıkar.
Mid kullanımı :
Kod:
<%
isim = "forum.iyinet.com"
yazdir = mid(isim,2,5)
response.write yazdir
%>
Açıklama(mid) : Sol taraftan 2. ve 5. karakter arası olan yazıları alır.Çıktısı orum.iyine gibi olaraktır.Eğer 2. sayı olan(bu örnekte 5 rakamı) girilmezse o karakterden başlayarak değerin sonuna kadar olan yazıyı alır.
Instr kullanımı :
Kod:
<%
isim = "forum.iyinet.com"
yazdir = Instr(isim,"com")
response.write yazdir
%>
Açıklama(Instr) : Baştan başlayarak "com" diye belirmiş olduğumuz yazıya kadar olanki verinin karakter sayısını alır.Bu örnek te çıktısı 13 şeklindedir.Bunun nedeni "forum.iyinet." değerinde 13 tane karakter vardır.
Trim kullanımı :
Kod:
<%
isim = " forum.iyinet.com "
yazdir = Trim(isim)
response.write yazdir
%>
Açıklama(Trim) : Veri'deki sağdan ve soldan olan bütün boşlukları siler.Bu örneğimizde çıktısı "forum.iyinet.com" olarakdır.Sağdan ve soldan bütün boşluklar atılmış hali.
Ucase kullanımı :
Kod:
<%
isim = "forum.iyinet.com"
yazdir = Ucase(isim)
response.write yazdir
%>
Açıklama(Ucase) : Veri'deki bütün karakterleri büyük harf olarak çıkartır.Örneğimizdeki değerin çıktısı FORUM.IYINET.COM olaraktır.
Lcase kullanımı :
Kod:
<%
isim = "FORUM.iyinet.com"
yazdir = Lcase(isim)
response.write yazdir
%>
Açıklama(Lcase) : Veri'deki bütün harfleri küçük harfe dönüştürür.Ucase'in tam tersidir.Örnekteki çıktısı forum.iyinet.com şeklindedir.
Len Kullanımı :
Kod:
<%
isim = "forum.iyinet.com"
yazdir = Len(isim)
response.write yazdir
%>
Açıklama(Len) : Değerin kaç karakterden oluştuğunu alır.Örnekdeki çıktısı 16 şeklindedir.Çünkü forum.iyinet.com yazısı 16 karakterden oluşmaktadır.
Split kullanımı :
Diyelimki Querystring alıyorsunuz.Sayfamız şöyle geliyor.
sayfa.asp?1234|1234
Burada 2 adet ID numarası geçiyor.Bunların ismi yok fakat biz bunları SPLıT aracılığı ile alıp işletebiliriz.
Kullanımı şöyledir.
Kod:
<%
obje = split(obje,"|")
obje(0)
obje(1)
%>
Obje dediğimiz değişkenimizdir.Objenin içeriğindeki "|" lerin geçtiği yerlerden itibaren bölme işlemi yapıyor ve obje(0) yazarak bunu yazdırıyoruz.
"|" işareti yerine istediğinizi kullanabilirsiniz.Mesela "-" bile kullanırsınız.
Kısaca örneğimizi yazalım.Sayfamızın ismi sayfa.asp olsun ve şu şekilde açılsın "sayfa.asp?1234-1234"
Buradaki 2 adet ID numarası alıp değişkenler ile yazdıralım.
Kod:
<%
obje = request.querystring
obje = split(obje,"-")
response.write obje(0) & "<br>"
response.write obje(1) & "<br>"
%>
"sayfa.asp?1234-1234" Böylece bu sayfa açıldığında çıktısı :
1234
1234
şeklinde olacaktır.Split ile böylece sayfalarınızda stringlere ad vermeden yada gizleyerek rahatça kullanabilirsiniz.
Örnek olarak birde size döviz kurlarını almak için kod vereyim :
Kod:
<%
strAdres = "http://www.tcmb.gov.tr/kurlar/today.html"
Public Function VeriAl(strGelen)
Set objVeriAl = Server.CreateObject("Microsoft.XMLHTTP" )
With objVeriAl
.Open "GET" , strGelen, FALSE
.sEnd
VeriAl = .Responsetext
End With
SET objVeriAl = Nothing
End Function
strVeri = VeriAL(strAdres)
iDolar=InStr(strVeri,"USD" )
strDolarAlis=Mid(strVeri,iDolar+50,10)
strDolarSatis=Mid(strVeri,iDolar+51,10)
iEuro=InStr(strVeri,"EUR" )
strEuroAlis=Mid(strVeri,iEuro+38,11)
strEuroSatis=Mid(strVeri,iEuro+50,11)
%>
<html>
<title>TCMB Döviz Kurları - Kaynak : forum.iyinet.com</title>
<body>
<table width="20%" border="0" cellspacing="0" style="border: 1px solid #D7D7D7">
<tr>
<td nowrap width="99%" bgcolor="#E1E1E1" colspan="2"><strong>
<font face="Verdana"><b><font color="#FF0000" style="font-size: 7pt"> DOLAR</font></b></font></strong></td>
</tr>
<tr>
<td nowrap width="7%"><font face="Verdana" style="font-size: 7pt; ">ALIş</font></td>
<td width="92%">
<div align="left"><font face="verdana" size="1">
<p align="right"> <%=strdolaralis%> YTL
</font></div></td>
</tr>
<tr>
<td nowrap width="7%"><font face="Verdana" style="font-size: 7pt; ">SATIş</font></td>
<td width="92%">
<div align="left"><font face="verdana" size="1">
<p align="right"> <%=strdolarsatis%> YTL
</font></div></td>
</tr>
<tr>
<td colspan="2" style="border-top: 1px solid #C0C0C0"> </td>
</tr>
<tr>
<td colspan="2" bgcolor="#E1E1E1"><strong><font face="Verdana"><b>
<font color="#0099CC" style="font-size: 7pt"> </font><font color="#FF0000" style="font-size: 7pt">EURO</font></b></font></strong></td>
</tr>
<tr>
<td nowrap width="7%"><font face="Verdana" style="font-size: 7pt; ">ALIş</font></td>
<td width="92%">
<p align="right"><font face="verdana" size="1"> <%=streuroalis%> YTL </font></td>
</tr>
<tr>
<td nowrap width="7%"><font face="Verdana" style="font-size: 7pt; ">SATIş</font></td>
<td width="92%">
<p align="right"><font size="1" face="verdana"><%=streurosatis%> YTL</font><font size="1">
</font> </td>
</tr>
</table>
</body>
</html>
XmlHTTP Türkçe karakter problemini çözmek için :
XmlHTTP ile veri çektiğiniz zaman türkçe karakter ler düzgün çıkmamaktadır.Bunun nedeni veriyi alırken "text" yöntemi ile alınıyor olması.Bunun yerine "Body" biçiminde alıcaz.Fakat bu veriyi ekrana yazdırırken sadece ? çıktığını görürsünüz.Bunun nedeni aldığınız verinin Binary olmasıdır.Bu binary'yi bir fonksiyon ile Text e çevirebilirsiniz.Bu şekilde kullanılırsa XmlHTTP de Türkçe karakter problemi ortadan kalkmaktadır.
Normalde XmlHTTP ile veri alınırken :
Kod:
<%
strURL = "http://www.iyinet.com/"
Dim objXmlHttp
Set objXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXmlHttp.Open "GET" , strURL , false
objXmlHttp.sEnd
strHTML = objXmlHttp.ResponseText
%>
gibi bir kod kullanırız.Bu kod ile veri alırsanız Türkçe karakterlerinizin ? şeklinde çıktığını görürsünüz.Bunun yerine BinaryToText isminde bir fonksiyon kullanacağız.
Fonksiyonumuz aşağıdadır.
Kod:
<%
Private Function BinaryToString(Binary)
Dim cl1, cl2, cl3, pl1, pl2, pl3
Dim L
cl1 = 1
cl2 = 1
cl3 = 1
L = LenB(Binary)
Do While cl1<=L
pl3 = pl3 & Chr(AscB(MidB(Binary,cl1,1)))
cl1 = cl1 + 1
cl3 = cl3 + 1
If cl3>300 Then
pl2 = pl2 & pl3
pl3 = ""
cl3 = 1
cl2 = cl2 + 1
If cl2>200 Then
pl1 = pl1 & pl2
pl2 = ""
cl2 = 1
End If
End If
Loop
BinaryToString = pl1 & pl2 & pl3
End Function
%>
Bu fonksiyonu kullanmanız yeterli olmuyacaktır.Veri alırken üstte aldığımız gibi "ResponseText" yerine "ResponseBody" şeklinde alınması gerekiyor.Hepsini tek bir kod ile birleştirmek gerekirse :
Kod:
<%
strURL = "http://www.iyinet.com/"
Dim objXmlHttp
Set objXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
objXmlHttp.Open "GET" , strURL , false
objXmlHttp.sEnd
strHTML = objXmlHttp.ResponseBody
Private Function BinaryToString(Binary)
Dim cl1, cl2, cl3, pl1, pl2, pl3
Dim L
cl1 = 1
cl2 = 1
cl3 = 1
L = LenB(Binary)
Do While cl1<=L
pl3 = pl3 & Chr(AscB(MidB(Binary,cl1,1)))
cl1 = cl1 + 1
cl3 = cl3 + 1
If cl3>300 Then
pl2 = pl2 & pl3
pl3 = ""
cl3 = 1
cl2 = cl2 + 1
If cl2>200 Then
pl1 = pl1 & pl2
pl2 = ""
cl2 = 1
End If
End If
Loop
BinaryToString = pl1 & pl2 & pl3
End Function
Response.Write BinaryToString(strHTML)
%>
Bu şekilde Türkçe karakterlerin ? çıkmasını engelleriz.. Bu şekilde kullanılmazsa bazı sayfalardan veri çekerken Türkçe karakterleri göremezsiniz..
kolay gelsin..
not: yöneticiler başlığı sabitlerse sevinirim..