Mach3.laBlog

“YQL” – Alphabetical Advent Calendar 2013

この記事は賞味期限切れです。(更新から1年が経過しています)

“Y” は YQL の “Y”。

Y

YQL (Yahoo Query Language)

YQL(Yahoo Query Language) は Yahoo が提供する開発者向けのAPIで、 SQLライクなクエリを送ると様々な情報を取得する事が出来るサービスです。 受け取るデータは XML か JSON かを選択可能で、 JSONPにも対応しているのでクライアントJavaScriptからも簡単に利用できます。

例えば場所情報や地域の天気情報を取得したり、 Flickr から写真を検索したり、Webページのフィードを取得したりする事等が出来ます。

利用方法

パブリックAPIのエンドポイントは http://query.yahooapis.com/v1/public/yql です。 パラメータは、形式を指定する format 、クエリを送る q、JSONPのコールバック用の callback を渡す事ができます。 次のようなリクエストを送る事になりますね。

http://query.yahooapis.com/v1/public/yql?format=json&q=[YQLクエリ]&callback=[コールバック関数]

YQL の書き方については、公式の Yahoo Developper Network でテスト出来るコンソールを用意しているので、 どんな書式でどんな情報が得られるかを試してみると良いですね。

テーブルによっては別途アプリケーションIDが必要です。 また、Flickr 関連のテーブルは flickr で登録したアプリケーションIDが必要な様です。

位置情報から天気情報を取得してみる

天気情報は weather.forecast から取得できますが、位置情報の指定に woeid という者が必要になります。 woeid というのは “Where On Earth Identifier” の事で、 全世界の地域ごとに ID を振って管理をしています。

woeid は、geo.places テーブルから都市名で引く事が出来ます。

SELECT woeid FROM geo.places WHERE text = '神奈川県横浜市'

そこで得られた woeid を使って、天気情報を引きます。ちなみに神奈川県横浜市の woeid は 1118550 です。

SELECT * FROM weather.forecast WHERE woeid = 1118550

一通りの処理を jQuery で書いてみましょう。

var rest = "http://query.yahooapis.com/v1/public/yql";

$.ajax({
    dataType: "jsonp",
    url: rest,
    data: {
        format: "json",
        q: "SELECT woeid FROM geo.places WHERE text = '神奈川県横浜市'"
    }
})
.then(function(data){
    var woeid = data.query.results.place.woeid;
    return $.ajax({
        dataType: "jsonp",
        url: rest,
        data: {
            format: "json",
            q: "SELECT * FROM weather.forecast WHERE woeid = " + woeid
        }
    });
})
.then(function(data){
    $("#widget-weather").html(data.query.results.channel.item.description);
});

結果のデータを辿って得られる description には出力用のHTMLが格納されているので、 それをそのままコンテナに表示しています。 ただ、内容は全て英語で温度の単位も華氏なので、実際に使う時は翻訳や換算をしてあげないといけません。

RSSフィードを利用する

YQL の feed テーブルでは、Web上にあるRSSフィードをJSONに変換して返す事が出来ます。 試しにJSONPで Mach3.laBlog のフィードを取得してみようと思います。

var query = "SELECT * FROM feed WHERE url = 'http://blog.mach3.jp/feed'";
var rest = "http://query.yahooapis.com/v1/public/yql";

$.ajax({
    dataType: "jsonp",
    url: rest,
    data: { format: "json", q: query }
})
.then(function(data){
    console.log(data); // フィードのデータ出力
});

自サイトのフィードを読む分には特に必要ないですが、クロスドメインでRSSを引っ張りたい時や、 サービスのAPIがXMLしか対応していない場合などに使えます。 勿論、利用規約はそのソースを提供しているコンテンツプロバイダの物に従う事になるので、 それに則って正しく利用しましょう。

爆速YQL

Yahoo! Japan デベロッパーネットワークのブログで 「爆速YQL」 なる物が紹介されていました。 これは何かというと、YQLの結果取得と出力をブログパーツのような感覚で出来てしまうコンポーネントです。

上で挙げたフィードの取得を試してみましょう。なるほどこれは爆速です。

<script src="http://i.yimg.jp/images/yjdn/js/bakusoku-yql-v1-min.js"
    data-yql="SELECT * FROM feed WHERE url='http://blog.mach3.jp/feed'">
    <ul>
    {{#query.results.item}}
        <li><a href="{{link}}">{{title}}</a></li>
    {{/query.results.item}}
    </ul>
</script>

script 要素の data-yql 属性に YQL のクエリを入力すると、 要素内のビューを使ってコンテンツを表示します。 ビュー部分には Mustache を採用しており、ループや条件分岐等もする事ができます。

こういう形でのウィジェットの公開も良いですね。

参考資料

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*