2

我正在尝试编写一个简单的Ubiquity命令,该命令将在Wolfram Alpha上运行查询,并在 Ubiquity 预览对象中显示结果。

我需要设置innerHTML预览对象的。我目前正在这样做以获取 HTML,这只是一个开始:

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

我有 2 个问题/问题:

  1. Wolfram 需要 5-10 秒来生成页面上的所有 HTML,因此该get()命令返回不完整的 HTML
    如何等待页面完全加载?

  2. 结果id="results"在 Wolfram 页面上,我想通过执行以下操作来获得结果:
    previewBlock.innerHTML = page.getElementById('results').innerHTML
    如何使用我正在使用的 URL 来完成?

另一种选择可能是使用 Wolfram URL 作为源创建一个新元素并将其附加到previewBlock-- 我不知道该怎么做。任何建议,将不胜感激。

更新
这是我正在使用的 Ubiquity 脚本——它将从源 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

我认为这甚至不可能使用Ubiquity Preview。问题是,当向 Wolfram 发送请求时,页面完成加载非常快,但它继续异步获取附加信息,正如您已经知道的那样。

如果这是通过浏览器窗口而不是 Ubiquity 预览完成的,您实际上可以将页面加载到隐藏的 iframe 中并在更新结果 div 之前检查内容。但是,此选项在当前版本的 Ubiquity 中不可用。

这是运行命令并传递文本“USA GDP”的屏幕截图。页面加载完成后,两个 div 获取显示信息,另外 2 个开始异步获取附加数据。
替代文字 http://exterbase.com/wolfram-result.png

于 2009-05-22T22:39:07.460 回答
1

我认为您的想法是可行的,但我认为通过 AJAX 调用 Wolfram|Alpha API 比尝试解析对 WA Web 前端的响应更成功。有关 WolframAlpha API 的文档,请参见此处:www.wolframalpha.com/WolframAlphaAPI.pdf

我认为改变你与 API 交互的方法应该可以解决你的问题。如果您想继续采用当前方法,您可能需要检查内置 Wikipedia 命令的代码,以了解它们如何解析搜索结果,然后异步检索文章摘要以进行预览。

于 2009-05-25T14:01:21.863 回答