Lettura di dati da un servizio WebApi REST tramite task

' In questo esempio viene effettuata la chiamata ad un servizio WebApi REST messo a disposizione dal servizio "Allerta Meteo" della regione Emilia-Romagna che restituisce i livelli idrometrici del fiume Reno in 3 località diverse. 
' Il codice può essere inserito in un task per la lettura periodica.

Dim Q as new QWTable
Q.Database=DB
Q.sql="select * from IOTLOG"
Q.allowallrecords=false
Q.active=true

' Stazioni di lettura
dim sensors= new dbarray("BONCONVENTO","CHIUSA CASALECCHIO","SASSO MARCONI")

' Url web service corrispondente
Dim urls As new Dbarray
urls(1)= "https://allertameteo.regione.emilia-romagna.it/api/jsonws/datiTempoReale-prevPiog-portlet.img/get-time-series/?stazione=-/1131382,4460927/simnbo&variabile=254,0,0/1,-,-,-/B13215" 
urls(2)= "https://allertameteo.regione.emilia-romagna.it/api/jsonws/datiTempoReale-prevPiog-portlet.img/get-time-series/?stazione=-/1128243,4447318/simnbo&variabile=254,0,0/1,-,-,-/B13215"
urls(3)= "https://allertameteo.regione.emilia-romagna.it/api/jsonws/datiTempoReale-prevPiog-portlet.img/get-time-series/?stazione=-/1124785,4438151/simnbo&variabile=254,0,0/1,-,-,-/B13215"
   
dim f as integer

for f=1 to urls.size  
   Dim webClient As New System.Net.WebClient
   Dim json As String = webClient.DownloadString(Urls(f))

   ' Recupero della risposta
   Dim obj As Newtonsoft.Json.Linq.JArray = Newtonsoft.Json.Linq.JArray.Parse(json)
   Dim i as integer
   Dim Data As DateTime
   Dim Valore as Double

   for i=0 to obj.count-1
    ' Il quarto nodo è quello dei Values
    Data=DateAdd(Dateinterval.Second,ctype(obj(i)("t"),Newtonsoft.Json.Linq.JValue).value/1000,New Date(1970,1,1,0,0,0)).toLocalTime
    Valore=ctype(obj(i)("v"),Newtonsoft.Json.Linq.JValue).value
   if not empty(Data) and not empty(Valore)
      if not q.rowset.findkey(data,"RENO",sensors(f))
          q.beginappend()
          q.replace("DATA",data)
          q.replace("DEVICENAME","RENO")
          q.replace("SENSORNAME",sensors(f))
      End If
      q.replace("VALUE",Valore)
      q.saverecord()
    End If 
   next
Next
Q.active=false