残像ブログ

残像だった

Yahoo! Pipesではてブの人気エントリーRSSをフィルタリングして取得する

この間のはてなリニューアルで人気エントリーのラインナップがイマイチ気に入らない感じになったような気がしなくもないので(今後修正されテクノかもしれないけど)、せっかくだからRSSフィードのフィルタリングをする。
すでにその手のはてブRSSフィルタリングサービスがあるのかも知れないけど見つけられないので自作。

Yahoo! PipesRSSフィードを加工できる(複数のフィードを結合したり、重複を消したり、フィルタかけたり)webサービスらしい。
RSSの加工するにはYahoo!USAのアカウントが必要。


なお今回作成したフィードは誰でも使えるので、自分用感バリバリですけどご自由にどうぞ。
以下のリンク先でuserの欄にブックマーク数の足切りラインを設定してRunPipeをクリックすると、最低ユーザー数を指定できます。正しく動いてるのかは謎。
あと普通のはてなのRSSに比べて情報が半日くらい遅く配信回数も少ないです。
Pipes: HatenaHotITFilter

作成手順

メニューの「Create a pipe」から作成ページへ移動。

作成方法は色々な役割を持つモジュールを連結していって、最終的な出力結果を得るというもの。モジュールは画面左側に一覧で並んでるので、これを作業スペースにもってきて乳繰り合わせる。
連結は各モジュールについてる○からドラッグすれば触手が伸びるので対象に繋げれば良い。
最終的にPipe Outputモジュールに接続された内容が最終結果として出力される。

f:id:appakumaturi:20130114171120p:plain
作成するフィードの名称は画面上部のタブ(デフォルトでは「Untitle*」とかなってる)をクリックしたりするとイカした名前をつけられる。

f:id:appakumaturi:20130114171114p:plain
Pipe Outputに接続すると下部のデバッグウィンドウに出力結果が表示されるので確認できる(各フィード先頭にある三角をクリックで持ってる情報が見れる)。
作業の保存は画面右の「Save」から

f:id:appakumaturi:20130114171128p:plain
Pipeは作成しただけじゃ巡回してフィードとってきてくれないので、Pipeの個別ページで「Publish」をオンにする事。Publish後に内容を修正した場合は「Re-publish」を押さないと巡回内容が変わらない。

今回の作成手順

私はなぜかYahoo!USAのアカウントを持っていたのでYoukoとかいう謎の人物としてログイン。

f:id:appakumaturi:20130114171109p:plain
フィードはFetch Feedモジュールで取得できる。URL入力欄が出るので、今回ははてブ人気エントリー(IT)の「http://b.hatena.ne.jp/hotentry/it.rss」を入力

f:id:appakumaturi:20130114171133p:plain
OperatorsよりFilterを追加する。Filterは名前どおりフィードをフィルタリングするモジュール。
Block/Permitは除外/許可を選択(Blockだと条件に一致するフィードを除外、Permitだと一致するフィードのみを通す)。
any/allはAndOr条件(anyだといずれかの条件に一致、allだと全ての条件に一致)。
Rulesに条件を追加していく。

まずブックマークユーザ数でフィルタリングしたいので図のように対象属性を「hatena:bookmarkcount」条件を「is less than」にする事で「ユーザ数が○以下はブロック」とできる。
右端のボックスにしきい値を入力すればそれでOKだけど、しきい値を変更するたびに編集しなおすのも嫌なので、フィード取得時にユーザ側で指定できるようにする。

f:id:appakumaturi:20130114171134p:plain
そのためのモジュールがNumberInputで、文字通り数値の入力が出来る。Nameが変数名的なの、Promptがユーザが入力する時に表示される項目名、Positionはユーザが入力する時のボックスの順番、Defaultがデフォルト値、Debugはデバッグ用の値を指定できる。
今回作ったNumber Inputから触手を引っ張って、先ほどのFilterのユーザ数ルール行の右端にある○へ繋げは値が適用される。

せっかくなので2chまとめ系や画像収集系ブログを除外したい。本当は2chまとめけいアンテナサイトのフィードではてブのフィードを引き算、みたいなことをしたかったんだけどチョロッと調べただけじゃわからず、結局ブログのURLを直で指定するという超アナログな方法になってしまった。

そうなると話は簡単で、FilterモジュールのRules左にある+ボタンを押して条件を追加し、属性を「item.link」(フィードのURL)条件を「Contains」(含まれる)にし、右端のテキスト欄に除外したいブログのURLを直書きする。
ブロックしたいサイト分これを繰り返す。私が効率厨だったら壁ぶち抜くレベル。

最後にFilterをPipe Outputに繋げばこのしみったれたpipeが完成する。
Pipe個別ページに行ってPublishを押下してなんか説明とか入れておく。