Gambas-it

Gambas3 => Programmazione => Topic aperto da: allegfede - 24 Dicembre 2015, 19:00:04

Titolo: json e gb.web
Inserito da: allegfede - 24 Dicembre 2015, 19:00:04
salve ragazzi.
E' da tanto che manco dal forum e l'occasione e' lieta per augurarvi buone feste :D

A questo punto, ritorno su un mio vecchio progetto che necessitava di interrogare e comandare un server remoto attraverso comandi JSON (http://kodi.wiki/view/JSON-RPC_API/v6).

Al tempo non c'era nulla di "cucinato" ma mi sembra di capire che l'attuale versione di GB.WEB supporta il parsing dei dati JSON http://gambaswiki.org/wiki/comp/gb.web .

Qualcuno ha avuto esperienze al riguardo? C'e' un esempio nell'IDE "normale" di gambas (io ho la developing)?

Con questo post interrogativo, vi auguro buone feste e a risentirci ASAP (as soon as possible) :D
Titolo: Re:json e gb.web
Inserito da: vuott - 25 Dicembre 2015, 01:23:18
Ho trovato questa cosa nel forum spagnolo:

http://jsbsan.blogspot.com.es/2015/04/gambas3-ejemplo-de-json-y-extraer-datos.html
Titolo: Re:json e gb.web
Inserito da: vuott - 25 Dicembre 2015, 21:17:13
Facendo qualche prova con il componente da te segnalato, poniamo il caso di avere questo file .json:

Codice: [Seleziona]
{
    "glossary": {
        "title": "example glossary",
"GlossDiv": {
            "title": "S",
"GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
                    },
"GlossSee": "markup"
                }
            }
        }
    }
}
Ogni oggetto json  inizia con { (parentesi graffa sinistra) e finisce con } (parentesi graffa destra), e in Gambas รจ rappresentato da un oggetto Collection.

Ho provato l'interpretazione di quel file.json con il seguente codice (scritto in modo molto didattico):
Codice: [Seleziona]
Public Sub Main()
 
  Dim coll1, coll2, coll3, coll4, coll5, coll6, coll7 As Collection
 
    coll1 = jSON.Decode(File.Load("/tmp/file.json"), False)
   
    coll2 = coll1["glossary"]
    Print coll2["title"]
   
    coll3 = coll2["GlossDiv"]
    Print coll3["title"]
   
    coll4 = coll3["GlossList"]
   
    coll5 = coll4["GlossEntry"]
    Print coll5["ID"]
    Print coll5["SortAs"]
    Print coll5["GlossTerm"]
    Print coll5["Acronym"]
    Print coll5["Abbrev"]
   
    coll6 = coll5["GlossDef"]
    Print coll6["para"]
    Print coll6["GlossSeeAlso"][0]
    Print coll6["GlossSeeAlso"][1]
   
    coll7 = coll4["GlossEntry"]
    Print coll7["GlossSee"]
   
End
Titolo: Re:json e gb.web
Inserito da: allegfede - 28 Dicembre 2015, 13:40:40
ho scaricato l'esempio dello sviluppatore spagnolo, ho richiesto a open weather map la mia ID key che poi va messa nell'url per le richieste dei dati (altrimenti non funziona), cosi':
Codice: [Seleziona]
Public Sub ButtonMostrarTiempo_Click()

  Dim informacioPaginaWeb As String
  Dim ruta As String

  ruta = "http://api.openweathermap.org/data/2.5/weather?appid=mettilatuaAPIkey&q=" & Replace(ComboBoxCiudad.Text, " ", "_")
  'ruta = "http://api.openweathermap.org/data/2.5/weather?q=" & Replace(ComboBoxCiudad.Text, " ", "_")

ora inizio a studiare anche come mandare e ricevere informazioni da e con un server web :D

grazie per le dritte Vuott.

Buone feste :D
Titolo: Re:json e gb.web
Inserito da: allegfede - 28 Dicembre 2015, 20:28:37
stop sperimentando un po' e sembra che ne stia venendo a capo ... ma uno dei problemi piu' grandi e0 che i comand json sono pieni di virgolette "

tipo:
Codice: [Seleziona]
{"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}

come posso definirle in una stringa da usare alla bisogna?

ho provato cosi':
Codice: [Seleziona]
Public PlayPause As String = "{\"jsonrpc\":\"2.0\",\"method\":\"Player.PlayPause\",\"params\":{\"playerid\":1},\"id\":1}"

utilizzando il backslash come escape .. ma poi mi si porta dietro lo stesso backslash quando utilizzo l'url:
Codice: [Seleziona]
rotta = "http://" & TextBox_IP.Text & ":" & MaskBox_Port.Text & "/jsonrpc?request=" & kodi.PlayPause

mi ritorna una cosa del genere:
Codice: [Seleziona]
"http://192.168.1.17:80/jsonrpc?request={\"jsonrpc\":\"2.0\",\"method\":\"Player.PlayPause\",\"params\":{\"playerid\":1},\"id\":1}"
Titolo: Re:json e gb.web
Inserito da: Gianluigi - 28 Dicembre 2015, 21:47:19
Hai mica provato a usare Quote?
Magari insieme a &/
Titolo: Re:json e gb.web
Inserito da: vuott - 28 Dicembre 2015, 23:56:36
...mi si porta dietro lo stesso backslash quando utilizzo l'url
Non ho capito  :-\ in quale caso ti riporta il backslash utilizzando l'URL.
Titolo: Re:json e gb.web
Inserito da: allegfede - 29 Dicembre 2015, 13:26:02
Vuott il problema e' che quando passo la stringa:
Codice: [Seleziona]
"http://192.168.1.17:80/jsonrpc?request={\"jsonrpc\":\"2.0\",\"method\":\"Player.PlayPause\",\"params\":{\"playerid\":1},\"id\":1}"

al codice che la invia via http al server web, questo non la interpreta bene, perche' si aspetta:
Codice: [Seleziona]
"http://192.168.1.17:80/jsonrpc?request={"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}"

... voglio provare a sostituire i " con i ' e vedere se per il server web sono equivalenti.
Titolo: Re:json e gb.web
Inserito da: allegfede - 29 Dicembre 2015, 14:13:09
ok!
Quote e' la soluzione :D

allego il progettino che sara' il punto di partenza del sistema di automazione :D

ora dovro' implementare un certo polling dello stato ed un giorno implementare gli eventi server-side (quando un file finisce avverte :D)
Titolo: Re:json e gb.web
Inserito da: vuott - 29 Dicembre 2015, 14:40:24
Quote e' la soluzione
E' un'ottima soluzione, ma... forse la soluzione ce l'avevi proprio davanti agli occhi....

Codice: [Seleziona]
'tipica richiesta al player con kodi/xbmc:
'http://192.168.1.17/jsonrpc?request={%22jsonrpc%22:%20%222.0%22,%20%22id%22:%201,%20%22method%22:%20%22Playlist.GetPlaylists%22}

Mi fai sapere se quest'altra soluzione (senza utilizzare apposta funzione Gambas) va bene ?
Codice: [Seleziona]
Public PlayPause As String = "{\x22jsonrpc\x22:\x222.0\x22,\x22id\x22:1,\x22method\x22:\x22Playlist.GetPlaylists\x22}"
Titolo: Re:json e gb.web
Inserito da: allegfede - 30 Dicembre 2015, 13:44:28
si funziona bene e restituisce informazioni correttaemnte:
Codice: [Seleziona]
{"id":1,"jsonrpc":"2.0","result":[{"playlistid":0,"type":"audio"},{"playlistid":1,"type":"video"},{"playlistid":2,"type":"picture"}]}