以前、RSSのフィルタ用に RSS Pipe という cgi をつくったのですが、その後 Yahoo からもっと色々な事が出来る「yahoo pipes」というサービスが開始され、僕も現在 RSS で何かするときはもっぱら yahoo pipes の方を使っていました。
先日RSS Pipeにつきましてご質問がありまして、そういえば yahoo pipes についてあまり触れていなかったこともあり、yahoo pipes で RSS Pipe っぽいフィルタを書く方法についてちょっとまとめてみたいと思います。
例として、はてなの注目エントリからカテゴリ「コンピュータ・IT」を抜き出す、または除外する方法について説明します。
RSSのソースを確認する
RSS ファイルに対して何か処理を行うには、まず最初に出力されている RSS ソースを参照して、バージョンを確認する必要があります。
というのもRSSファイルはいくつかのバージョンがあり、出力されるタグが微妙に異なっていたりします。
そのため、出力されているRSSのバージョンに似合った処理をする必要があります。
詳細は以下のサイトのエントリに詳しいです。
RSS ソースの確認方法なのですが、最近だとRSS はブラウザと統合されているため、単純にアドレスバーにRSSファイルのアドレスを貼り付けてもソースを確認することが出来ない場合が多いようです。
(いまのところ) ブラウザに FireFox を使用し、先頭に「view-source:」を付与したアドレスを貼り付けることで内容の確認が行えるようでした。
はてなの注目エントリのRSSは「http://b.hatena.ne.jp/hotentry.rss」でしたので、ブラウザのアドレスバーには以下を入力させればよいことになります。
- view-source:http://b.hatena.ne.jp/hotentry.rss
では表示されたソースの内容を確認します。
先頭近くに「xmlns="http://purl.org/rss/1.0/」とあるので、出力しているRSSのバージョンが1.0とわかります。
先のサイトによると、RSS1.0の場合、カテゴリを「item のdc:subject」に書くことができる、とあります。
実際、ソースの下の方見ると「コンピュータ・IT」みたいな感じでカテゴリが入っているのが確認できました。
ここまでをまとめてみましょう。
以下の事がわかりました。
- 注目エントリのRSSのアドレスは http://b.hatena.ne.jp/hotentry.rss で、バージョンは 1.0
- カテゴリ「コンピュータ・IT」のエントリを除外・または抽出するには、「item の<dc:subject>」の文字を除外または抽出することで処理できる。
また、この考えを応用すれば、以下の事が出来そうな事もわかります。
- 「itemの <title>」タグ内の文字を判定させることで、エントリに特定のタイトルを含んだアイテムを除外または抽出できる
- 「itemの <link>」タグ内の文字を判定させることで、エントリに特定のリンク先を含んだアイテムを除外または抽出できる
yahoo pipesでフィルタリングする
フィルタリングで行いたい処理をまとめると、以下の3ステップが必要になります。
- はてなブックマークの注目エントリRSSを対象に――
- お好みのフィルタを掛け――
- RSS出力する
では実際に、yahoo pipes を使用してRSSをフィルタリングしてみましょう。
yahoo pipes のページを開きます。
yahoo.com のアカウントを作成していない場合、アカウントを作成する必要があります(日本の yahoo.co.jp とは別になりますのでご注意下さい) 。
メニューから[create pipes] を選択します。
左のメニューから、「Sources の Fetch Feed」を選び、右側の欄にドラッグ&ドロップします。
Fetch Feedの URL 欄に RSS のURL (http://b.hatena.ne.jp/hotentry.rss)を入力します。
左のメニューから、「Operators の Filter」を選び、右側の欄にドラッグ&ドロップします。
「Fetch Feed」のボックスの下の○の位置でマウスのボタンを押し、「Operators の Filter」ボックスの上の○の位置でボタンを離します。こうすることで両者が繋がります。
イメージとしては「Fetch Feed」の内容を「Operators の Filter」にパイプさせる感じです。
filter にお好みの条件を記載します。
※ここが処理のキモになります。
カテゴリ「コンピュータ・IT」のエントリを抽出する場合
[Permit] items that match [all] of the following
[item.dc:subject] [is] [コンピュータ・IT]
カテゴリ「コンピュータ・IT」のエントリを除外する場合
[Block] items that match [all] of the following
[item.dc:subject] [is] [コンピュータ・IT]
タイトルに「app」という「文字を含んだ」エントリを除外する場合
[Block] items that match [all] of the following
[item.title] [Contains] [app]
URL に「.com/」を含んだエントリを除外する場合
[Block] items that match [all] of the following
[item.link] [Contains] [.com/]
Filter の詳細な条件については以下のサイトの解説が参考になります。
http://chikura.fprog.com/index.php?UID=1175617938
■Filter
指定した条件に一致する記事(item)を除去(Block)又は抽出(Permit)するモジュール。
"Block"を指定すると、この条件に一致する記事を除去、"Permit"を指定すると一致した記事のみを抽出する。
"all"は、指定した条件全てに一致させたい場合に指定する。
"any"は、指定した条件のいずれかに一致させたい場合に指定する。
"Contains":~を含む
"Does not contain":~を含まない
"Matches regex":~の正規表現にマッチする
"is greater than":~より大きい
"is":~である
"is less than":~より小さい
"is younger than":~以前(?)
先ほど「パイプ」をつなぎ合わせたのと同じように、「Operators の Filter」のボックスの下の○の位置でマウスのボタンを押し、「Pipe Output」ボックスの上の○の位置でボタンを離します。
これで「RSSを持ってきて、フィルタを掛け、出力する」一通りの流れが出来たことになります。
右上の[SAVE]ボタンを押し、適当な名前をつけます。
[Back to My Pipes]を押し、メニューに戻ります。
先ほど保存した自分の Pipes が表示されています。
タイトル部分を選択します。
[Get as RSS] のリンクをお手持ちの RSS リーダーに登録します。
解説としては以上になります。
上の解説では、filterを一つしか設定していませんが、一つのfilterの後に次のfilterをパイプさせていくことによって、様々な条件を設定することが可能です。
yahoo pipes では色々な事が出来るのですが、単純な文字のフィルタリングだけでも十分便利に使えますので、まだ使ったことの無い方は一つ簡単な物を試してみることをオススメします。
最近だと僕は、はてなブックマークのタグ「iphone」がつけられたエントリ (http://b.hatena.ne.jp/t/iphone?sort=hot&threshold=3) の RSS (http://b.hatena.ne.jp/t/iphone?mode=rss&sort=hot&threshold=3) から、item.link のfilterを使い、特定のサイトを除外するようなRSSをつくってみたりしました。