Wie sammle ich Daten aus externen Quellen über Webservices mit JSL?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo allerseits,
Für ein Schulprojekt muss ich über Webservice Daten aus dbpedia-Quellen sammeln. Ich habe in der Skript-Anleitung gelesen, dass ich mich über Sockets mit einem externen Server verbinden kann. Ich habe es versucht, aber Tatsache ist, dass, wenn ich die mit dbpedia abgerufenen Daten mit einem Befehl Anzeigen anzeigen möchte, nur der Header der Antwort angezeigt wird. Wenn ich mit dem Debuggen des Codes beginne, kann ich auf wundersame Weise im Protokollfenster nur einen Teil der Antwort sehen!
Gibt es jemanden, der mir helfen könnte, das Problem zu lösen?
Ich füge das hier geschriebene JSL-Skript bei.
Beste,
Betreff: Wie werden Daten aus externen Quellen über Webservices mit JSL gesammelt?Ich habe die Schleife ausprobiert und nach dem Rückkehrcode "ok" gesucht. Es dauert ungefähr 2 Sekunden, um die Daten abzurufen. Die Länge des Inhalts stimmt möglicherweise nicht mit dieser URL überein. Verwenden Sie es als Schätzwert oder ignorieren Sie es und beobachten Sie die Rückgabecodes. Wenn keine Daten mehr vorhanden sind, sieht der zurückgegebene Wert folgendermaßen aus:
{"Recv", "CLOSED: Keine Daten empfangen.", Char To Blob ("", "ascii ~ hex")}
Punkt 2 in der Liste ist "OK", bis der Remote-Server die Verbindung beendet.
(Die Auslastung des Servers kann das 2-Sekunden-Ergebnis stark verändern, insbesondere wenn andere gleichzeitig dieselben Daten abrufen.)
Betreff: Wie werden Daten aus externen Quellen über Webservices mit JSL gesammelt?Vielen Dank ! Es hat jetzt funktioniert.
Ich habe es gemacht, indem ich den "Blob To Char" der empfangenen Daten in einer While-Schleife verkettete. Tatsächlich gelang es mir nicht, die Blobs direkt zu verketten: Das Skript bleibt bei der Ausführung hängen. Jetzt läuft mein Skript etwas länger, aber das erwartete Ergebnis wird angezeigt.
Jeder Trick, um die Zeit zu reduzieren, die zur Berechnung des Ergebnisses benötigt wird, ist willkommen.
Danke nochmal !
Betreff: Wie werden Daten aus externen Quellen über Webservices mit JSL gesammelt?Du bist fast da! Lesen Sie die Verbindung immer wieder, bis alle Daten übermittelt sind. Das << recv kehrt sofort mit allen verfügbaren Daten zurück. Der Längenparameter von recv begrenzt den Betrag, der jedes Mal zurückgegeben wird. es wartet nicht, bis alles verfügbar ist.
(Ich habe Ihren Code durch den Recv-Code gelaufen, dann den Recv-Vorgang ein zweites Mal ausgeführt, und die Daten flossen noch etwas weiter. Sie erhalten vielleicht alles, wenn Sie einige Sekunden warten. Wenn Sie zu lange warten, wird die Verbindung automatisch geschlossen.)
In der Kopfzeile erfahren Sie, wie viele Daten mit Content-Length zu erwarten sind:
Wiederholen Sie die Schleife, bis Sie so viel haben oder einen schlechten Rückgabecode erhalten.
Sie können die Blobs nach Belieben verketten und dann in Text konvertieren. Wenn in den Binär-Blobs Multibyte-Zeichen enthalten sind, werden sie möglicherweise auf recv-Befehle aufgeteilt und nicht korrekt am Ende eines Blobs decodiert.