İnternetten veri çekme

Katılım
20 Ekim 2005
Mesajlar
485
s.a.

Kod:
Sub web_veri()
Dim request As Object
Dim response As String
Dim html As New HTMLDocument
Dim website As String
Dim tutar As Variant

website = "https://www.doviz.com/"

Set request = CreateObject("MSXML2.XMLHTTP")
request.Open "get", website, True
request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00:GMT"
request.send
response = StrConv(request.resporsbody, vbUnicode)

html.body.innerHTML = resporse

tutar1 = html.getElementsByClassName("value").Item(0).innerText
tutar2 = html.getElementsByClassName("value").Item(1).innerText
tutar3 = html.getElementsByClassName("value").Item(2).innerText
tutar4 = html.getElementsByClassName("value").Item(3).innerText

MsgBox ("Gram Altın :") & tutar1
MsgBox ("Dolar :") & tutar2
MsgBox ("Euro :") & tutar3
MsgBox ("Sterlin :") & tutar4

End Sub
referanslardan Microsoft HTML Object Library ve Microsoft Internet Controls işaretli olmasına rağmen response = StrConv(request.resporsbody, vbUnicode) satırında hata veriyor.

Not: Kodlar alıntıdır, öğrenme amaçlıdır.

Selametle..............................
 
Son düzenleme:

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
61
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
chat gpt cevabı

Hatanın nedeni, yazdığınız koddaki birkaç yazım hatası ve yanlış bir yöntem kullanımından kaynaklanıyor. Özellikle şu hatalara dikkat etmelisiniz:
  1. Yanlış yazım hatası: request.resporsbody doğru yazımı request.responseBody olmalıdır.
  2. Yanlış dönüşüm: StrConv(request.responseBody, vbUnicode) doğru bir kullanım değildir çünkü request.responseBody ikili (binary) veriyi döndürür, ancak StrConv fonksiyonu sadece metin verisini dönüştürebilir. Bunun yerine, ikili veriyi bir UTF-8 veya UTF-16 formatında metne çevirmek için responseText kullanılabilir.
  3. HTMLDocument ile uyumsuzluk: Web sayfasının HTML içeriğini almak için doğru HTML öğesini kullanmanız gerekiyor.
Açıklamalar:
  1. request.responseText: responseBody yerine responseText kullanıldı, çünkü responseBody ikili veri döndürürken responseText metin formatında döner ve HTML ile uyumludur.
  2. request.Open "GET", website, False: True yerine False kullanıldı, çünkü senkron şekilde çalışmak istiyorsunuz (böylece işlem bitmeden devam etmez).
  3. html.getElementsByClassName("value"): Web sayfasında bu sınıf adını doğru kullanarak sayfadaki veriyi alıyoruz. Bu öğe, sayfadaki ilgili döviz bilgilerini içeriyor.
Kod:
Sub web_veri()
    Dim request As Object
    Dim response As String
    Dim html As New HTMLDocument
    Dim website As String
    Dim tutar1 As Variant
    Dim tutar2 As Variant
    Dim tutar3 As Variant
    Dim tutar4 As Variant

    ' Web sitesi URL'si
    website = "https://www.doviz.com/"

    ' HTTP isteği oluşturuluyor
    Set request = CreateObject("MSXML2.XMLHTTP")
    request.Open "GET", website, False
    request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    request.send

    ' HTTP yanıtı alınır
    response = request.responseText ' responseText kullanıyoruz, çünkü responseBody ikili veri döner.

    ' HTML sayfası yüklenir
    html.body.innerHTML = response

    ' Web sayfasındaki değerleri alıyoruz (className değerine göre)
    tutar1 = html.getElementsByClassName("value").Item(0).innerText
    tutar2 = html.getElementsByClassName("value").Item(1).innerText
    tutar3 = html.getElementsByClassName("value").Item(2).innerText
    tutar4 = html.getElementsByClassName("value").Item(3).innerText

    ' Sonuçları ekrana yazdırıyoruz
    MsgBox "Gram Altın: " & tutar1
    MsgBox "Dolar: " & tutar2
    MsgBox "Euro: " & tutar3
    MsgBox "Sterlin: " & tutar4
End Sub
 
Üst