遅ればせながらYQLに感動した
遅ればせながら、この前YQLを使う機会があったのですが、これはなんとも素敵なサービスですね。
まだ馬鹿の一つ覚えで、XMLとかAtomとかRSSをJSONPにまるまる変換することしかできないですけど、それだけでも十分役立つ。Yahoo!Pipesもすごいと思ったけど、YQLの方が気軽で使い勝手がいい。
YQLはどういう時に使えるのか?
YQLは、WebAPIで、XMLの出力でしか対応してないサービスとかを、JavaScriptだけ使ってプログラミングしたいという時などに使えます。
例えば、Google Ajax Search APIは、問い合わせ結果をJSONPで出力してくれるので、JavaScriptだけでプログラミングができますが、Yahoo!JapanのWeb検索APIは、問い合わせ結果をXMLでしか出力してくれないので、クロスドメインの制約にひっかかってしまい、JavaScriptだけでプログラミングすることはできません。
そんなときにYQLの出番ですよ。
ただ、ちょっとYQLのURLの作成がめんどくさいので、YQLBuilderなるヘルパークラスを用意しました。ある程度汎用的にしています。
こんな感じ
var YQLBuilder = function(opts) { var target = (function() { if (!opts.params) { return opts.url; } var params = []; for (var key in opts.params) { params.push(key + '=' + opts.params[key]); }; if (params.length > 1) { return opts.url + '?' + params.join('&'); } else { return opts.url + '?' + params[0]; } })(); this.url = (function(o) { var url = o.yqlapi + '?q=' + encodeURIComponent((function() { opts.yqlstring = opts.yqlstring.replace(/<<url>>/, target); if (opts.xpath) { opts.yqlstring = opts.yqlstring.replace(/<<xpath>>/, opts.xpath); } return opts.yqlstring; })()); if (opts.format === 'json' && opts.callback) { return url + '&format=json' + '&callback=' + opts.callback; } else if (opts.format === 'json') { return url + '&format=json'; } else { return url + '&format=xml'; } })(this); }; YQLBuilder.prototype.yqlapi = 'http://query.yahooapis.com/v1/public/yql'; // 例:Yahoo!Japanのウェブ検索APIを、YQLでJSONPにするURLの生成 var yahoo = new YQLBuilder({ // yqlstringには、YQLを記述する。urlとxpathの値は、yqlstring内ではそれぞれ<<url>>、<<xpath>>と書いて、 // 詳細は引数オブジェクト内のurlプロパティとxpathプロパティに書く。 // urlプロパティのパラメータは、paramsプロパティに書くか、urlプロパティに直接書く。 yqlstring : "select * from xml where url='<<url>>'", url : 'http://search.yahooapis.jp/WebSearchService/V1/webSearch', params : { query : '検索文字列をここに入力', appid : 'アプリケーションIDをここに入力', results : 50 }, format : 'json', callback : 'callback' });
yahooオブジェクトのurlプロパティに、YQLを通したJSONPの出力を得られる、Yahoo!JapanのWeb検索APIのURLが格納されます。
一旦JSONPになってしまえば、後はJavaScriptで煮るなり焼くなりできます。
米Yahoo!は本当にGeekのツボを心得ていらっしゃる。Googleが始めるサービスよりもYahoo!が始めるサービスの方がワクワクするのは気のせいではないはず。
YQLを使うと、JavaScriptプログラミングの楽しさが格段に向上しそうですね!