我目前正在使用此YQL(Yahoo查询语言)查询将JSON从站点转换为JSONP:
select * from json where url="http://airportcode.riobard.com/airport/ABC?fmt=JSON"
ABC
是参数。
所以我知道YQL的设计与SQL类似,我认为有一些功能可以让你进行连接,但我不确定是否可以使用这些功能将多个查询组合到这个airportcode网站一个请求。 (该网站不支持此功能,并且该网站的所有者未回复我的电子邮件查询。)
基本上我想要一个YQL查询,在一次调用中不仅会获得ABC
的结果,还会获得ABC
,XYZ
,FOO
的结果。有可能吗?
答案 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
信息)。
从这些网址获取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)功能
这次的结果如下。
轻松查询
我非常喜欢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)
是<!/强>
它不会使用像join
,query.multi
或execute
那样复杂的内容。在寻找这些选项后,我终于发现它比只需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"
我想知道是否有一种更简洁的方法可以在没有重复的类似网址的情况下进行。