JSLを使用してWebサービスを介して外部ソースからデータを収集する方法<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />皆さんこんにちは、
学校のプロジェクトでは、Webサービスを介してdbpediaのソースからデータを収集する必要があります。スクリプトガイドで、ソケットを使って外部サーバーに接続できることを読みました。私は試しましたが、実際には、表示コマンドを使用してdbpediaから取得したデータを表示したい場合、応答のヘッダーだけが表示されます。コードのデバッグを開始すると、奇妙なことにログウィンドウには応答の一部しか表示されません。
問題の解決を手伝ってくれる人はいますか。
ここで書いたJSLスクリプトを添付します。
ベスト、
再:どのようにJSLを使用してWebサービスを介して外部ソースからデータを収集するのですか?"ok"リターンコードをチェックしながら、ループを試しました。 データを取得するのに約2秒かかります。 コンテンツの長さは、そのURLからは正しくないかもしれません。見積もりとして使用するか、または無視して、戻りコードを監視してください。 データがなくなると、戻り値は次のようになります。
{「Recv」、「CLOSED:データを受信していません。」、BLOBへの文字( ""、"ascii〜hex")}
リストの項目2は、リモートサーバーが接続を閉じるまで「OK」です。
(特に、他の人が同じデータを同時にフェッチしている場合は、サーバーの負荷によって2秒の結果が大きく変わる可能性があります。)
再:どのようにJSLを使用してWebサービスを介して外部ソースからデータを収集するのですか?どうもありがとうございました !今はうまくいった。
Whileループで受信データの "Blob To Char"を連結することによってそれを行いました。実際、BLOBを直接連結することはできませんでした。スクリプトが実行時に停止します。今、私のスクリプトは少し長く実行されますが、期待される結果が表示されます。
結果を計算するのにかかる時間を減らすためのどんなトリックでも歓迎です。
ありがとうございました !
再:どのようにJSLを使用してWebサービスを介して外部ソースからデータを収集するのですか?あなたはもうすぐそこにいます!すべてのデータが配信されるまで、接続を何度も読みます。 << recvは、利用可能なデータをすぐに返します。 recvのlengthパラメータは毎回返される量を制限します。すべて利用可能になるまで待ちません。
(私はrecvまであなたのコードを実行し、それからrecvを二度目に実行し、そしてデータはもう少し流れた。 あなたが数秒待つならあなたはそれをすべて手に入れるかもしれません。 あなたがあまりにも長く待つならば、接続は自動的に閉じます。)
ヘッダーは、Content-Lengthでどのくらいのデータが必要かを示します。
それ以上になるまで、または悪い戻りコードが出るまで、ループしてください。
取得したブロブを連結してからテキストに変換できます。バイナリBLOBにマルチバイト文字がある場合、それらはrecvコマンド間で分割され、BLOBの最後で正しくデコードされない可能性があります。