Json Api Abfrage optimieren

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von bodo.

    Json Api Abfrage optimieren

    Hallo,

    ich wäre für ein kurze Hilfestellung dankbar.
    Ich habe mir ein kleines VB Script für Office zusammengeschustert das Werte aus einer Json API abruft und in mein Dokument einfügt.


    Quellcode

    1. Private Sub CommandButton1_Click()
    2. Dim http As Object, JSON As Object, i As Integer
    3. Set http = CreateObject("MSXML2.XMLHTTP"
    4. http.Open "GET", "https://api.coinmarketcap.com/v1/ticker/bitcoin", False
    5. http.Send
    6. Set JSON = ParseJson(http.responseText)
    7. i = 3
    8. For Each Item In JSON
    9. Sheets(1).Cells(i, 2).Value = Item("name")
    10. Sheets(1).Cells(i, 3).Value = Item("symbol")
    11. Sheets(1).Cells(i, 5).Value = Item("price_usd")
    12. Sheets(1).Cells(i, 6).Value = Item("market_cap_usd")
    13. Sheets(1).Cells(i, 7).Value = Item("available_supply")
    14. i = i + 1
    15. Next
    16. http.Open "GET", "https://api.coinmarketcap.com/v1/ticker/ethereum", False
    17. http.Send
    18. Set JSON = ParseJson(http.responseText)
    19. i = 5
    20. For Each Item In JSON
    21. Sheets(1).Cells(i, 2).Value = Item("name")
    22. Sheets(1).Cells(i, 3).Value = Item("symbol")
    23. Sheets(1).Cells(i, 5).Value = Item("price_usd")
    24. Sheets(1).Cells(i, 6).Value = Item("market_cap_usd")
    25. Sheets(1).Cells(i, 7).Value = Item("available_supply")
    26. i = i + 1
    27. Next
    28. ...
    29. End Sub



    In diesem Code wird die URL jeder Wertefamilie einzeln geladen, also: 1 api.coinmarketcap.com/v1/ticker/bitcoin 2 api.coinmarketcap.com/v1/ticker/ethereum
    Nun würde ich aber lieber aus Gründen der Performace alle Werte aus nur einer URL laden: https://api.coinmarketcap.com/v1/ticker
    Wie kann man den Code nun durch eine if-Abfrage erweitern und die dementsprechenden Werte abfragen ?

    Nur zum groben Verständnis:


    Quellcode

    1. if id = ("ethereum") dann
    2. i = 5
    3. For Each Item In JSON
    4. Sheets(1).Cells(i, 2).Value = Item("name")
    5. Sheets(1).Cells(i, 3).Value = Item("symbol")
    6. Sheets(1).Cells(i, 5).Value = Item("price_usd")
    7. Sheets(1).Cells(i, 6).Value = Item("market_cap_usd")
    8. Sheets(1).Cells(i, 7).Value = Item("available_supply")
    9. i = i + 1
    10. Next



    Ich habe auch noch eine zweite Frage =O wie ist die korrekte Schreibweiße wenn ich in VB zwei Werte dividieren will?

    Quellcode

    1. Sheets(1).Cells(i, 5).Value = Item("price_usd") / Item("market_cap_usd")


    damit geht es auf jeden Fall schonmal nicht.

    Ich wäre für jede Hilfe dankbar. So wie es momentan funktioniert, geht es mir auf die Nerven und ist sicher auch für den Server nicht optimal.
    Servus @bodo!

    bodo schrieb:

    Schreibweiße
    Schreibweise *grammar nazi flies away*

    bodo schrieb:

    in VB zwei Werte dividieren will

    bodo schrieb:

    Item("price_usd") / Item("market_cap_usd")
    Das ist aber die normale Schreibweise (einen / zum (normalen) dividieren und ein \ zum ganzzahligem teilen: 5/3 = 1,666666..., 5\3 = 1)

    bodo schrieb:

    damit geht es auf jeden Fall schonmal nicht.
    Was meinst du konkret mit "geht nicht"??
    Wird dir eine Fehlermeldung angezeigt?

    Was jetzt?

    bodo schrieb:

    VB
    oder

    bodo schrieb:

    VB Script
    ?? Oder eher VBA (Visual Basic for Applications?

    bodo schrieb:

    ParseJson
    Woher hast du diese Methode? Was stellt sie dir zur Verfügung? Hast du eine externe Libary eingebunden?

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Hallo Radinator,
    Danke für deine Antwort, ich meinte natürlich "MS Visual Basic for Applications".

    Radinator schrieb:

    Was meinst du konkret mit "geht nicht"??
    Wird dir eine Fehlermeldung angezeigt?


    Es funktioniert, aber bei den Zahlen werden die Nachkommastellen ignoriert und es wird als ganze Zahl gesehen.

    Radinator schrieb:

    Woher hast du diese Methode? Was stellt sie dir zur Verfügung? Hast du eine externe Libary eingebunden?


    Leider kann ich dir ab hier nicht mehr folgen. Falls du den Code meinst, den habe ich aus einem Tutorial.
    Ich habe eine Excel Tabelle erstellt, den VB Editor geöffnet, den Code reinkopiert und für meine Zwecke angepasst.
    Alles noch mit einem Commend-Button verknüpft und es hat funktioniert.
    Nur nochmal zum Verständnis, die Api stellt Informationen zur verfügung die durch klicken des Command-Buttons in eine Excel-Tabelle eingefügt werden.

    VG bodo

    bodo schrieb:

    bei den Zahlen werden die Nachkommastellen ignoriert
    Das sind die regionalen Settings.
    Dein JSON verwendet vermutlich Punkt als Dezimaltrenner und deine Excel-Regionalsettings sind auf Komma eingestellt.
    Oder umgekehrt.

    Wenn du deinen JSON-Parser nicht dafür konfigurieren kannst, musst du die Zahlen ggf. im Programm konvertieren,
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --