[Çözüldü]  VBA-JSON For Each Kullanımı...

Excel programınıza Web Sayfalarından veri alarak çalışabileceğiniz bölüm.

VBA-JSON For Each Kullanımı...

İleti#1)  l3oomerangg » 05 Tem 2018 04:27

Merhaba arkadaşlar... VBA konusunda henüz acemi olduğumu ve öğrenmeye çalıştığımı belirterek yeni bir soru sormak istiyorum müsadenizle...

Aşağıda yazmış olduğum kod gayet güzel bir şekilde çalışıyor. Fakat burada For...Next döngüsü kullanarak "tank_id" parametresi üzerinden yüzlerce api sorgusu yaparak veri çekebiliyorum. Fakat benim istediğim For Each kullanarak tek bir api sorgusu ile tabloda ki verileri çekmek... Internette bir çok VBA-JSON üzerinde For Each örneği inceledim ama sorunuma çözüm bulamadım...

En son Yasin beyin https://excelvba.net/viewtopic.php?f=8&t=29869 bu linkte ki hava durumu ile ilgili kodları üzerinde değişiklik yapmaya çalıştım ama maalesef gene başarılı olamadım... Burada ki kodları kendi sistemime uyguladığımda "Type Mismatch" veya "Object Required" hataları ile karşılaştım bol bol... Yasin beyin örnek olarak kullandığı JSON tablosu tek seviye verilerden oluşuyor... Benim kullanmak istediğim JSON tablosu ise 4-5 seviye dibe iniyor ve en dipteki verileri almak istediğimde "Type Mismatch" hatası alıyorum.

Üzerinde çalıştığım JSON verisi : api.worldoftanks.eu/wot/tanks/stats/?application_id=7dd6a16a971f0a8a173530697848a074&account_id=510778892

Şimdiden yardımcı olan veya olmaya çalışan tüm arkadaşlara teşekkürler...

Dipnot : JsonConverter 2.3.0 ve Microsoft Scripting Runtime Aktif...

Kod: Tümünü seç
Sub DENEME4()
   
    Dim httpObject As Object
    Set httpObject = CreateObject("MSXML2.XMLHTTP")
   
    On Error Resume Next
   
    Dim tank_id As Double
    For i = 10 To 600
    tank_id = Cells(i, 3)
   
   
    If tank_id = 0 Then
    Exit For
    End If
   
    Cells(i, 40) = i

    sURL = "https://api.worldoftanks.eu/wot/tanks/stats/?application_id=7dd6a16a971f0a8a173530697848a074&account_id=510778892&tank_id=" & tank_id

    sRequest = sURL
    httpObject.Open "GET", sRequest, False
    httpObject.send
    sgetresult = httpObject.responsetext
   
    Dim oJSON As Object
    Set oJSON = JsonConverter.ParseJson(sgetresult)
   
    Dim account_id As String
    account_id = "510778892"
   
    Cells(i, 6) = oJSON("data")(account_id)(1)("max_xp")
    Cells(i, 7) = oJSON("data")(account_id)(1)("max_frags")
    Cells(i, 9) = oJSON("data")(account_id)(1)("mark_of_mastery")
    Cells(i, 12) = oJSON("data")(account_id)(1)("all")("spotted")
    Cells(i, 13) = oJSON("data")(account_id)(1)("all")("battles_on_stunning_vehicles")
    Cells(i, 14) = oJSON("data")(account_id)(1)("all")("avg_damage_blocked")
    Cells(i, 15) = oJSON("data")(account_id)(1)("all")("direct_hits_received")
    Cells(i, 16) = oJSON("data")(account_id)(1)("all")("explosion_hits")
    Cells(i, 17) = oJSON("data")(account_id)(1)("all")("piercings_received")
    Cells(i, 18) = oJSON("data")(account_id)(1)("all")("piercings")
    Cells(i, 19) = oJSON("data")(account_id)(1)("all")("xp")
    Cells(i, 20) = oJSON("data")(account_id)(1)("all")("survived_battles")
    Cells(i, 21) = oJSON("data")(account_id)(1)("all")("dropped_capture_points")
    Cells(i, 22) = oJSON("data")(account_id)(1)("all")("hits_percents")
    Cells(i, 23) = oJSON("data")(account_id)(1)("all")("draws")
    Cells(i, 24) = oJSON("data")(account_id)(1)("all")("battles")
    Cells(i, 25) = oJSON("data")(account_id)(1)("all")("damage_received")
    Cells(i, 26) = oJSON("data")(account_id)(1)("all")("frags")
    Cells(i, 27) = oJSON("data")(account_id)(1)("all")("stun_number")
    Cells(i, 28) = oJSON("data")(account_id)(1)("all")("capture_points")
    Cells(i, 29) = oJSON("data")(account_id)(1)("all")("stun_assisted_damage")
    Cells(i, 30) = oJSON("data")(account_id)(1)("all")("hits")
    Cells(i, 31) = oJSON("data")(account_id)(1)("all")("battle_avg_xp")
    Cells(i, 32) = oJSON("data")(account_id)(1)("all")("wins")
    Cells(i, 33) = oJSON("data")(account_id)(1)("all")("losses")
    Cells(i, 34) = oJSON("data")(account_id)(1)("all")("damage_dealt")
    Cells(i, 35) = oJSON("data")(account_id)(1)("all")("no_damage_direct_hits_received")
    Cells(i, 36) = oJSON("data")(account_id)(1)("all")("shots")
    Cells(i, 37) = oJSON("data")(account_id)(1)("all")("explosion_hits_received")
    Cells(i, 38) = oJSON("data")(account_id)(1)("all")("tanking_factor")
   
    Next i
   

   
   
End Sub
Kullanıcı avatarı
l3oomerangg
Yeni Başlamış
 
Kayıt: 15 Haz 2018 03:59
Meslek: Serbest
Yaş: 40
İleti: 56
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul / Sultangazi

Cevap: VBA-JSON For Each Kullanımı...

İleti#2)  Yasin KURT » 05 Tem 2018 09:48

Bu şekilde dener misiniz ?
url olan kısma kendi linkinizi ekleyin. Benim bilgisayarım bu linki virüs olarak görüyor...
Kod: Tümünü seç
Sub abc()
    Dim json As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    Dim url As String

    account_id=510778892"
    http.Open "GET", url, False
    http.send
    Set json = ParseJson(http.responsetext)
    Cells.ClearContents
    i = 1
    For Each c In json("data")("510778892")
        Cells(i, 1) = c("account_id")
        Cells(i, 2) = c("max_xp")
        Cells(i, 3) = c("max_frags")
        Cells(i, 4) = c("mark_of_mastery")
        Cells(i, 5) = c("all")("spotted")
        Cells(i, 6) = c("all")("battles_on_stunning_vehicles")
        Cells(i, 7) = c("all")("avg_damage_blocked")
        i = i + 1
    Next
End Sub
yasinkurt06@ gmail.com
Ankara 0506 669 1079
Yasin KURT
Forum Moderatörü
 
Adı Soyadı:Yasin KURT
Kayıt: 08 Arl 2008 02:18
Konum: ANKARA
Yaş: 37
İleti: 3179
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Ankara



Cevap: VBA-JSON For Each Kullanımı...

İleti#3)  l3oomerangg » 05 Tem 2018 13:00

Maalesef bu kodlarda işime yaramadı. Son yazdığınız kodlar üzerinden birçok farklı varyasyon denedim ama işe yaramadı.

Kod: Tümünü seç
    For Each c In json("data")("510778892")(1)("all")

        Cells(i, 10) = c("data")("510778892")("all")(1)("max_xp")
        Cells(i, 10) = c("max_xp")


Bu şekilde bir kod yapısında For Each den sonra ki satırlarda "Type Mismatch" hatası döndürüyor. Her iki satır ayrı ayrı denendi. c değişkeni için Dim ile tanımlama yapmaya kalktığımda da "Object Required" hatası dönüyor.

Not : Burada (1) bölümü JSON içerisinde ki köşeli parantezi aşmamı sağlıyor. Daha önce replace ile çözüm bulmuştunuz Yasin bey. Bu biraz daha basiti diyelim...

O linkte virüs olma ihtimali yok ama belki https olayından dolayı tarayıcı uyarı veriyor olabilir. O yüzden linki aşağıdaki şekilde tekrar veriyorum....

http://api.worldoftanks.eu/wot/tanks/stats/?application_id=7dd6a16a971f0a8a173530697848a074&account_id=510778892

Uğraşlarınız için teşekkürler...
Kullanıcı avatarı
l3oomerangg
Yeni Başlamış
 
Kayıt: 15 Haz 2018 03:59
Meslek: Serbest
Yaş: 40
İleti: 56
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul / Sultangazi

Cevap: VBA-JSON For Each Kullanımı...

İleti#4)  Yasin KURT » 05 Tem 2018 13:06

Benim gönderdiğim kod çalışmadı mı ? Hata mı verdi ?
yasinkurt06@ gmail.com
Ankara 0506 669 1079
Yasin KURT
Forum Moderatörü
 
Adı Soyadı:Yasin KURT
Kayıt: 08 Arl 2008 02:18
Konum: ANKARA
Yaş: 37
İleti: 3179
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Ankara



REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: VBA-JSON For Each Kullanımı...

İleti#5)  l3oomerangg » 05 Tem 2018 13:13

Evet Yasin bey, o kodlar çalışmadı, yukarıda yazmıştım. Hatta kodlarınız üzerinden farklı varyasyonlarda denedim ama olmadı maalesef...
Kullanıcı avatarı
l3oomerangg
Yeni Başlamış
 
Kayıt: 15 Haz 2018 03:59
Meslek: Serbest
Yaş: 40
İleti: 56
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul / Sultangazi

Cevap: VBA-JSON For Each Kullanımı...

İleti#6)  Yasin KURT » 05 Tem 2018 13:14

Ben aynı kodları denedim gönderdim size.

7 sütuna veri getiriyor 183 satır. Sizde neden çalışmadı acaba ?
yasinkurt06@ gmail.com
Ankara 0506 669 1079
Yasin KURT
Forum Moderatörü
 
Adı Soyadı:Yasin KURT
Kayıt: 08 Arl 2008 02:18
Konum: ANKARA
Yaş: 37
İleti: 3179
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Ankara



REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Cevap: VBA-JSON For Each Kullanımı...

İleti#7)  l3oomerangg » 05 Tem 2018 13:29

Demin ki kodları kopyalarken nerede hata yaptım bilmiyorum ama önceki verdiğiniz kodlar üzerinden şu an verileri çekebiliyorum, kusura bakmayın. Kısacası veriler geliyor şu an çok teşekkür ederim, yardımlarınız ve vakit ayırdığınız için.
Kullanıcı avatarı
l3oomerangg
Yeni Başlamış
 
Kayıt: 15 Haz 2018 03:59
Meslek: Serbest
Yaş: 40
İleti: 56
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul / Sultangazi

Cevap: VBA-JSON For Each Kullanımı...

İleti#8)  Yasin KURT » 05 Tem 2018 14:04

Rica ederim. Kolay gelsin.
yasinkurt06@ gmail.com
Ankara 0506 669 1079
Yasin KURT
Forum Moderatörü
 
Adı Soyadı:Yasin KURT
Kayıt: 08 Arl 2008 02:18
Konum: ANKARA
Yaş: 37
İleti: 3179
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Ankara




Forum Excel ile Web Sayfaları Veri İşlemleri

Online Kullanıcılar

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 1 misafir

cron
Bumerang - Yazarkafe