-
Notifications
You must be signed in to change notification settings - Fork 30
Browser helper scripts
Alex Aplin edited this page Jul 28, 2022
·
5 revisions
dado330 has graciously provided some scripts that can be used within browsers to prepare links for donwload with nndownload. These scripts have only been tested by the developer in Firefox using Violentmonkey, but they should work most anywhere. These scripts require the use of the External Application Button extension and native-client — see dado330's wiki page for more usage information.
No guarantee of support, testing, or security is made for these scripts and they are only provided here as a convenience to users.
Run download automatically:
@echo off
set string=%*
REM Modify the following commands according to your needs
REM %string:,= % are the links to download
python nndownload.py %string:,= % -u email@domain.com
Save links to file:
@echo off
REM Replace links.txt with your desired file name
REM %~dp0 is the path of the bat file folder change as needed
if not exist "%~dp0links.txt" (copy NUL "%~dp0links.txt")
echo %1 >> "%~dp0links.txt"
exit
// ==UserScript==
// @name nndownload helper
// @namespace https://github.com/AlexAplin/nndownload
// @description Create list of link to download via nndownload
// @include *
// @version 0.1
// @grant window.close
// @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js
// ==/UserScript==
// Parameters
const close_tab = true
var shortcut_in_use = [67, 'A', 't'] /* same as ['C', 'A', 'T']*/
const type = "C";
var shortcut_delete_queue = ['a', 65, 'C'] /* same as ['A', 'B', 'C'], valid only if type == "C"*/
const name_file_to_download = "nicovideo links.txt";
const clear_queue = true;
var shortcut_download_queue = ['a', 's', 'd'] /* same as ['A', 'B', 'C'], valid only if type == "C"*/
// Constants
const regex = new RegExp("https?://(((ch|sp|www|seiga|live|cas)\.)((nicovideo\.jp/)(watch|mylist|user\/illust|user\/manga|user|comic|seiga|gate|article|channel|manga|illust))/|(nico\.ms)/)([a-zA-Z0-9-]+?)");
const alias = {
"": 0,
"": 1,
"": 2,
"CANCEL": 3,
"": 4,
"": 5,
"HELP": 6,
"": 7,
"BACK_SPACE": 8,
"TAB": 9,
"": 10,
"": 11,
"CLEAR": 12,
"ENTER": 13,
"ENTER_SPECIAL": 14,
"": 15,
"SHIFT": 16,
"CONTROL": 17,
"ALT": 18,
"PAUSE": 19,
"CAPS_LOCK": 20,
"KANA": 21,
"EISU": 22,
"JUNJA": 23,
"FINAL": 24,
"HANJA": 25,
"": 26,
"ESCAPE": 27,
"CONVERT": 28,
"NONCONVERT": 29,
"ACCEPT": 30,
"MODECHANGE": 31,
"SPACE": 32,
"PAGE_UP": 33,
"PAGE_DOWN": 34,
"END": 35,
"HOME": 36,
"LEFT": 37,
"UP": 38,
"RIGHT": 39,
"DOWN": 40,
"SELECT": 41,
"PRINT": 42,
"EXECUTE": 43,
"PRINTSCREEN": 44,
"INSERT": 45,
"DELETE": 46,
"": 47,
"0": 48,
"1": 49,
"2": 50,
"3": 51,
"4": 52,
"5": 53,
"6": 54,
"7": 55,
"8": 56,
"9": 57,
"COLON": 58,
"SEMICOLON": 59,
"LESS_THAN": 60,
"EQUALS": 61,
"GREATER_THAN": 62,
"QUESTION_MARK": 63,
"AT": 64,
"A": 65,
"B": 66,
"C": 67,
"D": 68,
"E": 69,
"F": 70,
"G": 71,
"H": 72,
"I": 73,
"J": 74,
"K": 75,
"L": 76,
"M": 77,
"N": 78,
"O": 79,
"P": 80,
"Q": 81,
"R": 82,
"S": 83,
"T": 84,
"U": 85,
"V": 86,
"W": 87,
"X": 88,
"Y": 89,
"Z": 90,
"OS_KEY": 91,
"": 92,
"CONTEXT_MENU": 93,
"": 94,
"SLEEP": 95,
"NUMPAD0": 96,
"NUMPAD1": 97,
"NUMPAD2": 98,
"NUMPAD3": 99,
"NUMPAD4": 100,
"NUMPAD5": 101,
"NUMPAD6": 102,
"NUMPAD7": 103,
"NUMPAD8": 104,
"NUMPAD9": 105,
"MULTIPLY": 106,
"ADD": 107,
"SEPARATOR": 108,
"SUBTRACT": 109,
"DECIMAL": 110,
"DIVIDE": 111,
"F1": 112,
"F2": 113,
"F3": 114,
"F4": 115,
"F5": 116,
"F6": 117,
"F7": 118,
"F8": 119,
"F9": 120,
"F10": 121,
"F11": 122,
"F12": 123,
"F13": 124,
"F14": 125,
"F15": 126,
"F16": 127,
"F17": 128,
"F18": 129,
"F19": 130,
"F20": 131,
"F21": 132,
"F22": 133,
"F23": 134,
"F24": 135,
"": 136,
"": 137,
"": 138,
"": 139,
"": 140,
"": 141,
"": 142,
"": 143,
"NUM_LOCK": 144,
"SCROLL_LOCK": 145,
"WIN_OEM_FJ_JISHO": 146,
"WIN_OEM_FJ_MASSHOU": 147,
"WIN_OEM_FJ_TOUROKU": 148,
"WIN_OEM_FJ_LOYA": 149,
"WIN_OEM_FJ_ROYA": 150,
"": 151,
"": 152,
"": 153,
"": 154,
"": 155,
"": 156,
"": 157,
"": 158,
"": 159,
"CIRCUMFLEX": 160,
"EXCLAMATION": 161,
"DOUBLE_QUOTE": 162,
"HASH": 163,
"DOLLAR": 164,
"PERCENT": 165,
"AMPERSAND": 166,
"UNDERSCORE": 167,
"OPEN_PAREN": 168,
"CLOSE_PAREN": 169,
"ASTERISK": 170,
"PLUS": 171,
"PIPE": 172,
"HYPHEN_MINUS": 173,
"OPEN_CURLY_BRACKET": 174,
"CLOSE_CURLY_BRACKET": 175,
"TILDE": 176,
"": 177,
"": 178,
"": 179,
"": 180,
"VOLUME_MUTE": 181,
"VOLUME_DOWN": 182,
"VOLUME_UP": 183,
"": 184,
"": 185,
"SEMICOLON": 186,
"EQUALS": 187,
"COMMA": 188,
"MINUS": 189,
"PERIOD": 190,
"SLASH": 191,
"BACK_QUOTE": 192,
"": 193,
"": 194,
"": 195,
"": 196,
"": 197,
"": 198,
"": 199,
"": 200,
"": 201,
"": 202,
"": 203,
"": 204,
"": 205,
"": 206,
"": 207,
"": 208,
"": 209,
"": 210,
"": 211,
"": 212,
"": 213,
"": 214,
"": 215,
"": 216,
"": 217,
"": 218,
"OPEN_BRACKET": 219,
"BACK_SLASH": 220,
"CLOSE_BRACKET": 221,
"QUOTE": 222,
"": 223,
"META": 224,
"ALTGR": 225,
"": 226,
"WIN_ICO_HELP": 227,
"WIN_ICO_00": 228,
"": 229,
"WIN_ICO_CLEAR": 230,
"": 231,
"": 232,
"WIN_OEM_RESET": 233,
"WIN_OEM_JUMP": 234,
"WIN_OEM_PA1": 235,
"WIN_OEM_PA2": 236,
"WIN_OEM_PA3": 237,
"WIN_OEM_WSCTRL": 238,
"WIN_OEM_CUSEL": 239,
"WIN_OEM_ATTN": 240,
"WIN_OEM_FINISH": 241,
"WIN_OEM_COPY": 242,
"WIN_OEM_AUTO": 243,
"WIN_OEM_ENLW": 244,
"WIN_OEM_BACKTAB": 245,
"ATTN": 246,
"CRSEL": 247,
"EXSEL": 248,
"EREOF": 249,
"PLAY": 250,
"ZOOM": 251,
"": 252,
"PA1": 253,
"WIN_OEM_CLEAR": 254,
"": 255
};
//functions
var keys = {}
function handleKeyPress(evt) {
let { keyCode, type } = evt || Event; // to deal with IE
let isKeyDown = (type == 'keydown');
keys[keyCode] = isKeyDown;
if(isKeyDown && type == "D" && shortcut_delete_queue.map(i => keys[i]).every(Boolean)){
localStorage.setItem("nndownload-queue", Array());
}
if(isKeyDown && shortcut_download_queue.map(i => keys[i]).every(Boolean)){
console.log(Object.values(vis["data"]).join('\n'));
var blob = new Blob([Object.values(vis["data"]).join('\n')], {type: "text/plain;charset=utf-8"});
saveAs(blob, name_file_to_download);
Object.values(keys).map(x => false)
if(clear_queue){localStorage.setItem("nndownload-queue", Array());}
}
if(isKeyDown && shortcut_in_use.map(i => keys[i]).every(Boolean) && regex.test(window.location.href)){
vis["data"][Object.keys(vis["data"]).length] = window.location.href;
localStorage.setItem("nndownload-queue", JSON.stringify(vis));
console.log(vis["data"]);
console.log(JSON.stringify(vis));
if(close_tab){window.close();}
}
};
//main
shortcut_in_use = shortcut_in_use.map(function(e) {
return Number.isInteger(e) ? e : alias[e.toUpperCase()];
});
shortcut_delete_queue = shortcut_delete_queue.map(function(e) {
return Number.isInteger(e) ? e : alias[e.toUpperCase()];
});
shortcut_download_queue = shortcut_download_queue.map(function(e) {
return Number.isInteger(e) ? e : alias[e.toUpperCase()];
});
var sto = localStorage.getItem("nndownload-queue") ? localStorage.getItem("nndownload-queue") : '{"data":{}}';
var vis = JSON.parse(sto);
vis["data"] = !vis["data"] ? Array() : vis["data"];
window.addEventListener("keyup", handleKeyPress);
window.addEventListener("keydown", handleKeyPress);