我正在使用YQL来获取一堆页面,其中一些页面可能处于脱机状态(显然我不知道哪些页面)。我正在使用此查询:
SELECT * FROM html WHERE url IN ("http://www.whooma.net", "http://www.dfdsfsdgsfagdffgd.com", "http://www.cnn.com")
第一个和最后一个是实际网站,而第二个显然不存在。实际上返回了两个结果,但是加载它们的URL不会出现在任何地方。那么,如果没有加载查询中的每个页面,那么找出哪个html页面属于哪个url的方法是什么?
答案 0 :(得分:3)
不幸的是,我不知道如何在响应中获得key =>值对,其中key是url,而值是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>
总而言之,您可以迭代数组A
和YQL的响应。数组A
的第一个元素应该对应于该YQL响应的第一个results
(内部结果)元素。即您正在从两个数组创建一个hashmap。我知道答案很长,但我认为这是必要的。如果有任何混淆,请告诉我。
答案 1 :(得分:1)
您可以使用YQL诊断标志找出未加载的网址。诊断标志将使响应包含diagnostics
属性,其中包含url
数组,指示是否找到相应的服务器。据推测,一旦您消除了未加载的网址,结果页面将与其余网址匹配。