Togetter のデコレーションを無効にし、お気に入りしたユーザを表示しない様にするuserstyle

Togetterは面白いんだけど、なんとも言えない気持ち悪さを感じる*1ことがあって、その原因がデコレーションと「お気に入りしたユーザ」の表示にあるっぽいので消してみた。
http://userstyles.org/styles/27914

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document url-prefix("http://togetter.com/li/") {
div.favorite_box{
    display: none !important;
}
div.list_body h4 span{
    color: #000000 !important;
    font-weight: normal !important;
    font-size: 100% !important;
}
div.profile_box a.profile_image{
    display: none !important;
}
}

*1:個人の感想です

Re: model.Tumblr.multiTumblelogs.jsで画像ポストだけを別Tumblrに流したい

http://tumblr.g.hatena.ne.jp/retlet/20100324 の件。
tombloo 0.4.9にて。

--- xpi/chrome/content/library/20_model.js
+++ xpi/chrome/content/library/20_model.js
@@ -2807,7 +2807,7 @@ models.getEnables = function(ps){
  */
 models.getPostConfig = function(config, name, ps){
 	var c = config[name] || {};
-	return (ps.favorite && ps.favorite.name==name)? c.favorite : c[ps.type];
+	return (ps.favorite && RegExp('^' + ps.favorite.name + '(\\s|$)').test(name))? c.favorite : c[ps.type];
 }
 
 

でどうかなあ。以前直してもらったことがある問題(http://github.com/to/tombloo/commit/b599d6c946e9febadc1dfb2f5d662450d22ee74c)と同じような原因だと思います。

share - photo - LDR(pixiv)

http://tumblr.g.hatena.ne.jp/retlet/20100320/1269065983
pipesスクレイピングしてLDRから投稿。そういうのもあるのか。つい最近pixiv2rssなんてのも見かけたし。というわけで書き始めてみる。→ http://github.com/zaknak/tombloo/blob/master/scripts/extractor.pixiv.LDR.js
LDRのアイテム内の画像上で、permalinkhttp://www.pixiv.net/member_illust.php?mode= が設定されている場合のみ動作。オリジナルサイズでpostできます。

pixiv用extractor

11/7/13 追記
メンテしてないし低機能なので、pixivからブックマークと同時にPOSTできるTomblooパッチがサムネイル対応 | 圧縮電子精神音楽浮遊構造体を利用されることをおすすめします。追記終わり。



こちらにヒントを得て書いてみました。http://tumblr.g.hatena.ne.jp/retlet/20100311/1268287533
サムネイル上で実行してもリンク先を取得してタイトルとか設定するようにしてあります。で、実行にあたってリファラの制御が必要になると思うので、その辺はアドオン等で各自適当に。何かその時々でアクセス制御の挙動が変わってよくわからないので。

Tombloo.Service.extractors.register([
{
	name : 'Photo - pxiv',
	ICON : 'http://www.pixiv.net/favicon.ico',
	check : function(ctx){
		return ctx.onImage && ctx.target.src.match(/^http:\/\/img\d.+?\.pixiv\.net\/img\//) && ctx.onLink;
	},
	extract : function(ctx){
		var hostURL = 'http://www.pixiv.net/';
		var illustURL = /^http:\/\/www\.pixiv\.net\/member_illust.php\?mode=/;
		var mangaURL =  /^http:\/\/www\.pixiv\.net\/member_illust.php\?mode=manga/;

		if(!ctx.href.match(illustURL)){
		//実行元がイラストページではなかった場合、リンク先のイラストページを取得して足りない情報を得る
			var deferred = request(ctx.link.href).addCallback(function(res){
				var responseHTML = convertToHTMLDocument(res.responseText);
			//実行元タイトルをイラストページのタイトルに入れ替え
				ctx.title = $x('//title/text()', responseHTML);
			//イラストに設定されたリンクを取得
				var linkHREF = $x("id('tag_area')/following-sibling::*/a[contains(@href,'mode=')]/@href",responseHTML);
			//実行元アドレスをイラストページのアドレスに入れ替え
				ctx.href = ctx.link.href;
			//相対アドレスが取得されていた場合、ホスト部を補間
				if(!linkHREF.match(/^http:\/\//)) linkHREF = hostURL + linkHREF;
			//イラストに設定されたリンクのアドレスを返す
				return linkHREF;
			});
		}else{
		//実行元がイラストページだった場合、必要な情報は得られるのでリンク先から取得する必要は無い
		//succeedは成功したdeferredが返る。設定した引数はcallbackの引数になる。
		//すでに必要な値が揃ってる場合と、requestして情報を取ってこなきゃいけない場合が同じように書ける。
			var deferred = succeed(ctx.link.href);
		}

		return deferred.addCallback(function(linkHREF){
			if(linkHREF.match(mangaURL)){
			//マンガ形式だった場合、1枚目の画像を設定
				var itemUrl = ctx.target.src.replace(/_(?:m|s|100)\.([^.]+)$/,'_p0.$1');
			}else{
				var itemUrl = ctx.target.src.replace(/_(?:m|s|100)\.([^.]+)$/,'.$1');
			}

			return download(itemUrl, getTempDir(), false).addCallback(function(file){
					return {
						type	: 'photo',
						item	: ctx.title,
						itemUrl : itemUrl,
						file	: file,
					}
			});
		});
	}
}
],'Photo');

tomblooのリポジトリで遊んだメモ

githubからローカルにコピー

github上でforkする必要は無いらしい。参考:http://subtech.g.hatena.ne.jp/miyagawa/20090114/1231910461

git clone git://github.com/to/tombloo.git

作業コピーをfirefoxで動かす

コピーしたはいいけど、こいつを一体どうやってfirefoxで動かしたらいいのと悩む。

  1. firefox の {profDir}/extensions に tombloo@brasil.to というファイルを作成し、中に作業コピーの場所を記述する。/xpi以下がアドオン本体部なので、c:/tombloo にコピーがあるなら、c:/tombloo/xpi と書き込む。
  2. xpi/chrome.original.manifest を xpi/chrome.manifest にコピー
    • chrome.manifest は無視ファイルに設定済になっている

これでとりあえず動いた。
ここまで辿り着くのに結構な時間をかけたが、同じことがまとまってた……。http://d.hatena.ne.jp/snaka72/20090620/1245497115

ファイルを変更していないのに modified になる

windows で msysgit を使っているが、git-clone 実行直後でファイルに触っていないのに、git-status で modified となるファイルがずらずらと出てきて少々悩んだ。原因はmsysgitインストール時の設定で改行コードの自動変換が有効になっていたからみたい。

git config --system core.autocrlf false

これで自動変換が無効になるが、有効だったときの挙動がよく分からない。

  • core.autocrlf=false
    • コミット、チェックアウト共に改行コードに一切手をつけない
  • core.autocrlf=true
    • コミット時、改行コードがCRLFのファイルを、改行コードがLFのファイルとしてコミットする。
    • チェックアウト時、改行コードがLFのファイルをCRLFに変換する。
  • core.autocrlf=input
    • コミット時、改行コードがCRLFのファイルを、改行コードがLFのファイルとしてコミットする。
    • チェックアウト時、改行コードを変換しない。

こういうことらしいんだけど。参考:http://progit.org/book/ja/ch7-1.html
で、true 、input 共に、コミット時に行われる変換はローカルのファイル自体を変換するわけではないみたい。最初、コミットしても変換されないじゃんとか思ってた。

PROTECTED_SITESでimage linkが上手くいかない件(追記あり)

http://tumblr.g.hatena.ne.jp/retlet/20100305/1268115495 の件
Tombloo.Service.extractors['Photo - Upload from Cache'] なんですが、image linkを経由してtargetにリンクが渡ってくる事で、

var itemUrl = tagName(target)=='object'? target.data : target.src;

ここで、itemUrl が undefine になるみたいなので、

var tag = tagName(target);
var itemUrl =
    tag=='object'? target.data :
    tag=='img'? target.src : target.href;

と、Photo からコピペしたら動きました。

追記

エンバグさせてました……。http://tumblr.g.hatena.ne.jp/retlet/20100310/1268181450
これでどうかなあ。

var tag = tagName(target);
var itemUrl =
    tag=='object'? target.data :
    tag=='a'? target.href : target.src;

複数Tumblelog対応パッチを利用したreblogが通常のpostになる

※07/29追記 以下の件は0.4.3にて修正されました。

ちなみに質問というのはこのスクリプトを使ってサブのTumblelogに対してReblogを行うとNotesなどのReblog情報が消えてしまうようで、その対策などがないものかと思いまして。

複数Tumblelog対応パッチの紹介 - zaknakの日記

調べてみたところ、Tombloo.Service.post() *1

ds[p.name] = (p.name == (ps.favorite && ps.favorite.name))? p.favor(ps) : p.post(ps);

という、通常のpostを行うか、reblog処理を行うかを選択する部分があるのですが、パッチによって別名のTumblelogが設定されることを想定していないので、ここで通常postになっちゃうみたいですね。例えば test という名前のTumblelogだと、

'Tumblr - test' == 'Tumblr'

でfalseとなってp.post()が実行される。とりあえず自分は、こんな感じに置き換えて対処してみました。

ds[p.name] = (ps.favorite && ps.favorite.name && p.name.indexOf(ps.favorite.name) == 0) ? p.favor(ps) : p.post(ps);

先頭一致でtrueになるようにしたつもり。

*1:Firefoxプロファイル内の extensions/tombloo@brasil.to/chrome/content/library/30_Tombloo.Service.js になります