JSON einfügen und auswerten

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Blaupunkt79.

    JSON einfügen und auswerten

    Hallo,

    leider hat yahoo den Zugriff auf die Wetterdaten geändert, bisher konnte ich eine xml Datei einlesen und auswerten.

    Diese Zeile erzeugt eine JSON: yahoo.com/news/_tdnews/api/res…erService;woeids=[berlin]

    Wie füge ich diese JSON nun in ein Excel-Sheet ein?

    Mein bisheriger Code für die XML war: (an den neuen Link "&format=xml" anhängen bringt leider auch nichts)

    Visual Basic-Quellcode

    1. stadt = Worksheets("kunden1").Range("b" & kundenzeile)
    2. Application.DisplayAlerts = False
    3. strUrl = "http://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places(1) where text%3D%22" & stadt & "%2C de%22) and u %3D %22C%22&format=xml"
    4. returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0)
    5. If returnValue <> 0 Then
    6. MsgBox "Wetterdaten momentan nicht verfügbar, bitte später nochmals versuchen!": wetter99 = 0: GoTo zuende
    7. Else
    8. ActiveWorkbook.XmlImport strUrl, ImportMap:= _
    9. Nothing, Overwrite:=True, Destination:=Worksheets("Wetter").Range("$A$1")
    10. Application.DisplayAlerts = True
    11. ActiveWorkbook.XmlMaps("query_Zuordnung").Delete 'yahoo


    Danke

    Gruss
    Man nutze eine Suchmachine der Wahl und nutze eine der Lösungen die schon seit Jahren in diesem Internetz stehen.

    mrexcel.com/forum/excel-questi…pi-excel.html#post4332075
    github.com/VBA-tools/VBA-JSON
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Es funktioniert, allerdings nur bei mir daheim, auf Arbeit tut sich gar nichts, wahrscheinlich irgendwas geblockt.

    Jetzt gibt es auf yahoo eine zweite Variante, diesmal eine XML abzufragen.

    developer.yahoo.com/weather/

    Es hakt bei Punkt 3 ...

    "Our API is OAuth1 protected. Please use the consumer key and secret created in Step 1 and generate an oauth signature. Please also include your OAuth app id in the header. Then call our API like this:"

    Wie erstelle ich konkret diese benötigte oauth signature?!

    consumer key/secret key habe ich bereits, die App ist ebenso auf der "white" list.

    Aufrufen wollte ich die XML wie folgt:

    Visual Basic-Quellcode

    1. ActiveWorkbook.XmlImport URL:= _
    2. "https://weather-ydn-yql.media.yahoo.com/forecastrss?location=Hamburg&u=c&Yahoo-App-Id=Meine-APP-IDk&Authorization=OAuth&oauth_consumer_key="Mein consumer-key"&oauth_signature_method="HMAC-SHA1"&oauth_timestamp=date&oauth_nonce="anfrage|zustellung"&oauth_version="1.0"&oauth_signature="fehlt mir", ImportMap:= _
    3. Nothing, Overwrite:=True, Destination:=Worksheets("Wetter").Range("$A$1")
    4. ActiveWorkbook.XmlMaps("current_Zuordnung").Delete]


    Kann mir da wer weiterhelfen?

    Danke

    Gruss
    Du musst deine Anwendung bei Yahoo anmelden, dann bekommst du einen Consumer Key und ein dazu passendes Secret, den du beim Aufruf mitgeben kannst musst.
    Hast du Schritt 1 der API-Anleitung durchgeführt?
    Dann kannst du nach dieser Methode arbeiten:
    stackoverflow.com/questions/34…er-absent-oauth-signature
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Moin, ich nochmal, ich komme da echt nicht weiter, auch nicht mit dem Tip mit der Seite.

    Habe mich/mein Programm bei yahoo angemeldet, habe auch die Key's erhalten, auf der White List ist es ebenfalls.

    Kann mir vielleicht jemand den Code posten, mit dem ich die ersehnte .xml Datei erhalte (inkl. oauth signature), Auswerten tu ich diese dann alleine. Tue mich mit html-Einflüssen schwer.

    Anbei mal "Beispielcode's":

    App ID
    999999
    Client ID (Consumer Key)
    888888
    Client Secret (Consumer Secret)
    777777

    Mein Programm läuft mittlerweile auch auf Arbeit, hab jemanden gefunden, welcher mir die fehlende "access-runtime" draufgespielt hat. Der Wetter-Service würde das ganze abrunden.

    Danke

    Gruß
    Ich habs hinbekommen ...

    Allerdings nicht mit der "Key-Variante", sondern per Yahoo-JSON Datei. (siehe erster Post)

    Dafür habe ich das VBA-JSON Tool (github.com/VBA-tools/VBA-JSON/releases) sowie das VBA-Dictionary (github.com/VBA-tools/VBA-Dictionary/releases) installiert. (per Import im VBA) Anschließend noch den Verweis auf "Microsoft Scripting Runtime" gesetzt.

    Zuerst wird nach der Ort's-ID abgefragt und anschließend per Ort's-ID das Wetter. Die letztendliche Auswertung der JSON-Datei habe ich jetzt nicht mit gepostet.

    Visual Basic-Quellcode

    1. Set DB = OpenDatabase(laufwerk & "\Systemdateien\Kunden.mdb")
    2. sqlsearch = " SELECT * " & _
    3. " FROM Kunden1 " & _
    4. " WHERE ID = " & kundenzeile & ""
    5. Set rec_adr = DB.OpenRecordset(sqlsearch)
    6. If rec_adr.RecordCount = 0 Then DB.Close: GoTo zuende
    7. If IsNumeric(RTrim(rec_adr!Kundenort)) Then MsgBox ("Keine Stadt beim ausgewählten Kunden hinterlegt. Bitte unter Einstellungen ändern!"): logtext = "Keine Stadt hinterlegt": Call loggen: wetter99 = 0: DB.Close: GoTo zuende
    8. If RTrim(rec_adr!Kundenort) = "" Then MsgBox ("Keine Stadt beim ausgewählten Kunden hinterlegt. Bitte unter Einstellungen ändern!"): logtext = "Keine Stadt hinterlegt": Call loggen: wetter99 = 0: DB.Close: GoTo zuende
    9. stadt = RTrim(rec_adr!Kundenort)
    10. If Mail101.Image44.Visible = False Then wetter99 = 0: GoTo zuende
    11. Sheets("wetter").Cells.Clear
    12. strlink = "https://www.yahoo.com/news/_tdnews/api/resource/WeatherSearch;text=" & stadt
    13. Set httpObject = CreateObject("MSXML2.XMLHTTP")
    14. sRequest = strlink
    15. httpObject.Open "GET", sRequest, False
    16. httpObject.send
    17. sgetresult = httpObject.responseText
    18. Set json = JsonConverter.ParseJson(httpObject.responseText)
    19. Set httpObject = Nothing
    20. returnValue = json(1)("woeid")
    21. If returnValue = 0 Then MsgBox ("Ort nicht gefunden, bitte geben Sie einen größeren Ort im Kundenstamm ein."): wetter99 = 0: GoTo zuende
    22. strlink = "https://www.yahoo.com/news/_tdnews/api/resource/WeatherService;woeids=[" & returnValue & "]"
    23. sRequest = strlink
    24. Set httpObject = CreateObject("MSXML2.XMLHTTP")
    25. httpObject.Open "GET", sRequest, False
    26. httpObject.send
    27. sgetresult = httpObject.responseText
    28. Set json = JsonConverter.ParseJson(httpObject.responseText)
    29. Set httpObject = Nothing


    Gruß