2009-05-22 1 views
2

Wolfram Alpha에 대한 쿼리를 실행하고 유비 쿼티 미리보기 개체에 결과를 표시하는 간단한 Ubiquity 명령을 작성하려고합니다.jQuery + Ubiquity : URL에서 문서 객체 반환

미리보기 개체의 innerHTML을 설정해야합니다.

  1. 볼프람 페이지에있는 모든 HTML을 생성하기 위해 5 ~ 10 초 소요 :

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

    내가이 문제/질문 : 저는 현재 만 시작 인 HTML를 얻기 위해이 일을하고있다 , get() 명령은 불완전한 HTML을 반환합니다.
    어떻게 페이지가 완전히로드 될 때까지 기다릴 수 있습니까?

  2. 결과는 볼프람 페이지에 id="results"을 가지고, 난 그냥 이런 식으로 뭔가를 수행하여 결과를 얻을 싶습니다
    이는 내가 사용하고 URL을 함께 할 수있는 방법 previewBlock.innerHTML = page.getElementById('results').innerHTML
    ?

또 다른 옵션은 소스로 볼프람 URL을 사용하여 새 요소를 생성하고 previewBlock에 추가 할 수 있습니다 - 그래도 난 그렇게하는 방법을 모르겠어요. 모든 제안을 부탁드립니다.

UPDATE 여기
내가 사용하고 편재 스크립트입니다 - 그것은 루프의 소스 ​​HTML 출력을에서 이미지를 가져옵니다. 참고 : 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; 
     } 
    ); 
    } 
}) 
+0

먼저 "제한된 URI 거부 됨"오류를 어떻게 극복하고 있습니까? –

+0

유비 쿼티 (Ubiquity)가이를 처리하고 데이터를 가져올 수 있습니다. –

+0

편재 통화가 포함 된 코드를 게시 하시겠습니까? –

답변

2

나는 이것이 유비 미리보기를 사용하는 경우에도 가능하다고 생각하지 않습니다를 호출 CmdUtils.previewGet(pblock, opt). 문제는 Wolfram에 요청을 보낼 때 페이지로드가 매우 빠르게 끝나지만 이미 알고있는 것처럼 비동기 적으로 추가 정보를 가져 오는 것입니다.

유비 쿼티 미리보기 대신 브라우저 창을 통해이 작업을 수행했다면 실제로 숨겨진 iframe에 페이지를로드하고 결과 div를 업데이트하기 전에 내용을 확인할 수 있습니다. 그러나 현재 버전의 유비 쿼티에서는이 옵션을 사용할 수 없습니다.

다음은 명령을 실행하고 '미국 GDP'텍스트를 전달하는 스크린 샷입니다. 두 div는 표시 정보를 가져오고 두 번 더 페이지로드가 끝나면 비동기 적으로 추가 데이터를 가져옵니다. alt text http://exterbase.com/wolfram-result.png

1


나는 당신의 생각이 행할 생각하지만, 난 당신이 볼프람에 AJAX 호출로 더 성공해야합니다 생각 | 승-A 웹 프런트 엔드에 대한 응답을 분석하려고 노력보다는 알파 API를. WolframAlpha API에 대한 문서는 다음을 참조하십시오. www.wolframalpha.com/WolframAlphaAPI.pdf

API와 상호 작용하도록 접근 방식을 변경하면 문제가 해결 될 것입니다. 현재 접근법을 계속 추구하려면 내장 Wikipedia 명령의 코드를 검토하여 검색 결과를 구문 분석 한 방법을 확인한 다음 미리보기에 대한 기사 요약을 비동기 적으로 검색하는 것이 좋습니다.