Comment collecter des données provenant de sources externes via des services Web utilisant JSL?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut à tous,
Pour un projet d’école, je dois collecter des données à partir de sources dbpedia via Webservice. J'ai lu dans le guide de script que je peux me connecter à un serveur externe avec des sockets. Je l'ai essayé, mais le fait est que, lorsque je souhaite afficher les données extraites de dbpedia avec une commande Show, seul l'en-tête de la réponse est affiché. Lorsque je commence à déboguer le code, miraculeusement, je ne vois dans la fenêtre de journal qu'une partie de la réponse!
S'il vous plaît, y a-t-il quelqu'un qui pourrait m'aider à résoudre le problème?
Je joins le script JSL que j'ai écrit ici.
Meilleur,
Re: Comment collecter des données depuis une source externe via des services Web utilisant JSL?J'ai essayé la boucle en vérifiant le code de retour "ok". Il faut environ 2 secondes pour obtenir les données. La longueur du contenu peut ne pas être assez exacte à partir de cette URL; utilisez-le comme une estimation ou ignorez-le et observez les codes de retour. quand il n'y a plus de données, la valeur renvoyée ressemble à ceci:
{"Recv", "CLOSED: aucune donnée reçue.", Char To Blob ("", "ascii ~ hex")}
L'élément 2 de la liste est "ok" jusqu'à ce que le serveur distant ferme la connexion.
(La charge du serveur peut changer beaucoup le résultat de 2 secondes, surtout si d'autres personnes récupèrent les mêmes données au même moment.)
Re: Comment collecter des données depuis une source externe via des services Web utilisant JSL?Merci beaucoup ! Cela a fonctionné maintenant.
Je l'ai fait en concaténant le "Blob To Char" des données reçues dans une boucle While. En fait, je n'ai pas réussi à concaténer directement les blobs: le script est bloqué à l'exécution. Maintenant, mon script est un peu plus long, mais le résultat attendu est affiché.
Toute astuce pour réduire le temps nécessaire au calcul du résultat est la bienvenue.
Merci encore !
Re: Comment collecter des données depuis une source externe via des services Web utilisant JSL?Vous êtes presque là! lisez la connexion encore et encore jusqu'à ce que toutes les données soient livrées. << recv retourne immédiatement avec toutes les données disponibles. Le paramètre length à recv limite le montant renvoyé à chaque fois; il n'attend pas que tout soit disponible.
(J'ai couru votre code, jusqu'à ce que le recv, puis couru le recv une deuxième fois et les données ont circulé un peu plus. vous pourriez tout avoir si vous attendez plusieurs secondes. si vous attendez trop longtemps, la connexion se fermera automatiquement.)
L'en-tête indique la quantité de données à attendre avec Content-Length:
Bouclez jusqu'à ce que vous ayez autant ou obtenir un mauvais code de retour.
Vous pouvez concaténer les blobs au fur et à mesure, puis les convertir en texte. s'il y a des caractères multi-octets dans les blobs binaires, ils peuvent être divisés en commandes recv et ne pas décoder correctement à la fin d'un blob.