Dim http,url,pat,count,min,max
'Değişkenlerimizi tanımlıyoruz.
If WScript.Arguments.Count = 0 Then
'Eğer argüman sayısı 0 ise
url = InputBox("Hedef Url:" & vbCrLf & Chr(214) & "rnek: https://www.youtube.com","Hedef Url Girin")
'input box çıkarıyor ve hedef urlmizi istiyor. başında http olmalı.
'vbCrLf bir alt satıra geç komutudur. \n veya <br /> ile aynı şeyi yapar.
'Chr(124) bildiğimiz Ö harfi için.
If Len(url)=0 Then
'Eğer girilen url uzunluğu 0 ise
WScript.Quit
'Scriptten çık
End If
pat = InputBox("RegExp Pattern:" & vbCrLf)
'Regexp pattern giriniz örneğin <title>(.*) <\/title>
'burada bulunan sonucu .Submatches(0) ile alıyoruz.
'Eğer birden çok regex eşleştirmemiz varsa; Örneğin
'<a href="(.*)">(.*)</a><img src="(.*)" gibi
'Submatches(0 - 1 , 2 diye uzar gider
'NOT: vbs regexp kalıbı ECMA Standardındadır.
min = InputBox("Start Loop:" & vbCrLf)
'Bu script örnek url http://www.ornek.com/1 .... 5000 gibi site yapılarından
'bilgileri çekmek için yazılmıştı.
'bu yüzden başlangıç değeri olan minimum değerini girmemizi istiyor.
'eğer tekli bir url olacaksa min i 0 girin
If Len(min)=0 Then
'Eğer min değer uzunluğu 0 a eşitse yani boş ise
min = 0
'min değeri 0 yapıyor.
End If
max = InputBox("Stop Loop:" & vbCrLf)
'Aynı şekilde bir döngü yaratacağımız için maksimum değerini girmemizi istiyor.
If Len(max)=0 Then
'Eğer max değeri uzunluğu 0 a eşitse yani boş ise
max = 0
'max değeri 0 yapıyor.
End If
End If
'Burada da çıktıyı yazdıracağımız dosyayı yaratıyoruz.
'FileSystemObject (FSO) ile. Adodb.Stream yaptığım araştırmalarda
'Append yani var olan dosyanın içine direkt olarak tekrar yazamıyor.
'Tekrar yazma modunda dosyayı oluşturamadığı için FSO ile ilk önce dosyamız var mı
'kontrol edip Eğer yoksa dosyayı oluşturuyoruz.
Set fso = CreateObject("Scripting.FileSystemObject")
'FSO yu yarattık
If fso.FileExists("file1.htm") Then
'Eğer file1.htm mevcutsa birşey yapma
Else
'Değilse
Set out = fso.CreateTextFile("file1.htm",True)
'file1.htm yi Metin dosyası olarak yarat.
'CreateTextFile parametreleri "dosya_adı", overwrite(üzerine yazma),unicode şeklinde
'Boolean yani True veya False değerini alır.
out.Close
'dosyayı kapat.
Set out = Nothing
'değişkeni serbest bırak
End If
Set fso = Nothing
'fso serbest bırak
For count = min to max
'For döngüsü , count 1 er 1 er artıyor. 2 şer artış için for döngüsünün içine
'count = count + 1 yazılabilir.
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
'Burada http nesnemizi yaratıyoruz.
If max > 1 Then
'Eğer max değeri 1 den çok ise http://www.ornek.com urlsini girdi isek
http.Open "GET", url & "/" & count , False
'url ye / ekleyip count değişkeniyle çoklu url döndürüyoruz min değerinden başlayarak yani
'http://www.ornek.com/1 oluyor urlmiz.
Else
'eğer min veya maxa değer girmediysek http://www.ornek.com
'olarak sadece bir url döndürüyor
http.Open "GET", url , False
'url yi aç. GET metodunu kullandık çünkü herhangi bir form verisi göndermeyeceğiz.
'GET metodu ve POST metodu nasıl kullanılır açıklamasını araştırınız.
'3. parametre http bağlantısını senkron modda açması için False değeri belirledik
End If
http.SetRequestHeader "User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36"
'Başlık verilerini Google chrome kullandığımız yönünde gönderiyoruz.
http.Send
'Sorguyu gönder
'False değeriyle senkron istek gönderimini açmıştık bu da Send işlemini
'tüm sayfa gelene kadar sonlandırmıyor
If http.Status = 200 Then
'Eğer bu sayfa mevcut ise Status değeri 200 olarak geri döner
Set Rgx = new RegExp
'Rgx geğişkenine Regexp nesnesini tanımlıyoruz.
Rgx.Global = True
'Varsayılan olarak False dir.
'Global değişken true iken verilen metin ve regexp patternindeki
'ilk bulunan değil tüm bulunanlar sorgulanır.
Rgx.IgnoreCase = True
'Büyük küçük harf duyarlılığını iptal eder.
Rgx.Pattern = pat
'Desen pattern input boxtan geleni atıyoruz.
Set Esler = Rgx.Execute(http.responseText)
'Esler değişkenine RegExp sorgumuzu çalıştırıyoruz
'http.responseText ile verdiğimiz urlnin kaynak kodunu string olarak atadık.
'http.responseBody gibi bir istek de mevcuttur.
'buna değinmeyeceğiz ama kısaca binary stream için kullanılıyor.
'örneğin video gibi veriler yada exe indiriyorsak.
Set objStream = CreateObject("ADODB.Stream")
'objStream değişkenimize Adodb.stream nesnemizi yartıp tanımlıyoruz.
'Burada değinmek istediğim adodb.stream ın direkt bir text append yani metin belgesine
'doğrudan satır satır ekleme yapmaması.
'Normalde yaptığı dosyaya satırı 1. sıraya sürekli yazmak.
'Bu yüzden ilk önce önceki var olan satırları okutup, ekleteceğimiz satırlarla birleştirip
'tekrar yazdırmak şeklinde bir çözüm buldum.
With objStream
'With değişken, tanımlaması; objStream.Charset, objStream.Type tek tek tanımlamadan
'kurtulmak için kullanılıyor.
.Charset = "utf-8"
'Karakter türü
.Type=2
'1 binary, 2 Text akış tipi
.mode=3
'Okuma/Yazma modu
'parametreler için en açıklayıcı kaynak http://www.w3schools.com/asp/ado_ref_stream.asp
.Open
'Akışı aç
.LoadFromFile "file1.htm"
'Fso ile yarattığımız dosyayı hafızaya yüklüyoruz.
Dim readData
'değişken tanımladık
readData="" & .readText
'Hafızada bulunan dosyadaki tüm satırları metin formatında okuyoruz.
've "" ile stringe dönüştürüyor.
.Position = 0
'Okunan akışın başlangıç byte değer posizyonu.
On Error Resume Next
'Yazma denemesi hata kontrolü hata varsa sonraki komuttan devam et.
.WriteText readData & count & " : <a href=" & chr(34) & Esler(0).SubMatches(3) & chr(34) & ">" & Esler(0).SubMatches(0) & "</a><br>" & vbCrLf,0
'Bu benim istediğim formatta metin çıktısı veriyor.
'min..max : <a href="bulunan3">bulunan1</a><br> şeklinde siz kendinize göre değiştirebilirsiniz
'Burda birkay şeyi açıklayacağım. Eğer bulunanlardan birinde hata varsa If ten devam eder.
'.Write <buffer>; tek başına binary yazar responseBody ile kullanılır ve Type 1 olmalı.
'.WriteText TextStream,<opt> dir. 0 char, 1 string ile birlikte yeni satır yazar.
'readData da belirttiğim gibi dosyaya alt alta satır ekleme yani append için gereklidir
If Err.Number <> 0 Then
'Eğer yazmada hata varsa
.WriteText readData & count & " : <br>" & vbCrLf,0
'boş formatladığımız bir satır yazdırıyoruz.
'count : <br> yeni satır(vbCrLf) çıktısı veriyor.
Err.Clear
'hatayı temizle
End If
.SaveToFile "file1.htm",2
'Dosyaya kaydet, "dosya_adı",opt
'SaveToFile varsayılan olarak opt değeri 1 dir.
'opt 1 dosya mevcut değilse yeni dosya yaratır. Üzerine yazmaz dosya varsa hata verir.
'opt 2 dosya mevcutsa akışı üzerine yazar.
.Close
'Akışı kapat
End With
'With i kapat
'Yarattığımız nesneleri serbest bırakıyoruz.
Set objStream = Nothing
Set Esler = Nothing
Set Rgx = Nothing
Else
'Eğer istediğimiz url yok ise Alttaki işlemleri uygula
'Üst satırlarda değindiğimiz için bunlara değinmeyeceğiz.
'Boş bir değer yazdırıyoruz sadece
'count <br> yeni satır(vbCrLf).
'For döngüsü
'For değişken min to max
'işlemler
'Next kalıbındadır.
Set objStream = CreateObject("ADODB.Stream")
With objStream
.Charset = "utf-8"
.Type=2
.mode=3
.Open
.LoadFromFile "file1.htm"
Dim readDt
readDt="" & .readText
.Position = 0
.WriteText readDt & count & " : <br>" & vbCrLf,0
.SaveToFile "file1.htm",2
.Close
End With
Set objStream = Nothing
End If
Next
Set http = Nothing
Java kaynak kodları, Web elemanları, Bilgisayar Teknolojisi, javaturk.8m.net, java türk, türkçe, java, source, kaynak, code, kod, kodu, html, css, script, win, tasarım, design
15 Şubat 2016 Pazartesi
Windows Script Host ( WSH, Vbs) - Regex - Adodb.Stream kullanımına örnek bir uygulama
Kaydol:
Kayıt Yorumları (Atom)
0 yorum:
Yorum Gönder