2

Wolfram Alphaでクエリを実行し、結果をUbiquityプレビューオブジェクトに表示する単純なUbiquityコマンドを作成しようとしています。

innerHTMLプレビューオブジェクトのを設定する必要があります。私は現在、HTMLを取得するためにこれを行っていますが、これはほんの始まりにすぎません。

//...
jQuery.get( 'http://www.wolframalpha.com/input/?i=' + input.text, 
    null, 
    function( page ) {
        previewBlock.innerHTML = page;
    }
);

私には2つの問題/質問があります:

  1. Wolframはページ上のすべてのHTMLを生成するのに5〜10秒かかるため、get()コマンドは不完全なHTMLを返します
    。ページが完全に読み込まれるのをどのように待つことができますか?

  2. 結果はid="results"Wolframページにあります。次のようにして結果を取得したいと思い
    previewBlock.innerHTML = page.getElementById('results').innerHTML
    ます。使用しているURLでこれを行うにはどうすればよいですか。

もう1つのオプションは、Wolfram URLをソースとして使用して新しい要素を作成し、それをに追加するpreviewBlockことです。ただし、その方法はわかりません。任意の提案をいただければ幸いです。

更新
これが私が使用しているユビキタススクリプトです-ソースHTMLから画像をフェッチし、ループで出力します。注:CmdUtils.previewGet(pblock, opt)呼び出しjQuery.get(opt)

CmdUtils.CreateCommand({
  name: "wolfram",
  takes: {"input": noun_arb_text},
  icon: "http://www.wolframalpha.com/favicon.ico",
  homepage: "http://www.wolframalpha.com",
  author: {name:"Jason Coon"},
  description: "Searches Wolfram Alpha and loads results in to Preview pane.",

  preview: function(pblock, input) {
    CmdUtils.previewGet(pblock,
      'http://www.wolframalpha.com/input/?i=' + input.text,
      null,
      function(data){
        var resultStart = data.indexOf("results",0);
        var beginPos = data.indexOf("<img src", resultStart);
        var endPos = 0;
        var html = ""
        while(beginPos != -1){
          endPos = data.indexOf(">", beginPos);
          html = html + "<br><br>" + data.substring(beginPos, endPos);
          beginPos = data.indexOf("<img src", endPos);
        }
        pblock.innerHTML = html;
      }
    );
  }
})
4

2 に答える 2

2

ユビキタスプレビューを使用しても、これは不可能だと思います。問題は、Wolframにリクエストを送信すると、ページの読み込みが非常に速く完了しますが、既にご存知のように、非同期で追加情報をフェッチし続けることです。

これがユビキタスプレビューではなくブラウザウィンドウを介して行われた場合は、実際にページを非表示のiframeに読み込んで、結果divを更新する前にコンテンツを確認できます。ただし、このオプションは、現在のバージョンのUbiquityでは使用できません。

これは、コマンドを実行して「USAGDP」というテキストを渡すスクリーンショットです。2つのdivは表示情報を取得し、さらに2つのdivは、ページの読み込みが完了するとすぐに、非同期で追加データのフェッチを開始します。
代替テキストhttp://exterbase.com/wolfram-result.png

于 2009-05-22T22:39:07.460 に答える
1

あなたのアイデアは実行可能だと思いますが、WA Webフロントエンドへの応答を解析しようとするよりも、Wolfram |AlphaAPIへのAJAX呼び出しの方が成功すると思います。WolframAlpha APIのドキュメントについては、こちらを参照してください:www.wolframalpha.com/WolframAlphaAPI.pdf

APIと対話するためのアプローチを変更すると、問題が解決するはずです。現在のアプローチを継続したい場合は、組み込みのWikipediaコマンドのコードを調べて、検索結果を解析し、プレビュー用に記事の要約を非同期的に取得する方法を確認することをお勧めします。

于 2009-05-25T14:01:21.863 に答える