それYQLで出来るよ!

トップページに表示されているRecent Weblog Entriesは、jsというflavourを作ってやっていたのだけど、YQLでフィードからJSONPにコンバートしてゴニョゴニョするものに変えた。フィードはFeedBurnerにあるのでサードパーティのウェブサービスとクライアントサイドのスクリプトで完結するのが良いところでもあり悪いところでもあり。

フィードのJSONPへのコンバートはYQLに専用の機能があるので、

select * from rss url='http://feeds2.feedburner.com/hail2u/blog'

という式でOK。JSONPで出力して貰えば、コールバック関数に渡されるオブジェクトのquery.results以下にフィードのitem要素が配列でずらっと並ぶ。RSSモードを使うとchannel要素とかはどっか行ってしまうので、そっちも(が)欲しい場合は、

select * from xml url='http://feeds2.feedburner.com/hail2u/blog'

とXMLモードでYQLを使えば良いと思う。

YQLを積極的に使うと良いんじゃないかと思う理由は、手軽さが大きい。コンソールでゴニョゴニョ作ってコピペ。HTMLモードやXMLモードとかなら、XPathと組み合わせるだけな感じなので、直ぐにソラで書けるようになるほど簡単。

また、URLの明晰さも大きい。jQuery.getJSON()と組み合わせてYQLを使う場合、

$.getJSON("http://query.yahooapis.com/v1/public/yql?callback=?", {
  q:      "select * from html where url="http://sports.yahoo.co.jp/hl?c=npb" and xpath='//ul[@class="s130"]/li/a'",
  format: "json"
}, function (d) {
  // do something with d
});

こういったコードになる。やっている(やりたい)ことが式としてリクエストするURLにはっきりと含まれるのでわかりやすい。YQLの基本的な知識が少し必要ではあるけど。これに対してPipesの場合は、

$.getJSON("http://pipes.yahoo.com/pipes/pipe.run?_callback=?", {
  url:     "http://sports.yahoo.co.jp/hl?c=npb",
  _id:     "00000000000000000000000000000000",
  _render: "json"
}, function (d) {
  // do something with d
});

こうなる(_idはダミー)ので、PipesのURLを参照し更にView Sourceしないと何をやっているのかほとんどわからない(スクリプトがどういうものかはわかっているはずなので、そこから類推することくらいは出来るけど)。

その一方でYQLはそこそこ入力データがまともでないと夢で見たのと違う出力になったりするという特徴もある。Pipesはかなり良きに計らってくれるので、結構ダメダメな入力データでも何とかなる場合が多く、その点はすごく良い。具体的な例だといきなり配列で始まるDeliciousのJSONフィードは、YQLではパースは通るもののquery.resultsが空になるが、Pipesは問題なし。

YQLはFlickrの画像からEXIF抽出とかも面白そうだなー。今年は「それYQLでできるよ」が流行る。とまでは思わないけど便利。