5 messaggi dal 21 aprile 2015
Buongiorno a tutti.
come ho inserito in oggetto sto utilizzando un API fornita da un gestore che effettua una chiamata tramite questo indirizzo:

https://api.edmunds.com/api/vehicle/v2/vins/CODICEPASSATO?fmt=json&api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

La risposta è una pagina che contiene questi dati non formattati:

{"make":{"id":200007302,"name":"GMC","niceName":"gmc"},"engine":{"name":"Engine","equipmentType":"ENGINE","availability":"STANDARD","cylinder":6,"size":4.3,"configuration":"V","fuelType":"regular unleaded","horsepower":190,"torque":250,"type":"gas","code":"6VNAG4.3"},"transmission":{"name":"4A","equipmentType":"TRANSMISSION","availability":"STANDARD","transmissionType":"AUTOMATIC","numberOfSpeeds":"4"},"drivenWheels":"four wheel drive","numOfDoors":"4","options":[],"colors":[],"categories":{"market":"N/A","EPAClass":"SPORT_UTILITY_VEHICLES","vehicleSize":"Midsize","primaryBodyType":"SUV","vehicleStyle":"4dr SUV","vehicleType":"SUV"},"vin":"1GKDT13W4X2520901","squishVin":"1GKDT13WX2","years":[{"id":3528,"year":1999,"styles":[{"id":7768,"name":"4dr SUV 4WD","submodel":{"body":"SUV","modelName":"Envoy SUV","niceName":"suv"},"trim":"Base"}]},{"id":3529,"year":1999,"styles":[{"id":8145,"name":"SLE 4dr SUV 4WD","submodel":{"body":"SUV","modelName":"Jimmy SUV","niceName":"suv"},"trim":"SLE"},{"id":8147,"name":"SLT 4dr SUV 4WD","submodel":{"body":"SUV","modelName":"Jimmy SUV","niceName":"suv"},"trim":"SLT"},{"id":8614,"name":"SL 4dr SUV 4WD","submodel":{"body":"SUV","modelName":"Jimmy SUV","niceName":"suv"},"trim":"SL"}]}],"matchingType":"SQUISHVIN","MPG":{"highway":"19","city":"14"}}

attualmente devo inviare questa chiamata dal mio sito internet Asp utilizzando il linguaggio VB.net framework 4.5.
Sto sviluppando il codice non direttamente nella pagina asp ma nel file VB associato per comodità nella scrittura del codice.

Come posso inviare la chiamata e ricevere i dati in una variabile per formattarla successivamente?

ho fatto questo lavoro con un applicazione windows e l'utilizzo di un Webbrowser e quello che effettuavo era questa operazione:

Al termine del caricamento della pagina:
attribuisco il contenuto html in una variabile di testo:
testo=webbrowser.document.tostring
e da li incominciavo le letture partendo da un markup fino alla sua chiusura, con una serie di sub che leggevano i parametri partendo da degli indici ricavati dal markup cercato.

qualcuno mi può aiutare?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
per inviare una richiesta alla API puoi usare la classe HttpClient, che puoi ottenere da questo pacchetto NuGet.

La usi così:
Async Function ScaricaDatiDaApi() As Task(Of String)
    Using client As New HttpClient()
        Dim risposta = Await client.GetAsync("https://api.edmunds.com/api/vehicle/v2/vins/CODICEPASSATO?fmt=json&api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
        'Mi assicuro che la richiesta sia andata a buon fine. Altrimenti, viene sollevata un'eccezione
        risposta.EnsureSuccessStatusCode()
        'Questa è la variabile a cui viene assegnato il contenuto JSON
        Dim contenutoJson = Await risposta.Content.ReadAsStringAsync()
        Return contenutoJson
    End Using
End Function


Ora, se vuoi parsare la stringa restituita dalla funzione ScaricaDatiDaApi, puoi usare un altro pacchetto NuGet, Newtonsoft.JSON.
Dim contenutoJson As String = ScaricaDatiDaApi().Result
Dim oggettoJson = CType(JsonConvert.DeserializeObject(contenutoJson), JObject)


La variabile oggettoJson conterrà tutte le informazioni organizzate in una gerarchia di dizionari e liste. Ad esempio, per accedere alla proprietà "name" dell'oggetto "make", scrivi:
Dim name = oggettoJson("make")("name")


Se invece vuoi lavorare in maniera fortemente tipizzata, devi crearti delle classi che riflettano la struttura del JSON. Visual Studio ti può aiutare, perché se copi il JSON che hai postato e clicchi il menu Modifica -> Incolla speciale -> Incolla JSON come classi, ti verranno create automaticamente. A quel punto, nel deserializzare la stringa Json scrivi:
Dim oggetto As Rootobject = JsonConvert.DeserializeObject(Of Rootobject)(contenutoJson)

Dove Rootobject è il nome della classe creata da Visual Studio.

ciao,
Moreno
Modificato da BrightSoul il 23 maggio 2015 15.06 -

Enjoy learning and just keep making
1.508 messaggi dal 27 dicembre 2005
Modifica -> Incolla speciale -> Incolla JSON

Questa non la sapevo da paura :) !
5 messaggi dal 21 aprile 2015
Ciao scusami se ti rispondo con cosi tanto ritardo ho visto solo ora!!!
GRAZIE E GRAZIEEEEE E GRAZIEEEEEE ancora.
ora devo cercare di scaricare le librerie che mi hai mandato perche i link mi danno un 404 interno al sito come se l'articolo non fosse piu disponibile
5 messaggi dal 21 aprile 2015
Sono riuscito a scaricare i pacchetti!!! finalmente
ho installato tutto tramite la console e ora le librerie sono operative.
ma sicuramente sto sbagliando qualcosa perche la pagina rimane in un loop costante di cariacmento!!!
ti posto il codice

Imports System.Net.Http
Imports System.Threading.Tasks
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

Public Class chiamata_json
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim contenutoJson As String = ScaricaDatiDaApi().Result
Dim oggettoJson = CType(JsonConvert.DeserializeObject(contenutoJson), JObject)
Dim name = oggettoJson("make")("name")
End Sub

Async Function ScaricaDatiDaApi() As Task(Of String)
Using client As New HttpClient()
Dim risposta = Await client.GetAsync("https://api.edmunds.com/api/vehicle/v2/vins/XXXXXXX?fmt=json&api_key=XXXXXXXXXXX")
'Mi assicuro che la richiesta sia andata a buon fine. Altrimenti, viene sollevata un'eccezione
risposta.EnsureSuccessStatusCode()
'Questa è la variabile a cui viene assegnato il contenuto JSON
Dim contenutoJson = Await risposta.Content.ReadAsStringAsync()
Return contenutoJson
End Using
End Function
Modificato da operautomotive il 09 giugno 2015 10.50 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
hai ragione, avevo dimenticato un pezzo. La pagina in questo momento sta incappando in un deadlock. Il problema è spiegato molto bene qui:
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

Come soluzione, aggiungi un .ConfigureAwait(False) in coda al .GetAsync
Dim risposta = Await client.GetAsync("https://api.edmunds.com/api/vehicle/v2/vins/CODICEPASSATO?fmt=json&api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX").ConfigureAwait(False)


ciao,
Moreno

Enjoy learning and just keep making
5 messaggi dal 21 aprile 2015
Dopo la modifica apportata non si è piu bloccato!!! Ora è perfetto!!
Grazie ancora dell'aiuto!
8 messaggi dal 07 dicembre 2017
Ciao! Anche io sono interessato ad una funzione del genere! Ma come si installa il pacchetto per usare la classe HttpClient?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.