![]() |
Gallery/twitter最終更新: 2011-12-02 (金) 23:52:16 (4862d) |
概要
問題点
導入
[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)"
/** * 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'
概要
[Patterns] Name = "twitpic spam comment killer" Active = TRUE URL = "twitpic.com/*(^/full)" Bounds = "<div class="photo-comment" >*<div style="clear:both;"></div>\n</div>" Limit = 1000 Match = "*default_profile_?_normal.png*"