流行っているのか流行っていないのか、いまいちよく分からない pipes ですが、19日に update があったようです。いくつかの新しいモジュールが追加されました (pipes の blog でのアナウンス)。
百聞は一見に如かず、数もそんなに多くないので本家の例を見るのがいちばん理解しやすいかもしれませんが、以下、簡単に今回追加されたモジュールについて私見も含めてまとめてみました。
- Feed Auto-Discovery:
Sources カテゴリに追加されました。ページの URL を与えると pipes がその URL が示すドキュメントの link タグからフィードを自動的に見つけ、そのフィードを pipes のインプットとして使えるというモジュールです。要はRSS Reader で良く見かける機能と同じです。
ある RSS がアイテムの中に URL を含んでいたとして、その URL 先のフィードを取ってくるとか、そういうことに使えそうです。User Inputs モジュールを使って利用者に URL を入力させるような pipe を作る場合は、このモジュールが使えるかもしれません。
- Item Builder:
これも Sources カテゴリへの追加です。任意の「属性・値」のペアを任意の個数ならべたアイテムを 1 つ作ることができるモジュールです。これ単体では殆ど意味をなさないと思いますが、属性・値ともに他の文字列や URL などを接続できるようになっているため、後述の Loop モジュールと組み合わせると強力な表現力を発揮できると思います。
- Loop:
ここから Operation カテゴリへの追加です。これの追加により For Each: Annotate と For Each: Replace の 2 つのモジュールが deprecated になりました。 Loop モジュールは特定のサブモジュールと組み合わせて使わます。サブモジュールへの入力には Loop モジュールへ入力されたアイテムの特定のフィールドを指定し、Loop モジュールでは入力されたアイテムの数だけサブモジュールが繰り返し処理を行います。
Loopモジュールの出力には 2 種類あって emit と assign があります。 assign はこれまでの For Each モジュールと同じようにインプットとなったアイテムのフィールドにサブモジュールの出力を追加または置き換えするものです。emit の方はサブモジュールの出力をそのまま Loop モジュールの出力にするものです。emit の使い方でこれまた面白い pipe が作れそうな気がします。
- Reverse:
アイテムの並びを逆順にするものです。新しいモノから読みたい RSS などに対しては意味がないかもしれませんが、CSV や Data を Feed として使うモノには有用な気がします。
- Sub-element:
アイテムの特定のフィールドを抜き出したモノを出力するものです。このモジュールで特定のフィールドを抜き出して、unique で重複を省き emit 型 Loop への入力にするとか、そういう使い道でしょうか。UNIX コマンドで言うと cut みたいなものです。
- Tail:
これまで Head と Sort があり、今回 Reverse が追加されたのですから、 Tail が追加されるのもある意味当然のことなのかもしれません。これも使い道は Data 系 Feed への適用という感じでしょうか。
- Translate:
これまでも Babel Fish という翻訳モジュールがありましたが、Translate モジュールは Loop のサブモジュールとして追加できるようになりました。タイトルのみ翻訳とか。
- String Regex:
文字列や URL を入力に取る Regex モジュールです。User Input の正規化などに使えそうな気がします。これを Loop のサブモジュールに組み込むと従来の Regex モジュールと同様になります。
- String Builder:
String Concatenate から名称が変わっただけのようです。
おまけ: pipes でいろんな RSS を使っていると、レスポンスヘッダに charset 宣言のない RSS が結構あることに気づきます。 content-type が text/xml で charset のないものは ISO 8859-1 と見なされて日本語が総文字化けしてしまいます。今のところは youtube の REST API のレスポンスがそんな感じ。Yahoo!知恵袋は昔そうでしたが、問い合わせたら対応してくれました。教えて goo は検索結果 RSS の URL に含まれる検索ワードのパラメータが EUC-JP なので pipes での利用はお手上げ状態です。












最近のコメント