Используя Yahoo API, как получить список местоположений, соответствующих определенному префиксу, у которого есть данные о погоде - PullRequest
1 голос
/ 20 марта 2011

У меня есть приложение, которое (помимо прочего) использует Yahoo Weather API для отображения погодных условий для местоположения, выбранного пользователем.

В диалоговом окне конфигурации, где пользователь может ввести местоположение, я хотел бы предложить автозаполнение, чтобы при вводе имени местоположения предлагался список соответствующих городов.

Я могу использовать YQL для получения местоположений, соответствующих префиксу, то есть ::1005*

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), соответствующих определенному префиксу, с которым у связаны погодные данные ?

1 Ответ

0 голосов
/ 20 апреля 2011

Afaik невозможно с YQL передать значения из Sub-Select (внутренняя инструкция SELECT) во внешний SELECT, что я и сделаю, если я вас правильно понимаю.

Исходя из вашего варианта использования, я хочу предложить другое решение: Я предполагаю, что список местоположений, с которыми связана метеостанция, является относительно статичным, то есть этот список меняется не очень часто. Если это так, то было бы неоптимально с точки зрения производительности заново генерировать этот список с помощью YQL. Вместо этого я сгенерировал бы этот список в автономном режиме, сохранил бы его в файле или MySQL или в другом месте, а затем просто использовал бы этот статический список, чтобы ответить на вызов AJAX вашего поля автозаполнения.

Данные в этом статическом списке могут выглядеть примерно так:

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

Как только пользователь выбрал местоположение и нажал клавишу ввода, вы можете отправить запрос YQL на weather.woeid, чтобы посмотреть текущую погоду на основе WOEID.

...