不完全版 twitter 検索結果ページから特定キーワードを見えなくする bookmarklet
もろもろのtwitterクライアント使った方が100倍マシ、もしくはFirefox使ってるならgreasemonkey使えばいいんだろうだけど、やってみたことをとりあえずあげてみる。
目的:http://twitter.com/#search?q=%23C78などの検索結果から、野良RTや【拡散】などの特定キーワードを見えなくして可読性の効率を上げたい。
CSSで可能かとも思ったけど、パッと見無理っぽい。
E:contains("foo")使えば楽勝w→css構文解析エラーなんで?→それ2005年時点で仕様バグで取り下げ食らってるから。最新仕様くらい知っとけ→\(^o^)/
参考:
http://www.w3.org/TR/css3-selectors/
http://www1.ttcn.ne.jp/amotohiko/css/selectors.html
https://bugzilla.mozilla.org/show_bug.cgi?id=221981#c9
じゃあもう画面から特定キーワードのつぶやきが見えなくなるならある程度妥協する。→でもDOMとか分からん→javascript + xpath が手っ取り早そう→greasemonkeyの導入コストよく分からない→bookmarklet連打なら許容できる、気が、しなくも、ない
//2010/08/28修正 xpathの範囲絞るの忘れてた&発言の枠自体削除するように。 //2010/08/31修正 TL上に公式RTが表示されて、それも消したくなったため修正 // + ハッシュタグついた実況twitも消したくなったため、それようのbookmarklet追加 //2010/09/14修正 search.twitter.comのhtmlタグ変更に今更気づいて対応 //見やすく改行版 //公式RTと非公式RT,QT,拡散,リツイートを消す javascript:( function(){ //公式RT削除 var rt=document.evaluate( '//li[contains(concat("",@class,"")," share ")]' ,document,null,7,null); for(var i=0;i<rt.snapshotLength;i++) { rt.snapshotItem(i).style.cssText="display: none;"; } //非公式RTなど特定の文字列があったら削除 var a=["RT","QT","拡散","リツイート"]; for(var i=0;i<a.length;i++){ var d=document.evaluate( '//span[@class="status-content"]/span[@class="entry-content"]/text()[contains(.,"'+a[i]+'")]', document,null,7,null); for(var j=0;j<d.snapshotLength;j++){ d.snapshotItem(j).parentNode.parentNode.parentNode.parentNode.style.cssText="display: none;"; } //search.twitter.com ではhtmlタグが異なるようになったので対応 d=document.evaluate( '//span[@class="status-body"]/span[contains(concat("",@class,""),"msgtxt")]/text()[contains(.,"'+a[i]+'")]', document,null,7,null); for(var j=0;j<d.snapshotLength;j++){ d.snapshotItem(j).parentNode.parentNode.parentNode.style.cssText="display: none;"; } } } )() //bookmarklet用に一行で。ブラウザによっては文字のURLエンコードとかしないと貼り付け+実行じゃ動かないのかも。 javascript:( function(){ var rt=document.evaluate( '//li[contains(concat("",@class,"")," share ")]' ,document,null,7,null); for(var i=0;i<rt.snapshotLength;i++) { rt.snapshotItem(i).style.cssText="display: none;"; } var a=["RT","QT","拡散","リツイート"]; for(var i=0;i<a.length;i++){ var d=document.evaluate( '//span[@class="status-content"]/span[@class="entry-content"]/text()[contains(.,"'+a[i]+'")]', document,null,7,null); for(var j=0;j<d.snapshotLength;j++){ d.snapshotItem(j).parentNode.parentNode.parentNode.parentNode.style.cssText="display: none;"; } d=document.evaluate( '//span[@class="status-body"]/span[contains(concat("",@class,""),"msgtxt")]/text()[contains(.,"'+a[i]+'")]', document,null,7,null); for(var j=0;j<d.snapshotLength;j++){ d.snapshotItem(j).parentNode.parentNode.parentNode.style.cssText="display: none;"; } } })() //返信削除 //こっちはsearch.twitter.comのhtmlタグ変更の対応はしてない javascript:( function(){ //ハッシュタグ削除用のclassプロパティ :hashtag //ユーザへの返信削除用のclassプロパティ:username //URL入力削除用のclassプロパティ :web var a = ["hashtag","username","web"]; for(var i = 0; i < a.length; i++) { //a[i].toString()が必要な理由は調査してない var ht=document.evaluate('//span[@class="status-content"]/span[@class="entry-content"]/a[contains(concat("",@class,""),"'+a[i].toString()+'")]',document,null,7,null); for(var j = 0; j < ht.snapshotLength; j++) { ht.snapshotItem(j).parentNode.parentNode.parentNode.parentNode.style.cssText="display: none;"; } } } )(); //一行版(ハッシュタグあったらツイート消す javascript:(function(){var a = ["hashtag"];for(var i=0;i< a.length;i++){var ht=document.evaluate('//span[@class="status-content"]/span[@class="entry-content"]/a[contains(concat("",@class,""),"'+a[i].toString()+'")]',document,null,7,null);for(var j=0;j< ht.snapshotLength;j++){ht.snapshotItem(j).parentNode.parentNode.parentNode.parentNode.style.cssText="display: none;";}}})();
結論:やっぱり不便だからお前はクライアント入れろよJK
またやってみたくなったら修正するかー。
参考:
http://piro.sakura.ne.jp/xul/tips/x0032.html#getNodesFromXPath
http://d.hatena.ne.jp/Cherenkov/20090111/p1
http://www.tohoho-web.com/js/dom.htm#createElement
http://www.catch.jp/wiki/index.php?Bookmarklet%A4%CE%BA%EE%A4%EA%CA%FD
http://d.hatena.ne.jp/amachang/20071112/1194856493
http://d.hatena.ne.jp/amachang/20071112/1194856493#c1195010128