livedoor Reader で NG word フィルター を実現する Greasemonkey

LDRにフィルター機能を追加する方法を探していて、アイデア的なものは幾つか見つかったんだけど機能が足りなかったので、それらを参考にしつつ書いてみた。
NG条件に一致したエントリのタイトルを書き換え本文を非表示とすると同時に、該当するエントリを全て後方に並び替えます。また、該当エントリを選択時、n キーを押下することにより、本文を表示しタイトルを元に戻します。XPとubuntu上のFirefox 3で動作を確認。Greasemetalでも動くみたいです。

インストール http://gist.github.com/raw/14256/eda6899283c727292501915cf30a5bd10e96a6ee?ldr_ng.user.js
スクリプトエンコードUTF-8です。エンコードを変更すると日本語の条件が一致しなくなります。編集するときはUTF-8に対応したエディタを使用してください。

NG条件の設定方法

NG条件はスクリプト中のこの部分に書きます。

NGINFO : [
//この中に条件を書く
],

そしてNG条件はこの様に記述します。

	{
		channel:{
			title	: /^GIGAZINE/,
		},
		item:{
			title	: /^AD:/,
		}
	},

channel内にはフィードに対する条件。item内にはフィードの各エントリに対する条件になります。条件は正規表現で記述して下さい。

  • channel :
    • title : タイトル
    • link : リンク
    • description :説明文
    • feedlink : フィードのurl
    • force : 強制的に条件一致にさせるフラグ。true で強制一致。
    • and : 配列で記述された条件を OR条件では無く、AND条件とするフラグ。true でAND条件。
  • item :
    • title : タイトル
    • link : リンク
    • category : カテゴリ
    • author :
    • body : エントリの本文
    • force : 強制的に条件一致にさせるフラグ。true で強制一致。
    • and : 配列で記述された条件を OR条件では無く、AND条件とするフラグ。true でAND条件。

channel内の条件のいずれかが一致し、かつitem内の条件のいずれかが一致した時、エントリはNGエントリと判断されます。上の見本の例では、フィードのタイトルが GIGAZINE で始まり、かつ、エントリのタイトルが AD: で始まっていた時、NGエントリとなります。
各条件は[]で括ることにより、配列で記述することが出来ます。この時、各要素はOR条件となります。

	{
		channel:{
			title	: /^GIGAZINE/,
		},
		item:{
			title	: [/^AD:/,/試食/],
		}
	},

上の例では、フィードのタイトルが GIGAZINE で始まり、かつ、エントリのタイトルが AD: で始まっていた時、または「試食」を含んでいた時、NGエントリとなります。AND条件としたい時は、

	{
		channel:{
			force	: true,
		},
		item:{
			and     : true,
			body	: [/ですね/,/わかります/],
		}
	},

この様に and : true, と設定することにより、配列の各要素をAND条件とします。また force : true, と記述することにより、強制的に条件一致とすることが出来ます。上の例では、全てのフィードで、各エントリの本文に「ですね」と「わかります」を含んでいた時、NGエントリとなります。

修正履歴

  • 10/1 初期化に失敗した時、リトライするようにした。