¿Cómo recopilar datos de fuentes externas a través de servicios web utilizando JSL?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
Para un proyecto escolar, tengo que recopilar datos de las fuentes de dbpedia a través del servicio web. Leí en la guía de secuencias de comandos que puedo conectarme a un servidor externo con sockets. Lo intenté, pero el hecho es que cuando quiero ver los datos recuperados de dbpedia con un comando Mostrar, solo se muestra el encabezado de la respuesta. Cuando empiezo a depurar el código, milagrosamente puedo ver en la ventana de registro solo una parte de la respuesta.
Por favor, ¿hay alguien que pueda ayudarme a resolver el problema?
Adjunto el script JSL que escribí aquí.
Mejor,
Re: ¿Cómo recopilar datos de una fuente externa a través de servicios web utilizando JSL?Probé el bucle, buscando el código de retorno "ok". Se tarda unos 2 segundos para obtener los datos. La longitud del contenido puede no ser del todo correcta desde esa URL; utilícelo como una estimación, o ignórelo, y observe los códigos de retorno. cuando no hay más datos, el valor devuelto se ve así:
{"Recv", "CERRADO: no se recibieron datos", Char To Blob ("", "ascii ~ hex")}
el elemento 2 de la lista está "bien" hasta que el servidor remoto cierre la conexión.
(La carga del servidor puede cambiar mucho el resultado de 2 segundos, especialmente si otros están obteniendo los mismos datos al mismo tiempo).
Re: ¿Cómo recopilar datos de una fuente externa a través de servicios web utilizando JSL?Muchas gracias ! Funcionó ahora.
Lo hice concatenando el "Blob To Char" de los datos recibidos en un bucle While. De hecho, no logré concatenar las manchas directamente: el script se atasca en la ejecución. Ahora, mi script se ejecuta un poco más, pero se muestra el resultado esperado.
Cualquier truco para reducir el tiempo que lleva calcular el resultado es bienvenido.
Gracias de nuevo !
Re: ¿Cómo recopilar datos de una fuente externa a través de servicios web utilizando JSL?¡Ya casi has llegado! Lea la conexión una y otra vez hasta que se entreguen todos los datos. La << Recv regresa inmediatamente con cualquier dato disponible. El parámetro de longitud a recv limita la cantidad devuelta cada vez; no espera hasta que esté todo disponible.
(Corrí su código, subí por la rec., Luego la ejecuté por segunda vez y los datos fluyeron un poco más. puede obtenerlo todo si espera varios segundos. Si espera demasiado, la conexión se cerrará automáticamente.)
El encabezado le indica la cantidad de datos que puede esperar con Content-Length:
Bucle hasta que tenga tanto o obtenga un código de retorno incorrecto.
Puede concatenar los blobs a medida que los obtiene, luego convertirlos en texto; si hay caracteres de múltiples bytes en las burbujas binarias, se pueden dividir en los comandos recv y no decodificarse correctamente al final de una burbuja.