使用雅虎API,如何获得与具有可用天气数据的特定前缀相匹配的位置列表

问题描述:

我有一个应用程序(其中包括)使用Yahoo Weather API来显示用户所选位置的天气状况。使用雅虎API,如何获得与具有可用天气数据的特定前缀相匹配的位置列表

在用户可以输入位置的配置对话框中,我很乐意提供自动填充功能,以便在用户输入位置名称时,建议匹配城市列表。

我可以使用YQL来获取匹配前缀的位置,即:

select * from geo.places where text = 'Vie*'

但问题是,并非每个位置都有与之相关联的气象站,我很想跳过这些在我的自动完成列表。

使用社区表(表称为weather.woeid),下面的查询将同前面的查询与天气API,返回只有做有气象站位置:

select location from weather.woeid where w in (select woeid from geo.places where text = 'Vie*')

这几乎解决了我的问题,除了之前的查询(产生与天气api调用相同的结果)没有返回WOEID,也没有任何类型的标识符可用于配置后直接查询Weather API。我如何捕获连接参数w的值?我尝试了类似select w, location ...但似乎不起作用。

是否有任何其他方式获取与某些前缀相匹配的位置列表(包括WOEID)与天气数据相关联?

Afaik YQL不可能将子选择(内部SELECT语句)中的值传递给外部SELECT,如果我正确理解你,我就是你想要做的。

根据您的使用情况,我想提出另一个解决方案: 我假设与气象站相关的位置列表相对静态,这意味着此列表不会经常更改。如果是这种情况,那么在每次使用YQL重新生成该列表时,性能方面都不是最佳。相反,我会离线生成该列表,将其存储在文件或MySQL或其他地方,然后使用该静态列表来回答您的自动填充字段的AJAX调用。

在静态列表中的数据可以是这个样子:

{ 
"Vienna" => 72342, 
"Hamburg" => 12334, 
... 
} 

一旦用户选择了一个位置,并按下回车,然后就可以发送YQL查询weather.woeid查找当前天气基于WOEID。