JSON Body und Header an die Amazon API senden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von jandrikos.

    JSON Body und Header an die Amazon API senden

    Hallo,

    ich bin gerade dabei, ein Programm zu schreiben, das mit der Amazon Advertising API kommuniziert. Jetzt möchte ich eine Liste aller Keywords von der API holen. Dazu muss ich Header und einen Body im JSON Format senden. Leider bekomme ich es einfach nicht hin.
    Die Header sind ClientId, Scope und Authorization und natürlich die dazugehörigen Werte. Der Body im JSON Format ist:

    XML-Quellcode

    1. {
    2. "stateFilter": {
    3. "include": ["ENABLED", "PAUSED"]
    4. }
    5. }


    Leider muss dieser Filter gesendet werden, da man sonst nur archivierte Keywords zurück bekommt und mit denen kann man im Grunde nichts anfangen.

    Ich habe es nun schon mit WebClient, HttpClient, HttpWebRequest und RestSharp.RestClient versucht, aber bekomme immer ähnlich schlechte Ergebnisse.
    Hat jemand eine Idee?
    Ich habe es jetzt zwar nicht so hinbekommen, wie ursprünglich geplant, sondern mit einem Workaround mit Snapshots. Da muss man nämlich keinen JSON Body mit senden. Dann bin ich aber trotzdem noch auf die Lösung gestoßen, wie man sowohl Header als auch Body in einer HttpClient senden kann. Ich zeige es hier am Beispiel einer Anfrage für einen Report:

    VB.NET-Quellcode

    1. Imports Newtonsoft.Json.Linq
    2. Async Sub LoadAPI()
    3. Dim hClient As New HttpClient()
    4. Dim content As HttpContent = New StringContent("{
    5. ""name"":""SP Kampagnen"",
    6. ""startDate"":""2022-11-22"",
    7. ""endDate"":""2022-11-22"",
    8. ""configuration"":{
    9. ""adProduct"":""SPONSORED_PRODUCTS"",
    10. ""groupBy"":[""campaign""],
    11. ""columns"":[""campaignId"", ""campaignName"", ""campaignStatus"", ""campaignBudgetAmount"", ""impressions"", ""clicks"", ""cost"", ""spend"", ""purchases1d"", ""date"", ""sales1d""],
    12. ""reportTypeId"":""spCampaigns"",
    13. ""timeUnit"":""DAILY"",
    14. ""format"":""GZIP_JSON""
    15. }
    16. }")
    17. content.Headers.ContentType.MediaType = "application/json"
    18. hClient.DefaultRequestHeaders.Add("Amazon-Advertising-API-ClientId", CLIENT_ID)
    19. hClient.DefaultRequestHeaders.Add("Authorization", AccessToken)
    20. hClient.DefaultRequestHeaders.Add("Amazon-Advertising-API-Scope", ProfileID)
    21. 'SPA KAMPAGNEN
    22. responseString = Await hClient.PostAsync("https://advertising-api" & If(area = "EU", "-eu", "") & ".amazon.com/reporting/reports", content)
    23. data = Await responseString.Content.ReadAsStringAsync()
    24. Debug.Print(data) 'Zeigt die gesamte Response
    25. Dim ser = JObject.Parse(data) 'Hierfür muss über NuGet das Paket Newtonsoft.Json.Linq installiert und anschließend am Anfang der Datei über Imports importiert werden
    26. Dim jdata As List(Of JToken) = ser.Children().ToList
    27. Debug.Print(jdata.Item(7)) 'Zeigt nur die Report ID
    28. End Sub


    Ihr seht also, man braucht den JSON Body da nur reinkopieren und alle " zu "" ersetzen. Man muss nichts serialisieren oder konvertieren.

    Dazu muss dann noch am Anfang des Subs Async hinzugefügt werden.

    Ich hoffe, ich konnte damit weiterhelfen, falls zukünftig jemand das gleiche Problem wie ich hat.

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