VBNETte HTML hata veriyor.

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Merhaba.
Haluk üstadın excel için yazmış olduğu webten veri alma kodlarını vbnete uyarlamaya çalıştım.
Ama aşağıdaki resimdeki hatayı verdi.
Nasıl yapmalıyız?
Adsız.jpg
 

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,056
Excel Vers. ve Dili
Microsoft Office 2019 English
Çok isterdim vb.net yüklü değil :(
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,241
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Problemin HTTP mi, yoksa HTML nesnesinde mi olduğu pek anlayamadım. COM nesneleri bazen problem çıkaratabiliyor.

Aşağıdaki gibi kullanın; bakalım durum ne olacak... (Buton click altına yapıştırılacak)

C#:
Dim request As New Net.WebClient

AddHandler request.DownloadStringCompleted, Sub(objSender As Object, message As DownloadStringCompletedEventArgs)
                                                  HTML.body.innerHTML = message.Result
                                            End Sub

request.DownloadStringAsync(New Uri("http://..."))
 
Son düzenleme:

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,371
Excel Vers. ve Dili
Office 2013
Merhaba;

Evren bey, siz o siteden hangi verileri almak istiyorsunuz? Amacınız html dom verilerini parse etmekse ve Vb.net kullanıyorsanız create.objecte gerek var mı?
webclient veya httpwebrequest ile html response yi alın ve ister regexp ile isterseniz "Html Agility Pack " gibi harika bir 3.parti eklentiyle ilgili html dom verilerini almayı deneyin.

Ütelik requestlerinizde header'a user-agent, referer gibi özellikleri atayabilirsiniz.
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Problemin HTTP mi, yoksa HTML nesnesinde mi olduğu pek anlayamadım. COM nesneleri bazen problem çıkaratabiliyor.

Aşağıdaki gibi kullanın; bakalım durum ne olacak... (Buton click altına yapıştırılacak)

C#:
Dim request As New Net.WebClient

AddHandler request.DownloadStringCompleted, Sub(objSender As Object, message As DownloadStringCompletedEventArgs)
                                                  HTML.body.innerHTML = message.Result
                                            End Sub

request.DownloadStringAsync(New Uri("http://..."))
Teşekkür ederim hocam.Sanırım HTML de sorun var.Ben yanlış yazdım sanırım.Çünkü HTML kelimesinin üstünü açık mavi yapmış.Yapmaya çalışıcam.Burada bir prosedür var.O ayrı bir prosedür diilmi hocam.Bunu buton click olayı içinemi yazcaz.Yoksa ayrı bir prosedürmü olacak.
 
Son düzenleme:

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Merhaba;

Evren bey, siz o siteden hangi verileri almak istiyorsunuz? Amacınız html dom verilerini parse etmekse ve Vb.net kullanıyorsanız create.objecte gerek var mı?
webclient veya httpwebrequest ile html response yi alın ve ister regexp ile isterseniz "Html Agility Pack " gibi harika bir 3.parti eklentiyle ilgili html dom verilerini almayı deneyin.

Ütelik requestlerinizde header'a user-agent, referer gibi özellikleri atayabilirsiniz.
Merhaba beab05 hocam.Teşekkür ederim.
Hocam,VBNET konusunda acemiyim.Söylediklerinizi anlayamadım.
Aşağıdaki resimdeki iptal ettiğim satırdaki gibi veri alıcam.

Adsız.jpg
 
Son düzenleme:

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,371
Excel Vers. ve Dili
Office 2013
Evren bey size bir örnek yaptım.
https://yorum.altin.in/tum/dolar

bu sitedeki en üstteki verileri çektim.


Adsız.png

Projeyi alta ekliyorum.

Ayrıca sadece exe yi de ekliyorum. Sadece çalışan dosyaya bakmak isteyenler için.. Verialalim rar içinde exe ve ilgili dll var.

Diğer rar zaten kaynak kodlar..
 

Ekli dosyalar

Son düzenleme:

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Teşekkür ederim hocam.
Sadece dolar ve altın verisini alsaydım,nasıl bir değişiklik yapacaktım?
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,371
Excel Vers. ve Dili
Office 2013
Teşekkür ederim hocam.
Sadece dolar ve altın verisini alsaydım,nasıl bir değişiklik yapacaktım?
Alttaki gibi en kestirme yoldan olabilir. Basit bir if.. then.. yeter..

Kod:
Private Sub BtnVeriAl_Click(sender As Object, e As EventArgs) Handles BtnVeriAl.Click


        Dim Verilerim As New List(Of Veriler)

        Dim anaurl As String = "https://yorum.altin.in/tum/dolar"

        Dim veriDom As String = "//div[@class='odee']//div"


        Using wd As New WebClient With {.Encoding = Encoding.Default}

            Dim istek = wd.DownloadString(anaurl)

            Dim doc As New HtmlDocument()
            doc.LoadHtml(istek)


            Dim col As HtmlNodeCollection = doc.DocumentNode.SelectNodes(veriDom)


            For Each bb As HtmlNode In col

                Dim childs = bb.ChildNodes

                Dim IstedigimVeri = childs("h1").InnerText.ToString

                'Burada sadece altın ve usd yi aldık. Tabii çok statik bir yöntem. Siz kendiniz bunu geliştirmelisiniz.

                If IstedigimVeri.Equals("ALTIN ONS") Or IstedigimVeri.Equals("USD/TL") Then
                    Verilerim.Add(New Veriler With {.Isim = childs("h1").InnerText, .Deger = childs("h2").InnerText,
                                                     .Zaman = childs("font").InnerText})

                End If
            Next


            GrdSite.DataSource = Verilerim


        End Using

    End Sub
 
Son düzenleme:

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Teşekkür ederim hocam.
Bu tamamdır.(y)
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,371
Excel Vers. ve Dili
Office 2013
Yalnız unutmayın;

Web sitelerinden veri aldığınızda ilgili sitelerde yapılan değişkliklerde ki çok sık yapılabilir sizin uygulamalarınız da çalışmaz hale egelebilir. Bu bakımdan ya istediğiniz verileri veren bir api bulun ya da kendiniz sunucuda çalışan istediğiniz verileri döndüren bir web service yazın.
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Yalnız unutmayın;

Web sitelerinden veri aldığınızda ilgili sitelerde yapılan değişkliklerde ki çok sık yapılabilir sizin uygulamalarınız da çalışmaz hale egelebilir. Bu bakımdan ya istediğiniz verileri veren bir api bulun ya da kendiniz sunucuda çalışan istediğiniz verileri döndüren bir web service yazın.
Anladım hocam.
Teşekkür ederim.
İyi günler dilerim.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,295
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Evren Bey, ilk mesajınızda adım geçtiği için konuya müdahil olayım dedim....

Yukarıda arkadaşların belirttiği gibi, VS'nin kendi class'larıyla çalışmak çok daha mantıklı.

Ama yine de VBA'de kullandığımız "CreateObject" ile çalışmak isterseniz; oluşturduğunuz HTML Document'a bir şeyler yazdırmadan önce ilk olarak nesneyi açıp, kapatarak nesneyi kullanıma hazır hale getirmek veya "Body" kısmını hazırlamak gerekiyor. Daha sonra, siz HTTP nesnesi ile yolladığınız isteğin dönüşünü yazdırabilirsiniz.

Bunun için ya aşağıdaki gibi bir şey;

Kod:
        If objHTTP.Status = 200 Then
            HTMLfile.Open
            HTMLfile.Close
            HTMLfile.Body.innerHTML = objHTTP.responseText

            Label3.Text = HTMLfile.getelementById("sabitDolar").innerText
            Label4.Text = HTMLfile.getelementById("sabitEuro").innerText
        Else
            MsgBox("Problem var ...!")
        End If
Ya da "Body" oluşturarak; kodun aşağıdaki gibi olması gerekir...

Kod:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim URL As String
        Dim objHTTP As Object, HTMLfile As Object

        URL = "https://yorum.altin.in/tum/dolar"

        objHTTP = CreateObject("MSXML2.XMLHTTP")
        objHTTP.Open("GET", URL, False)
        objHTTP.Send

        HTMLfile = CreateObject("HTMLFILE")

        If objHTTP.Status = 200 Then
            HTMLfile.Open
            HTMLfile.Write("<body></body>")
            HTMLfile.Close
            HTMLfile.Body.innerHTML = objHTTP.responseText

            Label3.Text = HTMLfile.getelementById("sabitDolar").innerText
            Label4.Text = HTMLfile.getelementById("sabitEuro").innerText
        Else
            MsgBox("Problem var ...!")
        End If
    End Sub

Örnek proje ektedir ....


.
 

Ekli dosyalar

Son düzenleme:

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,760
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Merhaba ben proğramlarımı hep vb6 da yapıyordum
vb net için bir dosyada ben ekliyorum.

Yeni Bit Eşlem Resmi.jpg
 

Ekli dosyalar

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Haluk hocam;
Bu kodlarda çok güzel oldu.(y)
Teşekkür ederim.
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Halit bey;
Sizin kodlarınızda çok güzel olmuş.(y)
Teşekkür ederim.
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Haluk hocam;
Bir şey daha sormak istiyorum.
Label1 ve label2 text lerini manuel yazılmış.(altın ve dolar)
Onlarıda kod ile aldırabilirmiyiz?
 
Üst