There are 2 previous versions of this script.
// ==UserScript==
// @name nicovideo comment downloader
// @include http://www.nicovideo.jp/watch/*
// @note userContent.jsの場合はファイルピッカーでダウンロード出来る
// @privilage true
// @version 0.1
// ==/UserScript==
(function(){
var link_point = document.getElementById("WATCHFOOTER");
var comments_link = document.createElement('a');
comments_link.appendChild(document.createTextNode('[comments]'));
comments_link.href = 'javascript:void(0);';
comments_link.addEventListener('click',
function(){
call_api(function(res){
GM_log(res.responseText);
if(/thread_id=(.+?)&.+&ms=(.+?)&/.test(res.responseText)){
var thread_id = decodeURIComponent(RegExp.$1);
var url = decodeURIComponent(RegExp.$2);
var isFork = confirm("コメントの種類を選択\n\nOK:通常コメント\nキャンセル:投稿者コメント");
if(isFork) var senddate = '<thread res_from="-1000" version="20061206" thread="' + thread_id + '" />';
else var senddate = '<thread res_from="-1000" version="20061206" fork="1" thread="' + thread_id + '" />';
GM_log(senddate);
//NNDDのファイル名の付け方に準拠
//例:
//新・豪血寺一族 -煩悩解放 - レッツゴー!陰陽師‐ニコニコ動画(ββ) - [sm9].xml
var movieID = /nicovideo\.jp\/watch\/(\w+)/.exec(location.href)[1];
var movieTitle = document.title;
var fileTitle = movieTitle + " - " + "[" + movieID + "]";
if (!isFork) fileTitle += "[\u6295\u7a3f\u8005\u30b3\u30e1\u30f3\u30c8]"; //投稿者コメント
fileTitle = fileTitle.replace(/[\$\*\?\"\'\/\\]/g, "_");
GM_xmlhttpRequest({
method: 'POST',
headers: { 'Content-type': 'text/xml', Cookie: document.cookie },
url: url,
data: senddate,
onload: function(res){
save(res.responseText.replace(/></g, '>\n<'),fileTitle,"xml");
},
onerror: function(res){ GM_log(res.status + ':' + res.statusText); }
});
}
});
}, false);
link_point.parentNode.insertBefore(comments_link, link_point);
function call_api(callback){
if(/watch\/([^/]+)$/.test(location.href)){
var video_id = RegExp.$1;
GM_xmlhttpRequest({
method: 'GET',
url: 'http://ext.nicovideo.jp/api/getflv/' + video_id,
onload: callback,
headers: { Cookie: document.cookie, Referrer: document.URL },
onerror: function(res){ GM_log(res.status + ':' + res.statusText); }
});
}
}
function save(data,title,ext){
/* if(chromeWindow){
//userContent.js+特権
//ファイルピッカーを使って保存先ファイルを決定
var fp = chromeWindow.Components.classes['@mozilla.org/filepicker;1']
.createInstance(chromeWindow.Components.interfaces.nsIFilePicker);
fp.init(window, "\u30b3\u30e1\u30f3\u30c8\u3092\u4fdd\u5b58", fp.modeSave); //コメントを保存
fp.appendFilters(Components.interfaces.nsIFilePicker.filterXML);
fp.defaultExtension = ext;
fp.defaultString = title + '.' + ext;
if ( fp.show() == fp.returnCancel || !fp.file ) return;
var save_file = fp.file;
if (save_file.exists()){ var _$ = confirm("上書きします。よろしいですか?");if(_$) save_file.remove(true); else return; }
save_file.create(save_file.NORMAL_FILE_TYPE, 0666);
var stream = chromeWindow.Components.classes['@mozilla.org/network/file-output-stream;1']
.createInstance(chromeWindow.Components.interfaces.nsIFileOutputStream);
stream.init(save_file, 0x02 | 0x08 | 0x20, 420, -1);
var str = unescape(encodeURIComponent(data));
stream.write(str, str.length);
stream.close();
//stream.init(aFile, 2, 0x200, false); // open as write only
//stream.write(date, date.length);
//stream.close();
}else{*/
//Greasemonkey or userContent.js+非特権
location.href = 'data:application/octet-stream,' + encodeURIComponent( data );
// }
}
})();