1

我有一个应用程序(除其他外)使用 Yahoo Weather 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 或任何类型的标识符,我可以在配置后直接查询天气 API。如何捕获连接参数 w 的值?我尝试了类似select w, location ...的方法,但这似乎不起作用。

有没有其他方法可以获取与某些前缀匹配的位置列表(包括 WOEID),这些前缀具有与之关联的天气数据?

4

1 回答 1

0

Afaik 不可能使用 YQL 将值从 Sub-Select(内部 SELECT 语句)传递到外部 SELECT,如果我理解正确,我就是你想要做的。

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

该静态列表中的数据可能如下所示:

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

一旦用户选择了一个位置并按下回车键,您就可以将 YQL 查询发送到 weather.woeid 以根据 WOEID 查找当前天气。

于 2011-04-19T20:16:29.010 回答