twitter関連フィルタ Edit

twitterのタイムラインから不要な呟きを隠す [2011/04/17更新] Edit

概要

問題点

導入

  1. 以下のフィルタを導入
    [Patterns]
    Name = "twitter: delete NG tweet (1/2) [2011/04/17]"
    Active = TRUE
    URL = "twitter.com[:/] $TYPE(htm)"
    Limit = 256
    Match = "(^(^</head>))"
    Replace = "$STOP()"
    "<script charset="utf-8" type="text/javascript" src="http://local.ptron/twitter_ng_tweets.js"></script>"
    "<script type="text/javascript">"
    "var debug = false;"
    ""
    "var _d = document;"
    "var prx_del_tweet_init = setInterval(function(){"
    "	try {"
    "		_d.body.style.height = screen.height + 100 + 'px';"
    "		clearInterval(prx_del_tweet_init);"
    "	} catch(e) { return }"
    "}, 1000);"
    ""
    "var prx_tweets;"
    "var len_tweets;"
    "var _prx_target = [];"
    "var _prx_temp_target = [];"
    "var check_tweets_timerID = setInterval(function(){"
    "	try {"
    "		if (!prx_tweets) {"
    "			prx_tweets = $('.stream-items')[0];"
    "			"
    "			/* add NG List */"
    "			var obj = _d.createElement('SPAN');"
    "			obj.innerHTML = '<input type="button" style="z-index:999;position:'+(jQuery.browser.msie && jQuery.browser.version <= 6 ? 'absolute' : 'fixed')+';top:0;left:0;cursor:pointer"
    ";margin:5px;padding:5px;font-weight:bold;background:#cfc;color:green;border:solid 1px green" onclick="ADDLST()" value="add NG" />';"
    "			_d.body.appendChild(obj);"
    "		}"
    "		var len = prx_tweets.childNodes.length;"
    "	} catch(e) { return }"
    "	if (len_tweets !== len)"
    "		len_tweets = len;"
    "	else"
    "		return;"
    "if (debug) alert('do');"
    "	_prx_target['userfullname'] = $('.tweet-full-name');"
    "	_prx_target['username'] = $('.tweet-screen-name');"
    "	_prx_target['comment'] = $('.tweet-text');"
    "	for (var i=0; len > i; ++i) {"
    "		_prx_temp_target['userfullname'] = _prx_target['userfullname'][i];"
    "		_prx_temp_target['username'] = _prx_target['username'][i];"
    "		_prx_temp_target['comment'] = _prx_target['comment'][i];"
    "		if (eval(_prx_ngs)) {"
    "			if (!hideTweet(_prx_target['userfullname'][i])) {"
    "				alert('ERROR : tweet delete failed');"
    "				clearInterval(check_tweets_timerID);"
    "				return;"
    "			}"
    "		}"
    "	}"
    "	len_tweets = prx_tweets.childNodes.length;"
    "}, 5000);"
    "function _prxMatch(tgt, val) {"
    "	if (val.length) {"
    "		if (_prx_temp_target[tgt].innerHTML.indexOf(val) >= 0)"
    "			return true;"
    "	} else if (val.test(_prx_temp_target[tgt].innerHTML))"
    "		return true;"
    "	return false;"
    "}"
    ""
    "/**"
    " * @param  object  obj  HTML tag"
    " * @return  boolean  true: success"
    " */"
    "function hideTweet(obj) {"
    "	while (obj.tagName !== 'BODY') {"
    "		if (/\\bstream-item-content\\b/i.test(obj.className)) {"
    "			obj = obj.parentNode;"
    "			/*obj.style.display = 'none';*/"
    "			obj.parentNode.removeChild(obj);"
    "			return true;"
    "		}"
    "		obj = obj.parentNode;"
    "	}"
    "	return false;"
    "}"
    ""
    "function ADDLST() {"
    "	var str = prompt('please enter NG word\\ne.g. _prxMatch("userfullname", /^foo$/) '+(jQuery.browser.msie ? '&&&&' : '&&')+' _prxMatch("comment", /\\\\\\\\bbar\\\\\\'s\\\\\\\\b/i)', '_prxMatch("userfullname", /^$/)');"
    "	if (!str.length) return;"
    "	$.ajax({"
    "	type: 'GET',"
    "	url: '/\x/ADDLST/',"
    "	data: {'str': str},"
    "	cache: false,"
    "	success: function(){"
    "		alert('add NG : Success (maybe)');"
    "		var obj = _d.createElement('SCRIPT');"
    "		obj.charset = 'utf-8';"
    "		obj.type = 'text/javascript';"
    "		obj.src = 'http://local.ptron/twitter_ng_tweets.js?' + parseInt((new Date)/1000);"
    "		_d.body.appendChild(obj);"
    "		len_tweets = -1;"
    "	},"
    "	error: function(){"
    "		alert('add NG : Failed');"
    "	}"
    "	});"
    "}"
    "</script>"
    
    [HTTP headers]
    In = TRUE
    Out = TRUE
    Key = "URL: twitter: delete NG tweet (2/2) [2010/11/29] add NG (both)"
    URL = "([^/]++.|)twitter.com(:[0-9]+|)/YOUR-PREFIX/ADDLST/\?(*\&|)str=([^&]+{1,*})\0 ($TST(\0=([^+]+)\#(\+$SET(#= )([^+]+)\#)+{1,*})$SET(0=\@)|) ( $TST($UESC(\0)=*%[0-9A-F][0-9A-F]*) $ADDLST(twitter_ng_tweets,+'|| ('+decodeURIComponent('$UESC(\0)')+')') | $ADDLST(twitter_ng_tweets,+'|| ($UESC(\0))') ) $RDIR(http://local.ptron/null)"
    1. 登録したヘッダフィルタの「YOUR-PREFIX」をPrefixに書き換える
  2. ./html/ に twitter_ng_tweets.js を作成 文字コードはUTF-8 内容は以下の通り(指示に従って好きに設定してください)
    /**
     * twitterのタイムラインから隠したいtweetの設定を記述する
     * twitter_ng_tweets.js  $LST(twitter_ng_tweets)  Logfile
     * Proxomitronのフィルタで使用する  ※$ADDLSTで追記する内容は、「+'|| (ルール)'」とする必要があります
     * ※JavaScriptの【eval】で実行する文字列なので、変なものが入っているとブラクラ状態になったりします!
     * %HHを全てデコードするコマンド(Perl5必須)「perl -p -i.bak -e "s/'\+decodeURIComponent\('//g; s/'\)\+'//g; s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg" twitter_ng_tweets.js」
     * 構文: _prxMatch( string target, string or regex NGword )
         target : 検索対象の指定
           userfullname : フルユーザー名
           username : ユーザー名
           comment : コメントHTML
         NGword : 文字列(部分一致 高速)か正規表現(/regex/parameter)で指定
         ※「'」は全てエスケープする必要があります(例:/you\'re/i)
         ※「\」も全てエスケープする必要があります(例:/\\bfuck\\b/i)
     * 記述例:
         +'|| (_prxMatch("userfullname", /^(?:出品者A|〃B)$/) && !_prxMatch("comment", "出品"))'
           // ↑ただのJavaScriptなので、&& || ! () なども使用可能
         +'|| _prxMatch("userfullname", /^(?:SpamerA|〃B|〃C|仕方ないからフォローしてあげてる人A|〃B|〃C)$/)'
         +'|| (_prxMatch("userfullname", /^(?:BOT-A|〃B)$/) && _prxMatch("comment", /自動発言/i))'
         +'|| (_prxMatch("userfullname", /^(?:ソフトウェア作者A|〃B)$/) && !_prxMatch("comment", /リリース|リリース|公開|完成|開発終了|緊急|非常|重大|致命|欠陥|バグ|バグ|\\bbug\\b|\\bfix\\b|セキュリティ\\s*ホール|セキュリティ\\s*ホール|ウ[イィ]ルス|ウ[イィ]ルス|virus/i))'
         +'|| (_prxMatch("userfullname", /^ゲーマーA$/) && !(_prxMatch("comment", /ゲーム|ゲーム|game/i) && _prxMatch("comment", "戦国") && !_prxMatch("comment", /ブラウザ|ブラウザ|browser|携帯|ケータイ|ケータイ/i)))'
     * @link  http://goo.gl/xMahX
     * @author  hsus
     */
    var _prx_ngs = 'false'
    1. ./html/twitter_ng_tweets.js を Block List に登録(設定ボタン→Blockfileタブ→追加ボタン) リスト名は「twitter_ng_tweets」
  3. ./html/ にファイルサイズ0の null を作成(これは作らなくてもOK)

twitpicのスパムコメントを削除 [2011/12/2] Edit

概要



複製名前変更