「seahorse」を含む日記 RSS

はてなキーワード: seahorseとは

2009-03-23

[][]はてなブックマークのhotentryを便利に見る方法はないですか?

はてなブックマークのhotentry(ホッテントリとかホットエントリーとか言う奴です)

をよく見るんだけど、もっと便利に見る方法ないですかね?

今は、

http://b.hatena.ne.jp/hotentry

Firefoxでタブで開きっぱなしにしてたまにチェックする感じです。

以前にその場でブクマコメントが展開できたりするgreasemonkeyだか、seahorseだか

合ったような気がするが、失念してしまった。

そのほか、「RSS経由でさらに便利に見ているよ」「流行tumblrでゴニョゴニョ」とかそういう人いませんか?

よかったら教えてほしいです。

2008-03-14

[][]はてブhotentryにて2chコピペブログや「ネタ」を削除

http://anond.hatelabo.jp/20080302214727

ネタ」がうまくいかない件は、"\u30cd\u30bf"にしたらうまく行った

あと2chコピペサイトを2つ追加

とりあえず、Sleipnir2のSeahorseで確認。

// ==UserScript==
// @name           hatebufilter
// @namespace      hatebufilter
// @description    Hatena bookmark filter
// @include        http://b.hatena.ne.jp/hotentry*
// @include        http://b.hatena.ne.jp/entrylist*
// ==/UserScript==
/*
問題点
いまのところなし

・問題が起こりそうなURL
http://b.hatena.ne.jp/hotentry?mode=daily&date=20080224
http://b.hatena.ne.jp/hotentry?mode=daily&date=20080218
**/

(function(){
	// Hatebu Tag
	var HatebuTagParentNum = 3;

	var filters = [
		// moconico douga
		{"tag": "div", "name": "entry", "pattern": "nicovideo\.jp"},
/*
		// tag of "2ch"
		{"tag": "a", "name": "tag", "pattern": "2ch", "parentNum": HatebuTagParentNum},
		{"tag": "a", "name": "tag", "pattern": "\\*2ch", "parentNum": HatebuTagParentNum},
**/
		// 2ch blogs  
		//  livedoor
		{"tag": "div", "name": "entry",
			"pattern": /http:\/\/blog\.livedoor\.jp\/(insidears|dqnplus)\//},
		{"tag": "div", "name": "entry",
			"pattern": /http:\/\/(guideline|alfalfa|news4vip)\.livedoor\.biz\//},
		//  fc2
		{"tag": "div", "name": "entry",
			"pattern": /http:\/\/(imihu|urasoku|news23vip|waranote|vipvipblogblog|netanabe|res2ch|kanasoku|tenkomo)\.blog\d+\.fc2\.com\//},
		{"tag": "div", "name": "entry",
			"pattern": /http:\/\/www\.kajisoku\.org\//},
		
		// hatena anonymouse diary
		{"tag": "div", "name": "entry", "pattern": /http:\/\/anond\.hatelabo\.jp\//},

		// tag of "neta"
		{"tag": "a", "name": "tag", "pattern": "\u30cd\u30bf", "parentNum": HatebuTagParentNum},
		{"tag": "a", "name": "tag", "pattern": "\\*\u30cd\u30bf", "parentNum": HatebuTagParentNum},
	];

	for (var i = 0; i < filters.length; i++) {
		var f = filters[i];
		filtering(f.tag, f.name, f.pattern, f.parentNum== undefined ? 1 : f.parentNum);
	}

	function filtering(tag, name, pattern, parentNodeNum){
		var entrylist = document.getElementsByTagName(tag);
                //print("pattern = " + pattern);
		for(var idx = entrylist.length - 1; 0 <= idx; idx--){
//        for(var idx = 0; idx < entrylist.length - 1; idx++){
			if (entrylist[idx].className == name){
				if (entrylist[idx].innerHTML.match(pattern)) {
					var node = entrylist[idx];
					var oldNode = null;
					for (var j = 0; j < parentNodeNum; j++) {
						oldNode = node;
						node = node.parentNode;
					}
					// print("class = " + oldNode.getAttribute("class"));
					// print("id = " + oldNode.getAttribute("id"));
					node.removeChild(oldNode);
				}
			}
		}
	}
})();

2008-03-08

[][greasemonkey][seahorse]はてブのhotentryで、2chコピペブログや「ネタ」を削除す...勝手に改造

firefoxでしか確認していないけれど、URL正規表現XPathで指定できる様にしてみたよ。

// ==UserScript==
// @name           filter for Hatena::Bookmark
// @namespace      http://anond.hatelabo.jp/
// @include        http://b.hatena.ne.jp/hotentry*
// @include        http://b.hatena.ne.jp/entrylist*
// origin http://anond.hatelabo.jp/20080302214727
// ==/UserScript==
(function(){
	var itemxpath = "//div[@class='entry']";
	function xpathgenURL(url) {return "//div[@class='entry' and descendant::a[starts-with(@href,'"+url+"')]]"}
	var filters = [
		// start with '//' then xpath
		// moconico douga
//		{"tag": "div", "name": "entry", "pattern": "nicovideo\.jp"},
		"//div[@class='entry' and descendant::a[contains(@href,'nicovideo.jp')]]",
/*
		// tag of "2ch"
		{"tag": "a", "name": "tag", "pattern": "2ch", "parentNum": HatebuTagParentNum},
		{"tag": "a", "name": "tag", "pattern": "\\*2ch", "parentNum": HatebuTagParentNum},
***/
		// start with 'http' then url
		// 2ch blogs  
		//  livedoor
//		{"tag": "div", "name": "entry",
//			"pattern": /http:\/\/blog\.livedoor\.jp\/(insidears|dqnplus)\//},
		"http://blog.livedoor.jp/insidears/",
		"http://blog.livedoor.jp/dqnplus/",
//		{"tag": "div", "name": "entry",
//			"pattern": /http:\/\/(guideline|alfalfa|news4vip)\.livedoor\.biz\//},
		"http://guideline.livedoor.biz/",
		"http://alfalfa.livedoor.biz/",
		"http://news4vip.livedoor.biz/",
		// typeof /regexp/ is function (@firefox) then regexp pattern
		//  fc2
//		{"tag": "div", "name": "entry",
//			"pattern": /http:\/\/(urasoku|news23vip|waranote|vipvipblogblog|netanabe|res2ch|kanasoku|tenkomo)\.blog\d+\.fc2\.com\//},
		/http:\/\/(urasoku|news23vip|waranote|vipvipblogblog|netanabe|res2ch|kanasoku|tenkomo)\.blog\d+\.fc2\.com\//,

		// tag of "neta"
//		{"tag": "a", "name": "tag", "pattern": "ネタ", "parentNum": HatebuTagParentNum},
		"//div[@class='entry' and descendant::a[@class='tag' and string()='ネタ']]",
//		{"tag": "a", "name": "tag", "pattern": "*ネタ", "parentNum": HatebuTagParentNum},
		"//div[@class='entry' and descendant::a[@class='tag' and string()='*ネタ']]",

		// hatena anonymouse diary
//		{"tag": "div", "name": "entry", "pattern": /http:\/\/anond\.hatelabo\.jp\//}
		"http://anond.hatelabo.jp/",
	];

	for (var i=0; i<filters.length; i++) {
		var filter = filters[i];
		var type = typeof filter;
		var regexp;
		var xpath;
		if (type == "function") {
			xpath = itemxpath;
			regexp = filter;
		} else if (type == "string") {
			if (filter.match(/^http/)) {
				xpath = xpathgenURL(filter);
			} else if (filter.match(/^\/\//)) {
				xpath = filter;
			} else {
				next;
			}
		}
		var removeNodes = document.evaluate(xpath,document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
		for (var j=0; j<removeNodes.snapshotLength; j++) {
			var node = removeNodes.snapshotItem(j);
			if (!regexp || node.innerHTML.match(regexp)) {
				node.parentNode.removeChild(node);
			}
		}
	}
})();

ついでに増田版も作ってみたよ。

// ==UserScript==
// @name           filter for Hatelabo::AnonymousDiary
// @namespace      http://anond.hatelabo.jp/
// @include        http://anond.hatelabo.jp/
// @include        http://anond.hatelabo.jp/*?page=*
// @exclude        http://anond.hatelabo.jp/YourID/*
// ==/UserScript==
// origin http://anond.hatelabo.jp/20080302214727
(function(){
	var itemxpath = "//div[@class='section']";
	function xpathgenURL(url) {return "//div[@class='section' and descendant::a[starts-with(@href,'"+url+"')]]"}
	var filters = [
		// start with '//' then xpath
		"//div[@class='section' and child::h3[starts-with(string(),'■はてな嫌われ者!')]]",
		// start with 'http' then url
		"http://anond.hatelabo.jp/",
		// typeof /regexp/ is function (@firefox) then regexp pattern
		/釣り/,
	];

	for (var i=0; i<filters.length; i++) {
		var filter = filters[i];
		var type = typeof filter;
		var regexp;
		var xpath;
		if (type == "function") {
			xpath = itemxpath;
			regexp = filter;
		} else if (type == "string") {
			if (filter.match(/^http/)) {
				xpath = xpathgenURL(filter);
			} else if (filter.match(/^\/\//)) {
				xpath = filter;
			} else {
				next;
			}
		}
		var removeNodes = document.evaluate(xpath,document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
		for (var j=0; j<removeNodes.snapshotLength; j++) {
			var node = removeNodes.snapshotItem(j);
			if (!regexp || node.innerHTML.match(regexp)) {
				node.parentNode.removeChild(node);
			}
		}
	}
})();

2008-03-05

Re: [greasemonkey][seahorse]はてブのhotentryで、2chコピペブログや「ネタ」を削除す...

こんなときのXPathじゃまいか。といってみる。

この機会に使ってみるといいよ。正規表現みたいにチョー便利だから。

2008-03-02

[][]はてブのhotentryで、2chコピペブログや「ネタ」を削除する

http://anond.hatelabo.jp/20080102122736

汎用性を上げてみた。

はてブのhotentryから削除するgreasemonkey

Sleipnir2のseahorseでも使える。

// ==UserScript==
// @name           hatebufilter
// @namespace      hatebufilter
// @description    Hatena bookmark filter
// @include        http://b.hatena.ne.jp/hotentry*
// @include        http://b.hatena.ne.jp/entrylist*
// ==/UserScript==
/*
問題点
いまのところなし

・問題が起こりそうなURL
http://b.hatena.ne.jp/hotentry?mode=daily&amp;date=20080224
http://b.hatena.ne.jp/hotentry?mode=daily&amp;date=20080218
**/

(function(){
	// Hatebu Tag
	var HatebuTagParentNum = 3;

	var filters = [
		// moconico douga
		{"tag": "div", "name": "entry", "pattern": "nicovideo\.jp"},
/*
		// tag of "2ch"
		{"tag": "a", "name": "tag", "pattern": "2ch", "parentNum": HatebuTagParentNum},
		{"tag": "a", "name": "tag", "pattern": "\\*2ch", "parentNum": HatebuTagParentNum},
**/
		// 2ch blogs  
		//  livedoor
		{"tag": "div", "name": "entry",
			"pattern": /http:\/\/blog\.livedoor\.jp\/(insidears|dqnplus)\//},
		{"tag": "div", "name": "entry",
			"pattern": /http:\/\/(guideline|alfalfa|news4vip)\.livedoor\.biz\//},
		//  fc2
		{"tag": "div", "name": "entry",
			"pattern": /http:\/\/(urasoku|news23vip|waranote|vipvipblogblog|netanabe|res2ch|kanasoku|tenkomo)\.blog\d+\.fc2\.com\//},

		// tag of "neta"
		{"tag": "a", "name": "tag", "pattern": "ネタ", "parentNum": HatebuTagParentNum},
		{"tag": "a", "name": "tag", "pattern": "*ネタ", "parentNum": HatebuTagParentNum},

		// hatena anonymouse diary
		{"tag": "div", "name": "entry", "pattern": /http:\/\/anond\.hatelabo\.jp\//}
	];

	for (var i = 0; i < filters.length; i++) {
		var f = filters[i];
		filtering(f.tag, f.name, f.pattern, f.parentNum== undefined ? 1 : f.parentNum);
	}

	function filtering(tag, name, pattern, parentNodeNum){
		var entrylist = document.getElementsByTagName(tag);
                //print("pattern = " + pattern);
		for(var idx = entrylist.length - 1; 0 <= idx; idx--){
//        for(var idx = 0; idx < entrylist.length - 1; idx++){
			if (entrylist[idx].className == name){
				if (entrylist[idx].innerHTML.match(pattern)) {
					var node = entrylist[idx];
					var oldNode = null;
					for (var j = 0; j < parentNodeNum; j++) {
						oldNode = node;
						node = node.parentNode;
					}
					// print("class = " + oldNode.getAttribute("class"));
					// print("id = " + oldNode.getAttribute("id"));
					node.removeChild(oldNode);
				}
			}
		}
	}
})();

hatebufilter.user.jsなどとUTF-8で保存して使う。

しかし、増田コード記法日本語貼り付けたら化けるんだが・・・どうすればいいんだろ?

コメントアウトを直せば、2chコピペブログ以外の「2chタグ自体での削除も可能です。

いろいろ削除していると、まーオレンジニュースでいいじゃんという。

# スーパー引用記法にしました

2008-02-18

Seahorse

// ==UserScript==
// @name はてなハイク
// @description NGID・NGKW・NGWORD
// @include http://h.hatena.ne.jp/*
// ==/UserScript==

// 以下でNG指定. NG判定は完全一致ではなく部分一致.
// NGID → エントリ(真ん中)やUsers/StarFriends(左側)が対象
ni=new Array('hatenahaiku');
// NGキーワードエントリ(真ん中)やStarFriends(左側)、Keywordバー(右側)が対象
nk=new Array('アダルトビデオにありそうなタイトル');
// NGワードエントリ(真ん中)が対象
//nw=new Array('うんこ');


// NGID エントリあぼーん
a=document.getElementById('main').getElementsByTagName('a');for(i=0;i<a.length;i++)for(j=0;j<ni.length;j++)if(a[i].href.indexOf(ni[j])>-1){p=a[i].parentNode.parentNode.parentNode.parentNode;if(p.className=='entry')p.style.display='none';}
// NGID Users/StarFriendsあぼーん
a=document.getElementById('leftbar').getElementsByTagName('a');for(i=0;i<a.length;i++)for(j=0;j<ni.length;j++)if(a[i].href.indexOf(ni[j])>-1){p=a[i].parentNode;if(p.tagName.toUpperCase()=='LI')p.style.display='none';p=a[i].parentNode.parentNode;if(p.className=='userkeyword')p.style.display='none';}

// NGキーワード エントリあぼーん
a=document.getElementById('main').getElementsByTagName('a');for(i=0;i<a.length;i++)for(j=0;j<nk.length;j++)if(a[i].innerHTML.indexOf(nk[j])>-1){p=a[i].parentNode.parentNode.parentNode;if(p.className=='entry')p.style.display='none';}
// NGキーワード StarFriendsあぼーん
a=document.getElementById('leftbar').getElementsByTagName('a');for(i=0;i<a.length;i++)for(j=0;j<nk.length;j++)if(a[i].innerHTML.indexOf(nk[j])>-1){p=a[i].parentNode.parentNode.parentNode;if(p.className=='userkeyword')p.style.display='none';}
// NGキーワード HotKeyword/RelatedKeywordあぼーん
a=document.getElementById('rightbar').getElementsByTagName('a');for(i=0;i<a.length;i++)for(j=0;j<nk.length;j++)if(a[i].innerHTML.indexOf(nk[j])>-1){p=a[i].parentNode;if(p.tagName.toUpperCase()=="LI")p.style.display='none';}

// NGワード エントリあぼーん
//a=document.getElementById('main').getElementsByTagName('div');for(i=0;i<a.length;i++)for(j=0;j<nw.length;j++)if(a[i].className=='body')if(a[i].innerHTML.indexOf(nw[j])>-1){p=a[i].parentNode.parentNode;if(p.className=='entry')p.style.display='none';}

 
ログイン ユーザー登録
ようこそ ゲスト さん