Hatena::ブログ(Diary)

5.1さらうどん Twitter

2009/09/03(Thu)

ふぁぼったーの<censored>を突破するGreasemonkeyスクリプト書いた

| 15:06 |

昨夜未明から、卑猥なワードが含まれるつぶやきがふぁぼったーに取り上げられると、<censored>に置き換えられるという仕様が実装されたようです。

ふぁぼったーにフィルターがかかったようです - ウサギは走り、カラスは空を飛ぶ


というわけで、規制を突破して、<censored>の文字列を可視化するGreasemonkeyを書いてみた。


http://gyazo.com/e8c7526e898b9a39ce83dcd20ca164f5.png

http://gyazo.com/74b40f510635db18a2e07db883d49de4.png

http://gyazo.com/f770e330705a9a9f60896e12bd75e396.png

http://gyazo.com/bd56bfd8d68d2fe550e42ba9bb7c8207.png


こういう風になるらしい。まあ、なんて卑猥なのかしら。


インストール

userscript.orgからどうぞ。

ふぁぼったーの規制回避するグリモン for Greasemonkey

Greasemonkeyでしか動かないと思います。

また、Autopagerizeなどには対応していません。というか、対応の方法がわかりません。


仕組み

<censored>を含むつぶやきを探してきて、twitterへのパーマリンクを生成して、本文を差し替えているだけです。

本当は、おっぱいみたいな感じで、卑猥な用語に取消線が入るとよかったのでしょうが、元の文章と、フィルター後の文章の差分を取るのが大変だったのでやめました。

今のままだと、スクリプトが動いてるかどうかわかりにくいなー。

誰か技術のある方、作ってください。


開発中に気づいたこと【追記】

http://gyazo.com/5709679cd1e9a44221c31a7736eb3b4d.png

パーマリンクのタイトルにはフィルタが反映されていないみたい。


ソースコード

// ==UserScript==
// @name           visiable censored
// @namespace      http://gigi-net.net
// @include        http://favotter.matope.com/*
// ==/UserScript==
(function(){
//発言を拾ってきて配列に格納
var span = document.getElementsByTagName("span");
var anchor =document.getElementsByTagName("a");
var div =document.getElementsByTagName("div");
var twitters =new Array;
var id = new Array;
var userid =new Array;
for(var i=0;i<span.length;i++){
	if(span[i].getAttribute("class")==" status_text description"){
		twitters.push(span[i]);
	}
}
for(var i=0;i<anchor.length;i++){
	if(anchor[i].getAttribute("class")=="taggedlink"){
		id.push(anchor[i]);
	}
}
for(var i=0;i<div.length;i++){
	if(div[i].getAttribute("class")=="info"){
		anchor2 = div[i].getElementsByTagName("a");
		userid.push(anchor2[0].innerHTML);
	}
}
//全ての要素から規制部分を検索
var censored =new Array;
var a =new Array;
var id2 = new Array;
var userid2 = new Array;
for(i=0;i<twitters.length;i++){
	a =twitters[i].getElementsByTagName("span");
	for(var j=0;j<a.length;j++){
		if(a[j].getAttribute("class")=="censored"){
			censored.push(twitters[i]);
			//alert("a");
			id2.push(id[i]);
			userid2.push(userid[i]);
		}
	}
}


function getTitle(x){
	original = x.responseText.match(/\<span class="entry-content"\>.*?\<\/span\>/);
	original+="";
	original = original.replace(/\<span class="entry-content"\>/,"");
	original = original.replace("</span>","");
	if(original !="null"){
		censored[count].innerHTML = original;
	}
	count++;
	if(count<id2.length){
		getLink();
	}
}
var count =0;
function getLink(){
	id3 =id2[count]+"";
	id3 =id3.replace("http://favotter.matope.com/status.php?id=","");
	r_url ="http://twitter.com/"+userid2[count]+"/status/"+id3+"";
	GM_xmlhttpRequest({
  			method:"GET", 
  			url:r_url,
  			onload:getTitle
		});
}
getLink();
})();

SeaoakSeaoak 2009/09/05 00:32 初めまして。

ちょうど GreaseMonkey スクリプトを勉強中だったので、
こちらのスクリプトをベースに、censored された単語を
strike するようにしたスクリプトを書いてみました。

http://seaoak.cocolog-nifty.com/read/2009/09/uncensored-favo.html

おもしろいアイディアをありがとうございます m_(v_v)_m