不完全版 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://let.hatelabo.jp/

http://d.hatena.ne.jp/amachang/20071112/1194856493

http://d.hatena.ne.jp/amachang/20071112/1194856493#c1195010128