2013-10-02 6 views
6

Ich benutze YQL, um eine Reihe von Seiten zu holen, von denen einige offline sein können (offensichtlich weiß ich nicht welche). Ich bin mit dieser Abfrage:URLs zurückholen, während mehrere URLs mit YQL geladen werden

SELECT * FROM html WHERE url IN ("http://www.whooma.net", "http://www.dfdsfsdgsfagdffgd.com", "http://www.cnn.com") 

Wenn die ersten und die letzten tatsächliche Seiten sind, während die zweite offensichtlich nicht existiert. Zwei Ergebnisse werden tatsächlich zurückgegeben, aber die URL, von der sie geladen wurden, wird nirgends angezeigt. Also, wie könnte man herausfinden, welche HTML-Seite zu welcher URL gehört, wenn nicht jede Seite in der Abfrage geladen ist?

+0

Ich verstehe nicht. "* aber die URL, von der sie geladen wurden, erscheint nirgendwo *" Erwarten Sie, dass der obige Code das tut? "* finde heraus welche html Seite zu welcher URL gehört *" ein ??? – Oriol

+0

Ich dachte, es wäre klar, Entschuldigung! Lass mich das nochmal erklären. Ich lade eine Reihe von URLs, einige von ihnen werden geladen, dann werden die geladenen URLs in ein Array gepackt und zurück zu mir gesendet. Das Problem ist: Ich habe keinen Hinweis darauf, welche URL ich gefragt habe, entspricht jedes Element im Array. Also, anstatt nur Code, würde ich Paare von (URL, Daten) benötigen, so dass ich weiß, welche Daten welcher URL entsprechen und welche URLs nicht geladen wurden. –

Antwort

3

Leider kenne ich keinen Weg, wo Sie ein Schlüssel => Wert-Paar in der Antwort, wo Schlüssel die URL und Wert die HTML-Antwort ist. Aber können Sie die folgende Abfrage versuchen und sehen, ob es Ihren Anwendungsfall erfüllt:

select * from yql.query.multi where queries="select * from html where url='http://www.whooma.net';select * from feed where url='http://www.dfdsfsdgsfagdffgd.com';select * from html where url='http://www.cnn.com'" 

Probieren Sie es here. Was Sie tun können, ist vor dem Abfeuern der Abfrage, die Reihenfolge in einem Array der url in der queries wie so ['http://www.whooma.net','http://www.dfdsfsdgsfagdffgd.com','http://www.cnn.com'] zu halten. Wir können dieses Array aufrufen A Wenn Sie über die Antwort von der YQL-Abfrage iterieren, gibt die URL, die nicht existiert, eine Null zurück. Eine Probe-Antwort von der obigen Abfrage:

<results> 
    <results> 
    // Response from select * from html where url='http://www.whooma.net'. This should be some html 
    </results> 
    <results> 
    // Response from select * from feed where url='http://www.dfdsfsdgsfagdffgd.com'. This should be null. 
    </results> 
    <results> 
    // select * from html where url='http://www.cnn.com'. This should also be some html 
    </results> 
</results> 

Also abschließend, können Sie über Array A und Antwort von YQL iterieren. Das erste Element des Arrays A sollte dem ersten Element results (innere Ergebnisse) dieser YQL-Antwort entsprechen. Sie erstellen eine Hash-Map aus zwei Arrays. Ich weiß, dass die Antwort lang ist, aber ich denke, dass es gebraucht wurde. Lass es mich wissen, wenn es irgendeine Verwirrung gibt.

1

Sie können mithilfe des YQL-Diagnoseflags herausfinden, welche URLs nicht geladen werden. Das Diagnoseflag führt dazu, dass die Antwort eine diagnostics-Eigenschaft mit einem url-Array enthält, das angibt, ob die entsprechenden Server gefunden wurden. Wenn Sie die URLs entfernen, die nicht geladen wurden, stimmen die Ergebnisseiten vermutlich mit den verbleibenden URLs überein.