Autore Topic: json e gb.web  (Letto 557 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
json e gb.web
« il: 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
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:json e gb.web
« Risposta #1 il: 25 Dicembre 2015, 01:23:18 »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:json e gb.web
« Risposta #2 il: 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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:json e gb.web
« Risposta #3 il: 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
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:json e gb.web
« Risposta #4 il: 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}"
se corri, morirai stanco (motto degli sniper)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:json e gb.web
« Risposta #5 il: 28 Dicembre 2015, 21:47:19 »
Hai mica provato a usare Quote?
Magari insieme a &/
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:json e gb.web
« Risposta #6 il: 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.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:json e gb.web
« Risposta #7 il: 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.
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:json e gb.web
« Risposta #8 il: 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)
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:json e gb.web
« Risposta #9 il: 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}"
« Ultima modifica: 29 Dicembre 2015, 14:41:46 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:json e gb.web
« Risposta #10 il: 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"}]}
se corri, morirai stanco (motto degli sniper)