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