是否有可能让YQL在单个请求中从站点返回多个JSON结果?

时间:2011-12-20 16:55:10

标签: json join yql

我目前正在使用此YQL(Yahoo查询语言)查询将JSON从站点转换为JSONP:

select * from json where url="http://airportcode.riobard.com/airport/ABC?fmt=JSON"

ABC是参数。

所以我知道YQL的设计与SQL类似,我认为有一些功能可以让你进行连接,但我不确定是否可以使用这些功能将多个查询组合到这个airportcode网站一个请求。 (该网站不支持此功能,并且该网站的所有者未回复我的电子邮件查询。)

基本上我想要一个YQL查询,在一次调用中不仅会获得ABC的结果,还会获得ABCXYZFOO的结果。有可能吗?

2 个答案:

答案 0 :(得分:4)

您还可以充分利用uritemplate表格将机场代码转换为一组网址,然后将这些网址提供给json表。

机场代码到网址

uritemplate表采用“模板”和任意数量的值来填充该模板。 (另见URI Template草案)。

在这种情况下,需求很简单,只需将机场代码注入适当位置的路径即可。

select * from uritemplate where
template="http://airportcode.riobard.com/airport/{airport}?fmt=JSON"
and airport in ("SFO", "LAX", "LHR")

Try this query in the YQL console)功能

这给出了以下结果(为简单起见,删除了diagnostics信息)。

result of query

从这些网址获取JSON结果

现在我们有了一个URL列表,使用json表来检查每个URL的JSON就足够了。事实上,我们已经使用了上面的子选择,可以通过in (…)语法识别。

select * from json where url in (
    select url from uritemplate 
    where template="http://airportcode.riobard.com/airport/{airport}?fmt=JSON" 
    and airport in ("SFO", "LAX", "LHR")
)

sub-select)功能

这次的结果如下。

query result

轻松查询

我非常喜欢YQL Try this query in the YQL console(以及相关的变量替换,如@var),它可以为您提供整洁的端点,而无需嵌入YQL查询到URL。上面的链接详细说明了如何创建它们,最终结果是你可以有一个YQL查询,如下面的那个。

select * from json where url in (
    select url from uritemplate where 
    template="http://airportcode.riobard.com/airport/{airport}?fmt=JSON" 
    and airport in (@ap)
)

使用查询别名(我称之为airports),可以通过下面的网址访问查询,并且可以轻松地轻松更改或添加更多/更少的机场代码。

http://query.yahooapis.com/v1/public/yql/peter/airports?ap=SFO&ap=LHR&ap=BOB

query aliases。注意:我可能会删除此别名,恕不另行通知。)

读:

答案 1 :(得分:1)

是<!/强>

它不会使用像joinquery.multiexecute那样复杂的内容。在寻找这些选项后,我终于发现它比只需or并重复使用url=,每个参数一个更简单:

select * from json where url="http://airportcode.riobard.com/airport/LAX?fmt=JSON"
  or url="http://airportcode.riobard.com/airport/SFO?fmt=JSON"
  or url="http://airportcode.riobard.com/airport/LHR?fmt=JSON"

我想知道是否有一种更简洁的方法可以在没有重复的类似网址的情况下进行。