ニコニコ動画以外もnico.msで短縮できると今更になって知ったのでブックマークレット書いた

概要

タイトルの通りです。
昨日(厳密には一昨日)、東北地方太平洋沖地震支援イラストで堀江由衣さんの描いた絵ニコニコ静画にあがってたニュースをツイートしたのですが、その際に知りました。


というわけで、以前書いたBookmarkletを拡張しました。
※対応サービスについてはニコニコ大百科nico.msの項を参考にしました。


スクリプトを書く時には改行、インデント、コメントなどあった方が当然楽なので先にUAスクリプト*1が出来上がります。

(function(){

var p=location.pathname;var t=document.title;var uri="http://nico.ms/";

if(p.match(/\/(watch|seiga|community|channel|app|material)\/..\d*/)){
	// ニコニコ動画 ニコニコ静画 ニコニコ生放送 ニコニココミュニティ ニコニコチャンネル ニコニコアプリ ニコニコ実況 ニコニコモンズ ニコニコニュース
	uri+=p.split("?")[0].split("/")[2];
}else if(p.match(/\/ppv_video\/..\d*/)){
	// ニコニコ有料動画
	uri+=p.split("?")[0].split("/")[3];
}else if(p.match(/\/products\/detail\/\d*/)){
	// ニコニコ直販
	uri+="nd"+p.split("?")[0].split("/")[3];
}else if(p.match(/\/item\//)){
	// ニコニコ市場
	uri+=p.split("?")[0].split("/")[2];
}else if(location.host.match(/dic\.nicovideo\.jp/)){
	// ニコニコ大百科
	if(p.match(/\/b\/a\//)){
		var f=document.getElementsByTagName("form");
		uri+="dic/"+f[f.length-2].parentNode.parentNode.id.split("_")[3];
	}else{
		uri+="dic/"+document.getElementsByTagName("input")[0].id.split("_")[2];
	}
}else if(p.match(/\/(user|mylist)\/\d*/)){
	// ユーザページ マイリスト
	uri+=p.substring(1,p.length);
}else{
	uri=decodeURIComponent(location.href);
}
prompt(t,t+" "+uri)!=null?location.href:void(0);

})();


上記の部分から余分な部分を削ったり、空白文字を"%20"に置換したりして、Bookmarklet化します。

javascript:(function(){var%20p=location.pathname;var%20t=document.title;var%20uri="http://nico.ms/";if(p.match(/\/(watch|seiga|community|channel|app|material)\/..\d*/)){uri+=p.split("?")[0].split("/")[2];}else%20if(p.match(/\/ppv_video\/..\d*/)){uri+=p.split("?")[0].split("/")[3];}else%20if(p.match(/\/products\/detail\/\d*/)){uri+="nd"+p.split("?")[0].split("/")[3];}else%20if(p.match(/\/item\//)){uri+=p.split("?")[0].split("/")[2];}else%20if(location.host.match(/dic\.nicovideo\.jp/)){if(p.match(/\/b\/a\//)){var%20f=document.getElementsByTagName("form");uri+="dic/"+f[f.length-2].parentNode.parentNode.id.split("_")[3];}else{uri+="dic/"+document.getElementsByTagName("input")[0].id.split("_")[2];}}else%20if(p.match(/\/(user|mylist)\/\d*/)){uri+=p.substring(1,p.length);}else{uri=decodeURIComponent(location.href);}prompt(t,t+"%20"+uri)!=null?location.href:void(0);})();

ただ、Sleipnirでは動きません。IE9単体なら動いたのに(´・ω・`) なんとかしてよフェンリルさ〜んw*2
Firefox 4 RC、Google Chrome(β)でしか試してない*3のですが、たぶん主要ブラウザなら問題無いでしょうw



それと、対応しているはずのサービスで上手く動かなかったら報告ヨロシクね。
ただ、最新気味なブラウザじゃないと私に環境無いけどね。

テスト用

ということで適当に選んでみました。
リンク先の内容については保証はしません。
http://www.nicovideo.jp/watch/sm13880944
http://www.nicovideo.jp/watch/1282554464
http://ch.nicovideo.jp/ppv_video/ch323/so13711810
http://seiga.nicovideo.jp/seiga/im1005848
http://seiga.nicovideo.jp/watch/mg18790
http://live.nicovideo.jp/watch/lv43575088
http://app.nicovideo.jp/app/ap16
http://dic.nicovideo.jp/a/東北地方太平洋沖地震
http://dic.nicovideo.jp/b/a/菅野よう子/61-#79
http://ichiba.nicovideo.jp/item/ndJISHIN-BOKIN
http://jk.nicovideo.jp/watch/jk7
http://www.niconicommons.jp/material/nc27320
http://com.nicovideo.jp/community/co1724
http://chokuhan.nicovideo.jp/products/detail/309
http://news.nicovideo.jp/watch/nw43211
http://www.nicovideo.jp/user/55661
http://www.nicovideo.jp/mylist/15532762

*1:"\bookmarklet"内の◯◯.jsなら改行あっても構わないですが

*2:まぁ、ifでの評価を簡素にしたり、三項演算子使ったり、外部スクリプト化したりしてダイエットさせまくれば通るかもね

*3:眠気が限界でIE9は動画だけ確認