Come raccogliere dati da fonti esterne tramite webservices usando JSL?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Per un progetto scolastico, devo raccogliere i dati da fonti DBB tramite webservice. Ho letto nella guida allo scripting che posso collegarmi a un server esterno con socket. L'ho provato, ma il fatto è che quando voglio visualizzare i dati recuperati da dbpedia con un comando Show, viene mostrata solo l'intestazione della risposta. Quando avvio il debug del codice, miracolosamente riesco a vedere nella finestra del registro solo una parte della risposta!
Per favore, c'è qualcuno che potrebbe aiutarmi a risolvere il problema?
Allego lo script JSL che ho scritto qui.
Migliore,
Ri: Come raccogliere dati da fonti esterne tramite webservices usando JSL?Ho provato il ciclo, controllando il codice di ritorno "ok". Ci vogliono circa 2 secondi per ottenere i dati. La lunghezza del contenuto potrebbe non essere del tutto corretta da quell'URL; utilizzalo come stima o ignoralo e guarda i codici di ritorno. quando non ci sono più dati, il valore restituito assomiglia a questo:
{"Recv", "CHIUSO: nessun dato ricevuto.", Char To Blob ("", "ascii ~ hex")}
l'elemento 2 nell'elenco è "ok" finché il server remoto non chiude la connessione.
(Il carico del server potrebbe cambiare molto il risultato di 2 secondi, specialmente se altri stanno recuperando gli stessi dati nello stesso momento.)
Ri: Come raccogliere dati da fonti esterne tramite webservices usando JSL?Grazie mille ! Ha funzionato ora.
L'ho fatto concatenando il "Blob to Char" dei dati ricevuti in un ciclo While. In effetti, non sono riuscito a concatenare direttamente i BLOB: la sceneggiatura si ferma all'esecuzione. Ora, il mio script gira un po 'più a lungo ma viene mostrato il risultato atteso.
Qualsiasi trucco per ridurre il tempo necessario per calcolare il risultato è il benvenuto.
Grazie ancora !
Ri: Come raccogliere dati da fonti esterne tramite webservices usando JSL?Ci sei quasi! leggere la connessione ancora e ancora fino alla consegna di tutti i dati. il << recv ritorna immediatamente con tutti i dati disponibili. Il parametro length to recv limita l'importo restituito ogni volta; non aspetta che sia tutto disponibile.
(Ho eseguito il tuo codice, attraverso il recv, poi ho eseguito il recv una seconda volta e i dati ne sono usciti un po 'di più. potresti ottenere tutto se aspetti diversi secondi. se aspetti troppo a lungo, la connessione si chiuderà automaticamente).
L'intestazione indica quanti dati aspettarsi con Content-Length:
Fai il ciclo fino a quando non hai così tanto o ottieni un brutto codice di ritorno.
È possibile concatenare i BLOB man mano che si ottengono, quindi convertire in testo; se ci sono caratteri multi-byte nei BLOB binari, questi potrebbero essere suddivisi tra comandi RECV e non decodificati correttamente alla fine di un BLOB.