使用YQL加载多个URL时获取URL

时间:2013-10-02 20:13:52

标签: html url load yql

我正在使用YQL来获取一堆页面,其中一些页面可能处于脱机状态(显然我不知道哪些页面)。我正在使用此查询:

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

第一个和最后一个是实际网站,而第二个显然不存在。实际上返回了两个结果,但是加载它们的URL不会出现在任何地方。那么,如果没有加载查询中的每个页面,那么找出哪个html页面属于哪个url的方法是什么?

2 个答案:

答案 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。您可以执行的操作是在触发查询之前,将序列维护在urlqueries的数组中,就像这样 ['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数组,指示是否找到相应的服务器。据推测,一旦您消除了未加载的网址,结果页面将与其余网址匹配。