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*')

これは、以前のクエリ (weather api 呼び出しと同じ結果を生成する) が WOEID も、構成後に Weather API を直接クエリするために使用できる任意の種類の識別子も返さないという事実を除いて、私の問題をほぼ解決します。結合パラメータ w の値を取得するにはどうすればよいですか? のようなものを試しましselect w, location ...たが、うまくいかないようです。

気象データが関連付けられている特定のプレフィックスに一致する場所のリスト (WOEID を含む) を取得する他の方法はありますか?

4

1 に答える 1

0

Afaikでは、YQLではSub-Select(内側のSELECTステートメント)から外側のSELECTに値を渡すことはできません。これは、私が正しく理解している場合に実行したいことです。

ただし、ユースケースに基づいて、別の解決策を提案したいと思います。気象観測所が関連付けられている場所のリストは比較的静的であると想定しています。つまり、このリストはあまり頻繁に変更されません。その場合、YQLを使用して毎回そのリストを再生成することは、パフォーマンスの観点からはあまり最適ではありません。代わりに、そのリストをオフラインで生成し、ファイルやMySQLなどに保存してから、その静的リストを使用して、オートコンプリートフィールドのAJAX呼び出しに応答します。

その静的リストのデータは次のようになります。

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

ユーザーが場所を選択してEnterキーを押すと、YQLクエリをweather.woeidに送信して、WOEIDに基づいて現在の天気を検索できます。

于 2011-04-19T20:16:29.010 に答える