2009-05-22 8 views
2

Ich versuche, einen einfachen Ubiquity-Befehl zu schreiben, der eine Abfrage unter Wolfram Alpha ausführt und die Ergebnisse im Ubiquity-Vorschauobjekt anzeigt.jQuery + Ubiquity: Zurückgeben eines Dokumentobjekts aus einer URL

Ich muss die innerHTML des Vorschauobjekts festlegen. Ich tue dies derzeit die HTML zu erhalten, die nur ein Anfang:

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

Ich habe 2 Probleme/Fragen:

  1. Wolfram dauert 5-10 sec alle HTML auf der Seite zu generieren , so der get() Befehl gibt unvollständiges HTML zurück
    Wie kann es warten, bis die Seite vollständig geladen wird?

  2. Die Ergebnisse haben id="results" auf der Wolfram-Seite, würde Ich mag nur die Ergebnisse erhalten, indem so etwas wie dies zu tun:
    previewBlock.innerHTML = page.getElementById('results').innerHTML
    Wie kann dies mit der URL erfolgt ich verwende?

Eine weitere Option könnte ein neues Element mit der Wolfram-URL als Quelle zu erstellen sein und hängen Sie ihn an previewBlock - Ich bin nicht sicher, wie dass, obwohl zu tun. Irgendwelche Vorschläge würden geschätzt werden.

UPDATE
Hier ist die Allgegenwart Skript Ich verwende - Es wird die Bilder von der Quelle HTML und geben sie in einer Schleife holen. Hinweis: 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; 
     } 
    ); 
    } 
}) 
+0

Zunächst, wie kommst du über den "eingeschränkten URI verweigert" Fehler? –

+0

Ubiquity scheint sich darum zu kümmern und kann die Daten abrufen. –

+0

Bitte geben Sie den Code ein, der den Allgegenwart enthält? –

Antwort

2

nennt Ich glaube nicht, dies überhaupt möglich ist die Ubiquity Vorschau verwenden. Das Problem besteht darin, dass beim Senden der Anforderung an Wolfram die Ladevorgang der Seite sehr schnell beendet wird, aber weiterhin asynchron weitere Informationen abgerufen werden, wie Sie bereits wissen.

Wenn dies über ein Browserfenster anstelle der Ubiquity-Vorschau erfolgt, können Sie die Seite tatsächlich in einen versteckten iFrame laden und den Inhalt überprüfen, bevor Sie das Ergebnisdiv aktualisieren. Diese Option ist jedoch in der aktuellen Version von Ubiquity nicht verfügbar.

Hier ist ein Screenshot, wie Sie Ihren Befehl ausführen und den Text "USA GDP" übergeben. Zwei divs erhalten Anzeigeinformationen und zwei weitere starten asynchron weitere Daten, sobald die Seite vollständig geladen ist.
alt text http://exterbase.com/wolfram-result.png

1

Ich denke, Ihre Idee machbar ist, aber ich denke, Sie mehr Erfolg mit einem AJAX-Aufruf an dem Wolfram haben werden | Alpha API als durch den Versuch eine Antwort auf den W-A Web-Frontend zu analysieren. Weitere Informationen zur WolframAlpha-API finden Sie hier: www.wolframalpha.com/WolframAlphaAPI.pdf

Ich denke, wenn Sie Ihren Ansatz ändern, um mit der API zu interagieren, sollten Sie Ihre Probleme lösen. Wenn Sie Ihren aktuellen Ansatz weiter verfolgen möchten, sollten Sie den Code für den integrierten Wikipedia-Befehl untersuchen, um zu sehen, wie sie die Suchergebnisse analysieren und dann Artikelzusammenfassungen für die Vorschau asynchron abrufen.

Verwandte Themen