YQLでフィードを加工する

Yahoo! Pipesで、ブログのフィードを複数フェッチしてマージして日時でソートして出力するというパイプを作っていたので、同様のことがYahoo! Query Language(YQL)でできるかどうか試してみる。
フィードをフェッチするのはdataテーブルのfeed(種類によってatomrssxmlでも可)を使って、複数のマージはwhere節をorでつなげればよい。そして最後のフィルタでpubDateによってソートするようにするとこのようになる。

select * from feed
  where
    url='http://d.hatena.ne.jp/tkawa/rss2'
      or
    url='http://dailylife.g.hatena.ne.jp/tkawa/rss2'
  | sort(field='pubDate')

新しい項目から順に並べたいので逆順のソートが必要になる。でも細かいリファレンスがないのでPOST-result Operationsのsortの逆順(descending)をどう書けばいいのかわからない。Arg sortingのところにdescendingって書いてあるのに…。しょうがないので後ろにreverseをくっつけてこうした。

select * from feed
  where
    url='http://d.hatena.ne.jp/tkawa/rss2'
      or
    url='http://dailylife.g.hatena.ne.jp/tkawa/rss2'
  | sort(field='pubDate') | reverse()

これで一応希望通りのものが出来上がる。
ほかにもいろいろAtomフィードを食わせたりしていて気が付いたのだが、YQLは扱う対象が汎用的なXML(or JSON)でどんなデータでもOKなので、例えば先ほどのYQLに1つAtomフィードを増やそうとすると、AtomにはpubDateという要素はないのでソートできなくなってしまう。(全部AtomならissuedあたりでソートすればOK)
それに対してPipesは出力がフィード(RSS)というのが明確で、RSSを食わせてもAtomを食わせても内部で正規化してRSS出力に適したデータに変換している。さらにそのときにy:publishedのような便利な要素をくっつけてくれるので、ソートするときはそれを利用すればよい。まさにPlaggerをリッチなUIにしたという感覚。
どっちがいいというのは一長一短というか使い分けの問題で、Pipesはフィードとして利用するためにあらかじめ設定しておいて使うもの、YQLはプログラム中でXMLJSONが欲しいときに動的にクエリを組み立てて希望のデータを手に入れるもの、という感じ。後者はJSONPが使えるのでとくにJavaScriptで使うのが強力。