cxxの日記

2010-06-27

[]Amazonの拡大画像をshareするパッチ 17:57 はてなブックマーク - Amazonの拡大画像をshareするパッチ - cxxの日記

Photo - Amazonを選んだとき、拡大画像がある場合にはそちらをshareします。にひりずむ::しんぷる:Amazonの拡大機能で見れる最大の画像を表示して保存できるブックマークレット書いたを参考にしました。下のリンクからダウンロードして、 {Firefoxのプロファイルフォルダ}/tombloo/script フォルダにコピーした後、Firefoxを再起動してください。

2010-07-03

複数枚の画像がある場合に対応しました。

https://dl.dropbox.com/u/313738/tombloo/extractor.Amazon.zoomPhoto.js

Tombloo.Service.extractors.Amazon.extract = function(ctx){
	ctx.href = this.normalizeUrl(ctx.host, this.getAsin(ctx));
	ctx.title = 'Amazon: ' + $x('id("prodImageCell")//img/@alt') + ': ' + ctx.document.title.split(/[::] */).slice(-2).shift();
};

Tombloo.Service.extractors['Photo - Amazon'].check = function(ctx){
	return Tombloo.Service.extractors.Amazon.preCheck(ctx) && $x('./ancestor::td[@id="prodImageCell"]', ctx.target);
};

addAround(Tombloo.Service.extractors['Photo - Amazon'], 'extract', function(proceed, args){
	var ctx = args[0];
	var ps = proceed(args);
       	ps.itemUrl = ps.itemUrl.replace('.L.LZZZZZZZ.', '.L.');
	ctx.target.src = ps.itemUrl;
	var zoom = $x('//a[./span[contains(@class, "s_zoom")]]');
	if(zoom){
		return request(zoom.href).addCallback(function(res){
			if(res.responseText.match(/DynAPI\.addZoomViewer\("([^"]+)",(?:\d+,){4}(\d+)/))
				ps.itemUrl = (RegExp.$1 + '._SCRMZZZZZZ_V' + RegExp.$2 + '_.jpg').replace('/R/', '/P/');
			return ps;
		});
	}
	return ps;
});

2008-12-04

[]TwitterHTML変更の影響でTomblooでのquote postに失敗する 11:01 はてなブックマーク - TwitterのHTML変更の影響でTomblooでのquote postに失敗する - cxxの日記

間に合わせ

Tombloo.Service.extractors['Quote - Twitter'].extract = function(ctx){
	var body = ctx.selection;
	if(!body){
		var content = $x('(//span[@class="entry-content"])[1]');
		$x('.//a', content, true).forEach(function(l){l.href = l.href;});
		body = content.innerHTML.replace(/ (rel|target)=".+?"/g, '').
			replace('<a href="' + ctx.href.replace('/statuses/','/status/') + '">...</a>', '');
//		body = replace(/<a href="([^"]*)">[^<]*\.{3}<\/a>/g, '<a href="$1">$1</a>');
	}

	return {
		type     : 'quote',
		item     : ctx.title.substring(0, ctx.title.indexOf(': ')),
		itemUrl  : ctx.href,
		body     : body.trim(),
		favorite : {
			name : 'Twitter',
			id   : ctx.href.match(/(status|statuses)\/(\d+)/)[2],
		},
	}
};
replace('<a href="' + ctx.href.replace('/statuses/','/status/') + '">...</a>', '')
は長い発言がtimelineで表示されるときの省略の記号が何故かpermalinkでも表示されてる(!)ことへの対策。

brazilbrazil2008/12/08 13:24頂きました。ありがとうございました。僕もよく使ってます。サイト依存系の機能が多いのでHTML変更ぐらいで動かなくなっちゃいますねぇ...。

2008-12-03

[]Tomblooでphotoをpostするとき、引用元ページのlinkをクロスポストする 01:48 はてなブックマーク - Tomblooでphotoをpostするとき、引用元ページのlinkをクロスポストする - cxxの日記

仕組み上、Tumblrreblogを他にpostするときにはたまに間違ったURLを送ってしまいます。

Photoをpostするときに、linkのデフォルトのpost先で、photoのデフォルトのpost先ではないサービスに引用元のlinkをpostします。ファイルをダウンロードしてFirefoxのプロファイルフォルダ内のtombloo/scriptフォルダに置き、Firefoxを再起動してください。

誤マッチを減らすために少し変更しました。(2008-12-03 20:20)

URLのunescape(2008-12-05)

誤マッチを減らすために安全寄りにしました。(2008-12-07)

addBefore(Tombloo.Service, 'post', function(ps) {
	if (ps.type == 'photo') {
		var psLink = {
			type:    'link',
			item:    ps.page,
			itemUrl: ps.pageUrl,
			page:    ps.page,
			pageUrl: ps.pageUrl
		};
		if (ps.favorite && ps.favorite.name == 'Tumblr') {
			var reVia = /<p><a [^>]*>[^<]*<\/a>:<\/p>\s*<blockquote>\s*/g;
			var reA = /^(?:<p>)?<a href="([^"]+)">([^<]*)<\/a>/;
			var caption = ps.body.replace(reVia, '');
			if (caption.match(reA)) {
				psLink.itemUrl = unescapeHTML(RegExp.$1);
				psLink.item = unescapeHTML(RegExp.$2);
			}
		}
		var postersOrigin = models.getDefaults(ps);
		var posters = models.getDefaults(psLink).filter(function(p) {
			return !postersOrigin.some(function(p_) {
				return p_ == p;
			});
		});
		Tombloo.Service.post(psLink, posters);
	}
});

2008-12-02

[]TomblooTumblrのquote/videoをreblogするとき、クロスポスト先には引用元のURLをpostする 11:09 はてなブックマーク - TomblooでTumblrのquote/videoをreblogするとき、クロスポスト先には引用元のURLをpostする - cxxの日記

仕組み上、たまに間違ったURLを送ってしまいます。

ファイルをダウンロードしてFirefoxのプロファイルフォルダ内のtombloo/scriptフォルダに置き、Firefoxを再起動してください。Tomblooでquoteをpostするときにダブルクオートでくくるは意味もなくreblogを除外していたので、あわせて更新しました。

LDR + TomblooDashboard + Tomblooとも併用できます。

誤マッチを減らすために少し変更しました。(2008-12-03 20:21)

URLのunescape(2008-12-05)

誤マッチを減らすため安全寄りにしました。(2008-12-07)

addAround(
	Tombloo.Service.extractors.ReBlog, 'convertToParams',
	function(proceed, args) {
		var ps = proceed(args);
		var form = args[0];
		var reVia = /<p><a [^>]*>[^<]*<\/a>:<\/p>\s*<blockquote>\s*/g;
		var reA = /^(?:<p>)?<a href="([^"]+)">([^<]*)<\/a>/;
		
		switch (form['post[type]']) {
		case 'quote':
			var source = form['post[two]'];
			if (source.match(reA)) {
				ps.itemUrl = unescapeHTML(RegExp.$1);
				ps.item = unescapeHTML(RegExp.$2);
			}
			break;
		case 'video':
			var embed = form['post[one]'];
			var caption = form['post[two]'].replace(reVia, '');
			if (embed.match(/<a href="([^"]+)">([^<]*)<\/a>/)) {
				ps.itemUrl = unescapeHTML(RegExp.$1);
				ps.item = unescapeHTML(RegExp.$2);
			}
			else if (caption.match(reA)) {
				ps.itemUrl = unescapeHTML(RegExp.$1);
				ps.item = unescapeHTML(RegExp.$2);
			}
			if (embed.indexOf('http') == 0) {
				ps.itemUrl = unescapeHTML(embed);
				if (!ps.item)
					ps.item = unescapeHTML(
						caption.replace(/<[^>]*>/g, '').replace(/[\n\r]{2,}/g, '\n').trim()
					);
			}
			break;
		}
		return ps;
	}
);

2008-11-01

[]Mac上のTomblooで画像キャプチャをLocalにpostするとエラーが出て、画像は保存されるがSpotlightコメントが書き込まれない 22:54 はてなブックマーク - Mac上のTomblooで画像キャプチャをLocalにpostするとエラーが出て、画像は保存されるがSpotlightコメントが書き込まれない - cxxの日記

Tombloo 0.3.26で修正されています。

f:id:cxx:20081101224239p:image

20_model.jsの(Tombloo 0.3.25だと)566行目の

					return ps.file.copyTo(file.parent, file.leafName);
					ps.file.copyTo(file.parent, file.leafName);
					return file;
に書き換えると回避できる。

[]Tomblooではてなブックマークに日本語等を含むURIのエントリをpostすると自分だけユーザー一覧に出てこないのを回避する 20:36 はてなブックマーク - Tomblooではてなブックマークに日本語等を含むURIのエントリをpostすると自分だけユーザー一覧に出てこないのを回避する - cxxの日記

Wikipedia日本語版ではもともと問題がなかったはずなので、一部のサイト(maclalala)でのみ起きる問題だと思います。すみません。

あ → %E3%81%82 → %25E3%2581%2582
になるか
あ → %e3%81%82 → %25e3%2581%2582
になるかで別エントリ扱いになるみたいで、しかも後者はユーザー一覧が全く見れない。
addAround(models.HatenaBookmark, 'addBookmark', function(proceed, args) {
	args[0] = args[0].replace(
		/%[0-9a-f]{2}/g, function(s){ return s.toUpperCase() });
	return proceed(args);
});

[]Tomblooでタイトルが空のページをpostするときにURIをタイトル代わりにする 19:24 はてなブックマーク - Tomblooでタイトルが空のページをpostするときにURIをタイトル代わりにする - cxxの日記

タイトルが空のページでTumblrにquote postをすると引用元が表示されなくなってしまうのでURIをタイトル代わりにして回避する。

addBefore(Tombloo.Service, 'share', function(ctx) {
	if (ctx.title == '') ctx.title = ctx.href;
});

[]Tomblooでごく一部のページでタイトルが正常に取得できないのを回避する 18:42 はてなブックマーク - Tomblooでごく一部のページでタイトルが正常に取得できないのを回避する - cxxの日記

http://tinyurl.com/5ozd9o このページでtombloo/link postしようとするとtitleに [object HTMLEmbedElement] が入る。原因不明

http://twitter.com/ku/status/980231313

object要素のid属性やembed要素のname属性が"title"になっているとdocument.titleがそちらを参照してしまうみたいです。

addBefore(Tombloo.Service, 'share', function(ctx) {
	if (ctx.document.title && typeof ctx.document.title != 'string') {
		var element = $x('//title', ctx.document);
		ctx.title = element? element.innerHTML.trim() : '';
	}
});

「intitle:"[object HTMLEmbedElement]"」でぐぐるとソーシャルブックマークのエントリがいくらかひっかかる。