2013-10-02 47 views
6

我使用YQL獲取一堆網頁,其中一些網頁可能處於脫機狀態(顯然我不知道哪些網頁)。我使用這個查詢:使用YQL加載多個網址時找回網址

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

當第一個和最後一個是實際的點,而第二個顯然不存在。實際返回兩個結果,但它們加載位置的URL不會出現在任何地方。那麼,如果不是查詢中的每個頁面都加載了哪個網址,那麼怎樣才能找出哪個網頁屬於哪個網址?

+0

我不明白。 「*但是它們加載的地址不會出現在任何地方*」您是否期望上面的代碼能夠這樣做? 「*找出哪個網頁屬於哪個網址*」eing ??? – Oriol

+0

我以爲很清楚,對不起!讓我再解釋一遍。我加載了一堆網址,其中一些被加載,然後加載的網址被打包成一個數組併發回給我。問題是:我沒有暗示我詢問了哪個網址與數組中的每個元素相對應。因此,我不再需要代碼,而是需要使用(url,data)的幾對,以便知道哪些數據對應於哪個url,哪些url未加載。 –

回答

3

不幸的是,我不知道一種方式,您可以在響應中獲得key =>值對,其中key是url和value是html響應。但是,您可以嘗試以下查詢並查看它是否符合您的使用案例:

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'" 

試試吧here。你可以做的是在觸發查詢之前,維護url的數組中的訂單,如queries,如 ['http://www.whooma.net','http://www.dfdsfsdgsfagdffgd.com','http://www.cnn.com']。我們可以調用這個數組A當您迭代YQL查詢的響應時,不存在的url將返回null。從上面的查詢樣本響應:

<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> 

所以在最後,你可以從YQL遍歷數組A和響應。數組A的第一個元素應該對應於該YQL響應的第一個results(內部結果)元素。即你正在從兩個數組創建一個hashmap。我知道答案很長,但我認爲這是必要的。如果有任何混淆,請告訴我。

1

您可以通過使用YQL診斷標誌來確定哪些URL未加載。診斷標誌將導致響應包含一個diagnostics屬性,其中url數組指示是否找到相應的服務器。據推測,一旦你消除沒有加載的網址,結果頁面將與剩餘的網址匹配。