您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一键批量下载P站画师的全部作品
当前为
// ==UserScript== // @name PixivUserBatchDownload // @name:zh-CN P站画师个人作品批量下载工具 // @namespace http://www.mapaler.com/ // @description Batch download pixiv user's images in one key. // @description:zh-CN 一键批量下载P站画师的全部作品 // @include http://www.pixiv.net/* // @exclude http://www.pixiv.net/*mode=manga&illust_id* // @exclude http://www.pixiv.net/*mode=big&illust_id* // @exclude http://www.pixiv.net/*mode=manga_big* // @exclude http://www.pixiv.net/*search.php* // @version 2.1.2 // @grant none // @copyright 2016+, Mapaler <[email protected]> // @icon http://www.pixiv.net/favicon.ico // ==/UserScript== (function() { var pICD = 20; //pageIllustCountDefault默认每页作品数量 var Version = 3; //当前设置版本,用于提醒是否需要 if (!getConfig("PUBD_reset", -1))ResetConfig(); //新用户重置设置 if (getConfig("PUBD_reset", 1) < Version) { //老用户提醒更改设置 alert("2.1.0版本可自定义下载网址了,可以按需修改。"); ResetConfig(true); } var download_mod = getConfig("PUBD_download_mode",1); //下载模式 var illustPattern = "https?://([^/]+)/.+/(\\d{4})/(\\d{2})/(\\d{2})/(\\d{2})/(\\d{2})/(\\d{2})/((\\d+)(-[0-9a-zA-Z]+)?(?:_p\\d+|_ugoira\\d+x\\d+)?)(?:_\\w+)?\\.([\\w\\d]+)"; //P站图片地址正则匹配式 //var userImagePattern = "https?://([^/]+)/.+/(\w+)/(\\d+)\\.([\\w\\d]+)"; //P站用户头像图片地址正则匹配式 var getPicNum = 0; //Ajax获取了文件的数量 var downOver; //检测下载是否完成的循环函数 var dataset = { user_id: 0, //作者ID user_pixiv_id: "", //作者账户,可以从作者头像文件获取。 user_name: "", //作者昵称 user_head: "", //作者头像url。将来可考虑生成ico保存到文件夹 illust_count: 0, //作品总数 illust_file_count: 0, //作品文件总数(含多图) illust:[ ] } function illust() { var obj = { illust_id: 0, //作品ID illust_page: 0, //在作者的第几页 illust_index: 0, //全部作品中序号 illust_index_inverted: 0, //全部作品中序号_倒序 illust_index_in_page: 0, //该页上序号 illust_index_in_page_inverted: 0, //该页上序号_倒序 title: "", //作品标题 type: 0, //类型,单页、漫画、动画 //type_name: "", //类型用文字表示 filename: [""], //文件名 hash: "", //加密字符串 //page: [0], //第几页(漫画) extention: [""], //扩展名 original_src: [""], //原始图片链接 page_count: 0, //共几页(漫画) year: 0, month: 0, day: 0, hour: 0, minute: 0, second: 0, thumbnail_src: "", //缩略图地址 domain: "", //域名 url: "", //作品页面 time: "", //显示时间 size: "", //显示大小 width: 0, //宽 height: 0, //高 tools: [""], //使用工具 caption: "", //说明 tags: [""], //标签 //添加作品的顺序 addIndexFromPage: function (index, page, illcount) { if (index == undefined) index = this.illust_index_in_page; else this.illust_index_in_page = index; if (page == undefined) page = this.illust_page; else this.illust_page = page; if (illcount == undefined) illcount = dataset.illust_count; this.illust_index = (this.illust_page - 1) * pICD + this.illust_index_in_page; this.illust_index_inverted = illcount - this.illust_index + 1; if ((illcount - this.illust_index) >= pICD) this.illust_index_in_page_inverted = pICD - index + 1; else this.illust_index_in_page_inverted = illcount % pICD - index + 1; }, //从图片地址添加作品 addDataFromImgSrc: function (src) { if (src == undefined) src = this.thumbnail_src; var regSrc = new RegExp(illustPattern, "ig"); var aImg = regSrc.exec(src); this.page_count = 1; this.domain = aImg[1]; this.year = aImg[2]; this.month = aImg[3]; this.day = aImg[4]; this.hour = aImg[5]; this.minute = aImg[6]; this.second = aImg[7]; this.filename[0] = aImg[8]; this.illust_id = aImg[9]; this.hash = aImg[10]; this.extention[0] = aImg[11]; this.original_src[0] = "http://" + this.domain + "/img-original/img/" + this.year + "/" + this.month + "/" + this.day + "/" + this.hour + "/" + this.minute + "/" + this.second + "/" + this.filename[0] + "." + this.extention[0]; switch(this.type) { case 0: //单图 this.page_count = 1; getPicNum++; break; case 1: //多图 var mangaUrl = this.url.replace(/mode=[^&]+/, "mode=manga"); getSource(mangaUrl, dealMangaFast, this); break; case 2: //动图 this.page_count = 1; this.filename[0] += "_ugoira1920x1080"; this.extention[0] = "zip"; this.original_src[0] = "http://" + this.domain + "/img-original/img/" + this.year + "/" + this.month + "/" + this.day + "/" + this.hour + "/" + this.minute + "/" + this.second + "/" + this.filename[0] + "." + this.extention[0]; getPicNum++; break; case 3: //漫画单图 this.page_count = 1; getPicNum++; break; default: } }, //ajax读取原始页面数据 ajaxLoad: function (url) { if (url == undefined) url = this.url; else this.url = url; if (this.illust_id < 1) { var regSrc = /illust_id=(\d+)/ig; var iid = regSrc.exec(url); if (iid.length >= 2) this.illust_id = iid[1]; } getSource(url, dealIllust, this); }, } return obj; } var menuInsertPlace = document.getElementsByClassName("user-relation")[0]; if (menuInsertPlace == undefined) return; var li1 = document.createElement("li"); var li2 = document.createElement("li"); menuInsertPlace.appendChild(li1); menuInsertPlace.appendChild(li2); li1.className = "ui-selectbox-container"; li2.className = "infoProgress"; var menu_ul = buildMenu(); var btnStart = document.createElement("button"); btnStart.className = "_button following"; btnStart.innerHTML = "获取全部作品"; btnStart.onclick = function (e) { if (menu_ul.parentNode == li1) li1.removeChild(menu_ul); else li1.appendChild(menu_ul); } li1.appendChild(btnStart); //生成设置窗口DOM var setInsertPlace = document.getElementsByClassName("column-header")[0] || document.body; var setWindow = buildSetting(); //生成导出窗口DOM var exportInsertPlace = setInsertPlace; var exportWindow = buildExport(); //生成直接链接窗口DOM var directLinkInsertPlace = setInsertPlace; var directLinkWindow = buildDirectLink(); //开始程序 function startProgram(mode) { download_mod = getConfig("PUBD_download_mode",1); //重新判断下载模式 if(getPicNum<1) { dealUserPage1(); } clearInterval(downOver); downOver = setInterval(function () { startProgramCheck(mode) }, 500); } function dealUserPage1(userId) { if (userId == undefined) userId = pixiv.context.userId; dataset.user_id = userId; var locationSearch = (document.location.search.length > 0 ? document.location.search.replace(/mode=\w+/ig, "").replace(/illust_id=\d+/ig, "").replace(/id=\d+/ig, "") : "?"); var linkPre = document.location.origin + "/member_illust.php" + locationSearch + "&id=" + userId; var link = getPageSrc(linkPre, 1); getSource(link, dealUser, linkPre, userId) } //开始分析本作者 function dealUser(response, linkPre, userId) { var parser = new DOMParser(); PageDOM = parser.parseFromString(response, "text/html"); var count_badge = PageDOM.getElementsByClassName("count-badge")[0]; if (!count_badge) { alert("未发现作品数DOM"); clearInterval(downOver); return; } var regPC = /(\d+)/ig; var photoCount = regPC.exec(count_badge.textContent); if (photoCount.length >= 2) { dataset.illust_count = parseInt(photoCount[1]); if (dataset.illust_count < 1) { alert("作品数为0"); clearInterval(downOver); return; } dataset.illust_file_count = dataset.illust_count; var pageCount = Math.ceil(dataset.illust_count / 20); } else { alert("未发现作品数字符串"); clearInterval(downOver); return; } var user_link = PageDOM.getElementsByClassName("user-link")[0]; var user_dom = user_link.getElementsByClassName("user")[0]; dataset.user_name = user_dom.textContent; var userImage = PageDOM.getElementsByClassName("user-image")[0]; dataset.user_head = userImage?userImage.src:""; var tabFeed = PageDOM.getElementsByClassName("tab-feed")[0]; var regUserFeed = /.+\/([\w\-]+)$/ig; //用户账户正则匹配式,您只可以输入小字母a-z, 数字, 英文破折号(-), 以及英文下划线( _ ) var regrlt = regUserFeed.exec(tabFeed?tabFeed.getAttribute("href"):""); if (regrlt.length>1) dataset.user_pixiv_id = regrlt[1]; dealPage(response, 1); //列表页循环 for (pi = 2; pi <= pageCount; pi++) //for (pi = 0; pi < 1; pi++) { var link = getPageSrc(linkPre, pi); getSource(link, dealPage, pi); } } //获取页面网址 function getPageSrc(linkPre, page) { return linkPre + "&p=" + page; } //直接通过XMLHttpRequest对象获取远程网页源代码 function getSource(url,callback,index, index2) { var xhr = new XMLHttpRequest(); //创建XMLHttpRequest对象 xhr.onreadystatechange = function() //设置回调函数 { if (xhr.readyState == 4 && xhr.status == 200) callback(xhr.responseText, index, index2); } xhr.open("GET", url, true); xhr.send(null); return xhr.responseText; } //处理列表页面的回调函数 function dealPage(response, pageIndex) { /* 老式构建网页dom方法 var PageDOM = document.createElement("div"); //创建一个容器 PageDOM.innerHTML = response; //插入代码 */ var parser = new DOMParser(); PageDOM = parser.parseFromString(response, "text/html"); var _image_items = PageDOM.getElementsByClassName("_image-items"); if (_image_items.length >= 0) { var image_items = _image_items[0].getElementsByClassName("image-item"); //作品循环 for (ii = 0; ii < image_items.length; ii++) //for (ii = 6; ii <= 6; ii++) { var _thumbnail = image_items[ii].getElementsByClassName("_thumbnail")[0]; var title = image_items[ii].getElementsByClassName("title")[0]; var link = image_items[ii].getElementsByTagName("a"); var ill = new illust; if (link[0].href.length < 1) { console.log("你的浏览器无法获取DOMParser内a标签的href。目前只有Chrome这么做。") ill.url = document.location.origin + link[0].getAttribute("href"); } else { ill.url = link[0].href; } ill.title = title.textContent; ill.addIndexFromPage(ii + 1, pageIndex, dataset.illust_count); ill.thumbnail_src = _thumbnail.src; if (image_items[ii].getElementsByClassName("ugoku-illust").length > 0) ill.type = 2; else if (image_items[ii].getElementsByClassName("multiple").length > 0) ill.type = 1; else if (image_items[ii].getElementsByClassName("manga").length > 0) ill.type = 3; else ill.type = 0; if (download_mod == 1) { ill.addDataFromImgSrc(ill.thumbnail_src); } else { ill.ajaxLoad(); } dataset.illust.push(ill); } } } //处理作品的回调函数 function dealIllust(response, ill) { //var regSrc = /https?:\/\/([^\/]+)\/.+\/(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})\/(\d{2})\/(\d{2})\/((\d+)(?:[\-_][\w\d\-]+)?)\.([\w\d]+)/ig; //P站图片命名规则 var regSrc = new RegExp(illustPattern, "ig"); var parser = new DOMParser(); PageDOM = parser.parseFromString(response, "text/html"); //work_info var work_info = PageDOM.getElementsByClassName("work-info")[0]; var works_display = PageDOM.getElementsByClassName("works_display")[0]; //var title = work_info.getElementsByClassName("title")[0]; //ill.title = title.textContent; var caption = work_info.getElementsByClassName("caption")[0]; if (caption) ill.caption = caption.textContent; //metas var metas = work_info.getElementsByClassName("meta")[0]; var meta = metas.getElementsByTagName("li"); ill.time = meta[0].textContent; ill.size = meta[1].textContent; var tools = metas.getElementsByClassName("tools")[0] if (tools) { var toolsli = tools.getElementsByTagName("li"); for (ti = 0; ti < toolsli.length; ti++) { ill.tools[ti] = toolsli[ti].textContent; } } //TAG var tagsDom = PageDOM.getElementsByClassName("work-tags")[0].getElementsByClassName("tags-container")[0].getElementsByClassName("tags"); if (tagsDom.length > 0) { var tags = tagsDom[0].getElementsByClassName("tag"); for (ti = 0; ti < tags.length; ti++) { ill.tags[ti] = tags[ti].getElementsByClassName("text")[0].textContent; } } var script = PageDOM.getElementById("wrapper").getElementsByTagName("script")[0]; //建立内部临时变量,避免影响到原始页面 var pixiv = new Object; pixiv.context = new Object; //执行获取到的代码 eval(script.innerHTML); ill.illust_id = pixiv.context.illustId; ill.width = pixiv.context.illustSize[0]; ill.height = pixiv.context.illustSize[1]; ill.title = pixiv.context.illustTitle; //dataset.user_name = pixiv.context.userName; //添加静图 if (PageDOM.getElementsByClassName("original-image")[0]) {//静图 var originalImage = PageDOM.getElementsByClassName("original-image")[0].getAttribute("data-src"); ill.page_count = 1; ill.type = 0; ill.original_src[0] = originalImage; //originalImage = "http://i2.pixiv.net/img-original/img/2016/01/26/00/01/01/54911277_p0.jpg"; var aImg = regSrc.exec(originalImage); //console.log(aImg); //["http://i2.pixiv.net/img-...0/01/01/54911277_p0.jpg", "i2.pixiv.net", "2016", "01", "26", "00", "01", "01", "54911277_p0", "54911277", "jpg"] if (aImg.length >= 1) { ill.domain = aImg[1]; ill.year = aImg[2]; ill.month = aImg[3]; ill.day = aImg[4]; ill.hour = aImg[5]; ill.minute = aImg[6]; ill.second = aImg[7]; ill.filename[0] = aImg[8]; ill.hash = aImg[10]; ill.extention[0] = aImg[11]; getPicNum++; }else { alert("获取单图原始图片路径信息失败,可能需要更新正则匹配模式。"); } } //添加动图 else if (PageDOM.getElementsByClassName("_ugoku-illust-player-container").length > 0) { var zipUrl = pixiv.context.ugokuIllustFullscreenData.src; ill.page_count = pixiv.context.ugokuIllustFullscreenData.frames.length; ill.type = 2; ill.original_src[0] = zipUrl; //zipUrl = "http://i3.pixiv.net/img-zip-ugoira/img/2015/06/02/01/50/26/50680914_ugoira1920x1080.zip"; var aImg = regSrc.exec(zipUrl); //console.log(aImg); //["http://i3.pixiv.net/img-...914_ugoira1920x1080.zip", "i3.pixiv.net", "2015", "06", "02", "01", "50", "26", "50680914_ugoira1920x1080", "50680914", "zip"] if (aImg.length >= 1) { ill.domain = aImg[1]; ill.year = aImg[2]; ill.month = aImg[3]; ill.day = aImg[4]; ill.hour = aImg[5]; ill.minute = aImg[6]; ill.second = aImg[7]; ill.filename[0] = aImg[8]; ill.hash = aImg[10]; ill.extention[0] = aImg[11]; getPicNum++; } else { alert("获取动图原始图片路径信息失败,可能需要更新正则匹配模式。"); } } //添加多图 else if (PageDOM.getElementsByClassName("multiple").length > 0) { ill.type = 1; var aImg = regSrc.exec(ill.thumbnail_src); if (aImg.length >= 1) { ill.domain = aImg[1]; ill.year = aImg[2]; ill.month = aImg[3]; ill.day = aImg[4]; ill.hour = aImg[5]; ill.minute = aImg[6]; ill.second = aImg[7]; ill.filename[0] = aImg[8]; ill.hash = aImg[10]; ill.extention[0] = aImg[11]; } var regPageCont = /.+\s+(\d+)[pP]/ig; var rs = regPageCont.exec(ill.size); if (rs.length >= 2) { ill.page_count = parseInt(rs[1]); console.log(ill.illust_id + "为多图,存在" + ill.page_count + "张"); dataset.illust_file_count += ill.page_count - 1; //图片总数里增加多图的张数 var manga_big = ill.url.replace(/mode=[^&]+/, "mode=manga_big"); var manga_big_url = manga_big + "&page=" + 0; getSource(manga_big_url, dealManga, ill); /*以前以为能够多图扩展名不一样 for (var pi = 0; pi < ill.page_count; pi++) { var manga_big_url = manga_big + "&page=" + pi; getSource(manga_big_url, dealManga, ill, pi); } */ } else { alert("获取多图总张数失败"); } } //添加漫画 else if (works_display.getElementsByClassName("manga").length > 0) { //因为Ajax无法设置Referer,而Mode=big无Referer会跳转回作品信息页面,因此这里只能用现有信息来猜 var thumbnailImage = works_display.getElementsByClassName("_layout-thumbnail")[0].getElementsByTagName("img")[0]; ill.page_count = 1; ill.type = 3; console.log("此图为漫画单图,目前为了兼容性无法获取真是扩展名,采用3种扩展名各添加一个下载链接的处理方式。"); var aImg = regSrc.exec(thumbnailImage.src); if (aImg.length >= 1) { ill.domain = aImg[1]; ill.year = aImg[2]; ill.month = aImg[3]; ill.day = aImg[4]; ill.hour = aImg[5]; ill.minute = aImg[6]; ill.second = aImg[7]; ill.filename[0] = aImg[8]; ill.hash = aImg[10]; ill.extention[0] = aImg[11]; ill.original_src[0] = "http://" + ill.domain + "/img-original/img/" + ill.year + "/" + ill.month + "/" + ill.day + "/" + ill.hour + "/" + ill.minute + "/" + ill.second + "/" + ill.filename[0] + "." + ill.extention[0] + ""; /* //因为不知道扩展名是什么,因此3种可能的扩展名都加入(反正不正确的无法下载) ill.filename[0] = aImg[9] + "_p0"; ill.extention[0] = aImg[10]; ill.filename[1] = ill.filename[0]; ill.extention[1] = aImg[10] == "jpg" ? "png" : "jpg"; ill.filename[2] = ill.filename[0]; ill.extention[2] = aImg[10] != "gif" ? "gif" : "png"; for (ti = 0; ti < 3; ti++) { ill.original_src[0] = "http://" + ill.domain + "/img-original/img/" + ill.year + "/" + ill.month + "/" + ill.day + "/" + ill.hour + "/" + ill.minute + "/" + ill.second + "/" + ill.filename[0] + "." + ill.extention[0] + ""; } */ getPicNum++; } else { alert("获取漫画原始图片路径信息失败,可能需要更新正则匹配模式。"); } } else { console.log(ill); alert("未知的作品类型。作品ID:" + ill.illust_id); } } //处理多图的回调函数 function dealManga(response, ill, index) { var parser = new DOMParser(); PageDOM = parser.parseFromString(response, "text/html"); var picture = PageDOM.getElementsByTagName("img")[0]; ill.original_src[0] = picture.src; //var regSrc = /https?:\/\/([^\/]+)\/.+\/(\d{4})\/(\d{2})\/(\d{2})\/(\d{2})\/(\d{2})\/(\d{2})\/((\d+)(?:[\-_][\w\d\-]+)?)\.([\w\d]+)/ig; //P站图片命名规则 var regSrc = new RegExp(illustPattern, "ig"); var aImg = regSrc.exec(picture.src); if (aImg.length >= 1) { ill.domain = aImg[1]; ill.year = aImg[2]; ill.month = aImg[3]; ill.day = aImg[4]; ill.hour = aImg[5]; ill.minute = aImg[6]; ill.second = aImg[7]; ill.filename[0] = aImg[8]; ill.hash = aImg[10]; ill.extention[0] = aImg[11]; getPicNum++; } else { alert("获取多图原始图片信息失败,可能需要更新正则匹配模式。"); } for (var mpi = 1; mpi < ill.page_count; mpi++) { ill.filename[mpi] = ill.filename[0].replace(/_p\d+$/ig, "_p" + mpi); ill.extention[mpi] = ill.extention[0]; ill.original_src[mpi] = ill.original_src[0].replace(ill.filename[0], ill.filename[mpi]); getPicNum++; } } //快速模式处理多图的回调函数 function dealMangaFast(response, ill, index) { var parser = new DOMParser(); PageDOM = parser.parseFromString(response, "text/html"); var mangaSec = PageDOM.getElementsByClassName("manga")[0]; var items = mangaSec.getElementsByClassName("item-container"); ill.page_count = items.length; console.log(ill.illust_id + "为多图,存在" + ill.page_count + "张"); dataset.illust_file_count += ill.page_count - 1; getPicNum++; for (var mpi = 1; mpi < ill.page_count; mpi++) { ill.filename[mpi] = ill.filename[0].replace(/_p\d+$/ig, "_p" + mpi); ill.extention[mpi] = ill.extention[0]; ill.original_src[mpi] = ill.original_src[0].replace(ill.filename[0], ill.filename[mpi]); getPicNum++; } } var ARIA2 = (function () { var jsonrpc_version = '2.0'; function get_auth(url) { return url.match(/^(?:(?![^:@]+:[^:@\/]*@)[^:\/?#.]+:)?(?:\/\/)?(?:([^:@]*(?::[^:@]*)?)?@)?/)[1]; }; function request(jsonrpc_path, method, params, getVersion) { var xhr = new XMLHttpRequest(); var auth = get_auth(jsonrpc_path); jsonrpc_path = jsonrpc_path.replace(/^((?![^:@]+:[^:@\/]*@)[^:\/?#.]+:)?(\/\/)?(?:(?:[^:@]*(?::[^:@]*)?)?@)?(.*)/, '$1$2$3'); // auth string not allowed in url for firefox var request_obj = { jsonrpc: jsonrpc_version, method: method, id: getVersion ? "1" : (new Date()).getTime().toString(), }; if (params) request_obj['params'] = params; if (auth && auth.indexOf('token:') == 0) params.unshift(auth); xhr.open("POST", jsonrpc_path + "?tm=" + (new Date()).getTime().toString(), true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); if (auth && auth.indexOf('token:') != 0) { xhr.setRequestHeader("Authorization", "Basic " + btoa(auth)); } xhr.send(JSON.stringify(request_obj)); if (getVersion) { xhr.onreadystatechange = function () //设置回调函数 { if (xhr.readyState == 4 && xhr.status == 200) { var JSONreq = JSON.parse(xhr.responseText); document.getElementsByName("PUBD_PRC_path_check")[0].innerHTML="发现Aria2 ver" + JSONreq.result.version; } else if (xhr.readyState == 4 && xhr.status != 200) document.getElementsByName("PUBD_PRC_path_check")[0].innerHTML="Aria2连接失败"; } } }; return function (jsonrpc_path) { this.jsonrpc_path = jsonrpc_path; this.addUri = function (uri, options) { request(this.jsonrpc_path, 'aria2.addUri', [[uri, ], options]); }; this.getVersion = function () { request(this.jsonrpc_path, 'aria2.getVersion', [], true); }; return this; } })(); //生成菜单 function buildMenu() { var menu_ul = document.createElement("ul"); menu_ul.className = "items"; //menu_ul.style.display = "none"; menu_ul.style.display = "block"; var li = document.createElement("li"); var a = document.createElement("a"); a.className = "item"; a.innerHTML = "Aria2 RPC"; a.onclick = function () { startProgram(0); li1.removeChild(menu_ul); }; li.appendChild(a); menu_ul.appendChild(li); var li = document.createElement("li"); var a = document.createElement("a"); a.className = "item"; a.innerHTML = "导出下载文件"; a.onclick = function () { if (exportWindow.parentNode != exportInsertPlace) exportInsertPlace.appendChild(exportWindow); li1.removeChild(menu_ul); startProgram(1); }; li.appendChild(a); menu_ul.appendChild(li); var li = document.createElement("li"); var a = document.createElement("a"); a.className = "item"; a.innerHTML = "生成直接链接"; a.onclick = function () { if (directLinkWindow.parentNode != directLinkInsertPlace) exportInsertPlace.appendChild(directLinkWindow); li1.removeChild(menu_ul); startProgram(2); }; li.appendChild(a); menu_ul.appendChild(li); var li = document.createElement("li"); li.className = "separated"; var a = document.createElement("a"); a.className = "item"; a.innerHTML = "设置"; a.onclick = function () { if (setWindow.parentNode != setInsertPlace) setInsertPlace.appendChild(setWindow); li1.removeChild(menu_ul); } li.appendChild(a); menu_ul.appendChild(li); return menu_ul; } function buildSetting() { var set = document.createElement("div"); set.id = "PixivUserBatchDownloadSetting"; set.className = "notification-popup"; set.style.display = "block"; //自定义CSS var style = document.createElement("style"); set.appendChild(style); style.type = "text/css"; style.innerHTML += [ ".PUBD_type_name" + "{\r\n" + [ 'width:120px', ].join(';\r\n') + "\r\n}", ".PUBD_PRC_path" + "{\r\n" + [ 'width:180px' , ].join(';') + "\r\n}", ".PUBD_save_dir,.PUBD_save_path,.PUBD_multiple_mask,.PUBD_image_src,.PUBD_referer" + "{\r\n" + [ 'width:340px' , ].join(';') + "\r\n}", "#PixivUserBatchDownloadSetting .thread" + "{\r\n" + [ 'margin:0', 'padding-left:5px', ].join(';') + "\r\n}", "#PixivUserBatchDownloadSetting .type_name" + "{\r\n" + [ 'height:60px', ].join(';') + "\r\n}", "#PixivUserBatchDownloadSetting .text" + "{\r\n" + [ 'height:4em', 'margin-right:0', ].join(';') + "\r\n}", ].join('\r\n'); //标题行 var h2 = document.createElement("h2"); h2.innerHTML = "Pixiv画师作品批量获取工具选项"; var a = document.createElement("a"); a.className = "_official-badge"; a.innerHTML = "设置说明"; a.href = "https://github.com/Mapaler/PixivUserBatchDownload/blob/master/README.md"; a.target = "_blank"; h2.appendChild(a); //设置内容 var ul = document.createElement("ul"); ul.className = "notification-list message-thread-list"; //设置-模式 var li = document.createElement("li"); li.className = "thread download_mode"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "分析模式"; divTime.innerHTML = "选择是否获得文件的准确扩展名" var lbl = document.createElement("label"); var ipt = document.createElement("input"); ipt.type = "radio"; ipt.value = 0; if (download_mod == ipt.value) ipt.setAttribute('checked', 'true'); ipt.name = "PUBD_download_mode"; lbl.appendChild(ipt); lbl.innerHTML += "准确模式(分析扩展名,mode=big除外)"; divText.appendChild(lbl); var lbl = document.createElement("label"); var ipt = document.createElement("input"); ipt.type = "radio"; ipt.value = 1; if (download_mod == ipt.value) ipt.setAttribute('checked', 'true'); ipt.name = "PUBD_download_mode"; lbl.appendChild(ipt); lbl.innerHTML += "快速模式(直接生成3种可能的扩展名,无法获取作品介绍)"; divText.appendChild(lbl); //设置-RPC Path var li = document.createElement("li"); li.className = "thread"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "Aria2 JSON-RPC Path"; divTime.innerHTML = "填写Aria2 JSON-RPC地址" var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_PRC_path"; ipt.name = "PUBD_PRC_path"; ipt.value = getConfig("PUBD_PRC_path"); divText.appendChild(ipt); var btnCheckLink = document.createElement("button"); btnCheckLink.className = "_button"; btnCheckLink.name = "PUBD_PRC_path_check"; btnCheckLink.innerHTML = "检测地址"; btnCheckLink.onclick = function () { this.innerHTML = "正在连接..."; var aria2 = new ARIA2(document.getElementsByName("PUBD_PRC_path")[0].value); aria2.getVersion(); } divText.appendChild(btnCheckLink); //设置-下载目录 var li = document.createElement("li"); li.className = "thread"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "下载目录"; divTime.innerHTML = "下载主目录绝对路径,留空使用Aria2默认路径" var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_save_dir"; ipt.name = "PUBD_save_dir"; ipt.value = getConfig("PUBD_save_dir"); divText.appendChild(ipt); //设置-图片网址 var li = document.createElement("li"); li.className = "thread"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "图片网址"; divTime.innerHTML = "下载的图片文件地址" var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_image_src"; ipt.name = "PUBD_image_src"; ipt.value = getConfig("PUBD_image_src"); divText.appendChild(ipt); //设置-下载路径 var li = document.createElement("li"); li.className = "thread"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "保存路径"; divTime.innerHTML = "分组保存的文件夹和文件名" var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_save_path"; ipt.name = "PUBD_save_path"; ipt.value = getConfig("PUBD_save_path"); divText.appendChild(ipt); //设置-referer(引用)地址 var li = document.createElement("li"); li.className = "thread"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "引用页面"; divTime.innerHTML = "Referer,访问来源页面地址" var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_referer"; ipt.name = "PUBD_referer"; ipt.value = getConfig("PUBD_referer"); divText.appendChild(ipt); //设置-类型命名 var li = document.createElement("li"); li.className = "thread type_name"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "类型命名"; divTime.innerHTML = "%{type_name}的内容" var lbl = document.createElement("label"); lbl.innerHTML = "单图:"; var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_type_name"; ipt.name = "PUBD_type_name0"; ipt.value = getConfig("PUBD_type_name0"); lbl.appendChild(ipt); divText.appendChild(lbl); var lbl = document.createElement("label"); lbl.innerHTML = "多图:"; var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_type_name"; ipt.name = "PUBD_type_name1"; ipt.value = getConfig("PUBD_type_name1"); lbl.appendChild(ipt); divText.appendChild(lbl); var lbl = document.createElement("label"); lbl.innerHTML = "动图:"; var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_type_name"; ipt.name = "PUBD_type_name2"; ipt.value = getConfig("PUBD_type_name2"); lbl.appendChild(ipt); divText.appendChild(lbl); var lbl = document.createElement("label"); lbl.innerHTML = "单漫:"; var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_type_name"; ipt.name = "PUBD_type_name3"; ipt.value = getConfig("PUBD_type_name3"); lbl.appendChild(ipt); divText.appendChild(lbl); //设置-多图掩码 var li = document.createElement("li"); li.className = "thread"; var divTime = document.createElement("div"); divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "多图掩码内容"; divTime.innerHTML = "替换%{multiple}的内容" var ipt = document.createElement("input"); ipt.type = "text"; ipt.className = "PUBD_multiple_mask"; ipt.name = "PUBD_multiple_mask"; ipt.value = getConfig("PUBD_multiple_mask"); divText.appendChild(ipt); //确定按钮行 var confirmbar = document.createElement("div"); confirmbar.className = "_notification-request-permission"; confirmbar.style.display = "block"; var btnConfirm = document.createElement("button"); btnConfirm.className = "_button"; btnConfirm.innerHTML = "确定"; var btnCancel = document.createElement("button"); btnCancel.className = "_button"; btnCancel.innerHTML = "取消"; btnCancel.onclick = function () { set.parentNode.removeChild(set); } var btnReset = document.createElement("button"); btnReset.className = "_button"; btnReset.innerHTML = "重置设置"; btnReset.onclick = function () { ResetConfig(); } confirmbar.appendChild(btnConfirm); confirmbar.appendChild(btnCancel); confirmbar.appendChild(btnReset); set.appendChild(h2); set.appendChild(ul); set.appendChild(confirmbar); btnConfirm.onclick = function () { setConfig("PUBD_reset", Version); var radioObj = document.getElementsByName("PUBD_download_mode"); for (var oi = 0; oi < radioObj.length; oi++) { if (radioObj[oi].checked) { setConfig("PUBD_download_mode", oi); //radioObj[oi].value break; } } setConfig("PUBD_PRC_path", document.getElementsByName("PUBD_PRC_path")[0].value); setConfig("PUBD_save_dir", document.getElementsByName("PUBD_save_dir")[0].value); setConfig("PUBD_save_path", document.getElementsByName("PUBD_save_path")[0].value); setConfig("PUBD_type_name0", document.getElementsByName("PUBD_type_name0")[0].value); setConfig("PUBD_type_name1", document.getElementsByName("PUBD_type_name1")[0].value); setConfig("PUBD_type_name2", document.getElementsByName("PUBD_type_name2")[0].value); setConfig("PUBD_type_name3", document.getElementsByName("PUBD_type_name3")[0].value); setConfig("PUBD_multiple_mask", document.getElementsByName("PUBD_multiple_mask")[0].value); btnCancel.onclick(); } return set; } //生成导出下载窗口 function buildExport() { var set = document.createElement("div"); set.id = "PixivUserBatchDownloadExport"; set.className = "notification-popup"; set.style.display = "block"; //自定义CSS var style = document.createElement("style"); set.appendChild(style); style.type = "text/css"; style.innerHTML += [ ".PUBD_batch" + "{\r\n" + [ 'width:350px', 'max-width:350px', 'min-width:350px', 'height:300px', ].join(';\r\n') + "\r\n}", ].join('\r\n'); //标题行 var h2 = document.createElement("h2"); h2.innerHTML = "Aria2导出"; //设置内容 var ul = document.createElement("ul"); ul.className = "notification-list message-thread-list"; //导出-Batch var li = document.createElement("li"); //li.className = "thread"; //var divTime = document.createElement("div"); //divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; //li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "命令行提示符批处理"; //divTime.innerHTML = "保存为bat文件运行" var ipt = document.createElement("textarea"); ipt.className = "PUBD_batch"; ipt.name = "PUBD_batch"; ipt.wrap = "off"; divText.appendChild(ipt); //导出-Down var li = document.createElement("li"); //li.className = "thread"; //var divTime = document.createElement("div"); //divTime.className = "time date"; //var divName = document.createElement("div"); //divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; //li.appendChild(divTime); //li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); //divName.innerHTML = "下载命令"; //divTime.innerHTML = "保存为bat文件运行" var btnExport = document.createElement("a"); btnExport.className = "_button"; btnExport.name = "PUBD_down"; btnExport.target = "_blank" btnExport.download = "aria2" + ".session.txt" btnExport.innerHTML = "导出Aria2会话文件"; //btnExport.onclick = function () { startProgram(2); } divText.appendChild(btnExport); //确定按钮行 var confirmbar = document.createElement("div"); confirmbar.className = "_notification-request-permission"; confirmbar.style.display = "block"; var btnClose = document.createElement("button"); btnClose.className = "_button"; btnClose.innerHTML = "关闭"; btnClose.onclick = function () { set.parentNode.removeChild(set); } confirmbar.appendChild(btnClose); set.appendChild(h2); set.appendChild(ul); set.appendChild(confirmbar); return set; } //生成直接下载链接窗口 function buildDirectLink() { var set = document.createElement("div"); set.id = "PixivUserBatchDownloadDirectLink"; set.className = "notification-popup"; set.style.display = "block"; //自定义CSS var style = document.createElement("style"); set.appendChild(style); style.type = "text/css"; style.innerHTML += [ ".PUBD_dLink" + "{\r\n" + [ 'width:100%', 'height:300px', 'overflow:scroll', 'border:1px solid #becad8', ].join(';\r\n') + "\r\n}", "#PixivUserBatchDownloadDirectLink a" + "{\r\n" + [ 'display:inline', 'padding:0', 'background:none', 'color: #258fb8', 'white-space:nowrap', ].join(';\r\n') + "\r\n}", ].join('\r\n'); //标题行 var h2 = document.createElement("h2"); h2.innerHTML = "直接下载链接"; //设置内容 var ul = document.createElement("ul"); ul.className = "notification-list message-thread-list"; //导出-Batch var li = document.createElement("li"); //li.className = "thread"; //var divTime = document.createElement("div"); //divTime.className = "time date"; var divName = document.createElement("div"); divName.className = "name"; var divText = document.createElement("div"); divText.className = "text"; //li.appendChild(divTime); li.appendChild(divName); li.appendChild(divText); ul.appendChild(li); divName.innerHTML = "用<a href=\"https://addons.mozilla.org/firefox/addon/downthemall/\" target=\"_blank\">DownThemAll!</a>的批量下载,重命名掩码设置为“*title*”<br />" + "如果发生403错误,使用<a href=\"https://addons.mozilla.org/firefox/addon/referrer-control/\" target=\"_blank\">RefControl</a>添加站点“pixiv.net”,设置“伪装-发送站点根目录”"; //divTime.innerHTML = "保存为bat文件运行" var ipt = document.createElement("div"); ipt.className = "PUBD_dLink"; divText.appendChild(ipt); //确定按钮行 var confirmbar = document.createElement("div"); confirmbar.className = "_notification-request-permission"; confirmbar.style.display = "block"; var btnClose = document.createElement("button"); btnClose.className = "_button"; btnClose.innerHTML = "关闭"; btnClose.onclick = function () { set.parentNode.removeChild(set); } confirmbar.appendChild(btnClose); set.appendChild(h2); set.appendChild(ul); set.appendChild(confirmbar); return set; } //检测下载完成情况 function startProgramCheck(mode) { if (getPicNum > 0 && getPicNum >= dataset.illust_file_count) { li2.innerHTML = "获取完成:" + getPicNum + "/" + dataset.illust_file_count; startDownload(mode); clearInterval(downOver); } else { li2.innerHTML = "已获取图像地址:" + getPicNum + "/" + dataset.illust_file_count; var PUBD_batch = document.getElementsByName("PUBD_batch")[0]; if (PUBD_batch) PUBD_batch.value = li2.innerHTML; var PUBD_dLink = document.getElementsByClassName("PUBD_dLink")[0]; if (PUBD_dLink) PUBD_dLink.innerHTML = li2.innerHTML; } console.log("获取" + getPicNum + "/" + dataset.illust_file_count); } //开始构建下载 function startDownload(mode) { switch (mode) { case 0: //RPC模式 var aria2 = new ARIA2(getConfig("PUBD_PRC_path")); for (var ii = 0; ii < dataset.illust.length; ii++) { var ill = dataset.illust[ii]; for (var pi = 0; pi < ill.original_src.length; pi++) { var ext = ill.extention[pi]; for (var dmi = 0; dmi < ((download_mod == 1 && ill.type != 2 || ill.type == 3) ? 3 : 1) ; dmi++) { var srtObj = { "out": replacePathSafe(showMask(getConfig("PUBD_save_path"), ill, pi, replacePathSafe), true), "referer": showMask(getConfig("PUBD_referer"), ill, pi), "remote-time": "true", "allow-overwrite": "false", "auto-file-renaming": "false" } if(getConfig("PUBD_save_dir").length>0) { srtObj.dir = replacePathSafe(showMask(getConfig("PUBD_save_dir"), ill, pi, replacePathSafe), true); } aria2.addUri(showMask(getConfig("PUBD_image_src"), ill, pi), srtObj); //快速模式重新更改扩展名 if (download_mod == 1) { switch (dmi) { case 0: ill.extention[pi] = ext == "jpg" ? "png" : "jpg"; break; case 1: ill.extention[pi] = ext != "gif" ? "gif" : "png"; break; case 2: ill.extention[pi] = ext; //操作完还原 break; default: } ill.original_src[pi] = ill.original_src[0].replace(/\.\w+$/, "." + ill.extention[pi]); } } } } alert("全部发送完毕"); break; case 1: //生成BAT下载命令模式 var txt = ""; var downtxt = ""; for (var ii = 0; ii < dataset.illust.length; ii++) { var ill = dataset.illust[ii]; for (var pi = 0; pi < ill.original_src.length; pi++) { var ext = ill.extention[pi]; for (var dmi = 0; dmi < ((download_mod == 1 && ill.type != 2 || ill.type == 3) ? 3 : 1) ; dmi++) { txt += "aria2c --allow-overwrite=false --auto-file-renaming=false --remote-time=true " + ((getConfig("PUBD_save_dir").length > 0) ? "--dir=\"" + replacePathSafe(showMask(getConfig("PUBD_save_dir"), ill, pi, replacePathSafe), true) + "\" " : "") + "--out=\"" + replacePathSafe(showMask(getConfig("PUBD_save_path"), ill, pi, replacePathSafe), true) + "\" --referer=\"" + showMask(getConfig("PUBD_referer"), ill, pi) + "\" \"" + showMask(getConfig("PUBD_image_src"), ill, pi) + "\""; downtxt += showMask(getConfig("PUBD_image_src"), ill, pi) + ((getConfig("PUBD_save_dir").length > 0) ? "\r\n dir=" + replacePathSafe(showMask(getConfig("PUBD_save_dir"), ill, pi, replacePathSafe), true) : "") + "\r\n out=" + replacePathSafe(showMask(getConfig("PUBD_save_path"), ill, pi, replacePathSafe), true) + "\r\n referer=" + showMask(getConfig("PUBD_referer"), ill, pi) + "\r\n allow-overwrite=false" + "\r\n auto-file-renaming=false" + "\r\n remote-time=true" ; txt += "\r\n"; downtxt += "\r\n"; //快速模式重新更改扩展名 if (download_mod == 1) { switch (dmi) { case 0: ill.extention[pi] = ext == "jpg" ? "png" : "jpg"; break; case 1: ill.extention[pi] = ext != "gif" ? "gif" : "png"; break; case 2: ill.extention[pi] = ext; //操作完还原 break; default: } ill.original_src[pi] = ill.original_src[0].replace(/\.\w+$/, "." + ill.extention[pi]); } } } } var txta = document.getElementsByName("PUBD_batch")[0]; var btn = document.getElementsByName("PUBD_down")[0]; if (txta) txta.value = txt; var downurl = "data:text/html;charset=utf-8," + encodeURIComponent(downtxt); if (btn) { btn.href = downurl; btn.download = dataset.user_id + "_" + dataset.user_name + ".session.txt" } //console.log(txt); break; case 2: //生成直接下载链接模式 var linksDom = document.getElementsByClassName("PUBD_dLink")[0]; linksDom.innerHTML = ""; for (var ii = 0; ii < dataset.illust.length; ii++) { var ill = dataset.illust[ii]; for (var pi = 0; pi < ill.original_src.length; pi++) { var ext = ill.extention[pi]; for (var dmi = 0; dmi < ((download_mod == 1 && ill.type != 2 || ill.type == 3) ? 3 : 1) ; dmi++) { var dlink = document.createElement("a"); var br = document.createElement("br"); dlink.href = showMask(getConfig("PUBD_image_src"), ill, pi); dlink.title = replacePathSafe(showMask(getConfig("PUBD_save_path"), ill, pi, replacePathSafe), true); dlink.innerHTML = dlink.title; //showMask("%{illust_id}_%{title}_p%{page}", ill, pi); linksDom.appendChild(dlink); linksDom.appendChild(br); //快速模式重新更改扩展名 if (download_mod == 1) { switch (dmi) { case 0: ill.extention[pi] = ext == "jpg" ? "png" : "jpg"; break; case 1: ill.extention[pi] = ext != "gif" ? "gif" : "png"; break; case 2: ill.extention[pi] = ext; //操作完还原 break; default: } ill.original_src[pi] = ill.original_src[0].replace(/\.\w+$/, "." + ill.extention[pi]); } } } } break; default: alert("未知的下载模式"); break; } //console.log(dataset); }; function getConfig(key, type) { //-1原始,返回null,0 = 字符,返回空, 1 = 数字返回0, if (type == undefined) type = 0; var value = window.localStorage.getItem(key); if (window.localStorage) { switch (type) { case 0: //字符 return value || ""; break; case 1: //数字 return value ? parseInt(0 + value.replace(/\D/ig, "")) : 0; break; default: //原始 return value; } } else { console.log("浏览器不支持本地储存。"); } }; function setConfig(key, value) { if (window.localStorage) { window.localStorage.setItem(key, value); } else { console.log("浏览器不支持本地储存。"); } }; function ResetConfig(part) { function partReset(key,value,ispart) { if (ispart && !getConfig(key, -1) || !ispart) setConfig(key, value); } partReset("PUBD_reset", Version, part); partReset("PUBD_PRC_path", "http://localhost:6800/jsonrpc", part); partReset("PUBD_download_mode", 0, part); partReset("PUBD_save_dir", "C:\\Users\\Public\\Pictures\\PixivUserBatchDownload\\", part); partReset("PUBD_image_src", "%{original_src}", part); partReset("PUBD_save_path", "%{user_id}_%{user_name}\\%{multiple}%{filename}.%{extention}", part); partReset("PUBD_referer", "%{url}", part); partReset("PUBD_type_name0", "", part); partReset("PUBD_type_name1", "multiple", part); partReset("PUBD_type_name2", "ugoku", part); partReset("PUBD_type_name3", "manga", part); partReset("PUBD_multiple_mask", "%{illust_id}_%{title}\\", part); if (document.getElementsByName("PUBD_PRC_path")[0]) document.getElementsByName("PUBD_PRC_path")[0].value = getConfig("PUBD_PRC_path"); //if (document.getElementsByName("PUBD_download_mode")[0]) document.getElementsByName("PUBD_download_mode")[getConfig("PUBD_download_mode",1)].checked = true; if (document.getElementsByName("PUBD_download_mode")[0]) document.getElementsByName("PUBD_download_mode")[0].checked = true; if (document.getElementsByName("PUBD_save_dir")[0]) document.getElementsByName("PUBD_save_dir")[0].value = getConfig("PUBD_save_dir"); if (document.getElementsByName("PUBD_image_src")[0]) document.getElementsByName("PUBD_image_src")[0].value = getConfig("PUBD_image_src"); if (document.getElementsByName("PUBD_save_path")[0]) document.getElementsByName("PUBD_save_path")[0].value = getConfig("PUBD_save_path"); if (document.getElementsByName("PUBD_referer")[0]) document.getElementsByName("PUBD_referer")[0].value = getConfig("PUBD_referer"); if (document.getElementsByName("PUBD_type_name0")[0]) document.getElementsByName("PUBD_type_name0")[0].value = getConfig("PUBD_type_name0"); if (document.getElementsByName("PUBD_type_name1")[0]) document.getElementsByName("PUBD_type_name1")[0].value = getConfig("PUBD_type_name1"); if (document.getElementsByName("PUBD_type_name2")[0]) document.getElementsByName("PUBD_type_name2")[0].value = getConfig("PUBD_type_name2"); if (document.getElementsByName("PUBD_type_name3")[0]) document.getElementsByName("PUBD_type_name3")[0].value = getConfig("PUBD_type_name3"); if (document.getElementsByName("PUBD_multiple_mask")[0]) document.getElementsByName("PUBD_multiple_mask")[0].value = getConfig("PUBD_multiple_mask"); }; function showMask(str,ill,index,deal) { if (deal == undefined) deal = function (arg) { return arg;} var newTxt = str; var regMask = /%{([^}]+)}/g; var rs = regMask.exec(str); while (rs != null) { if (rs[1] == "multiple") { var rp = ""; if (ill.type == 1) { if (getConfig("PUBD_multiple_mask").indexOf("%{multiple}") >= 0 || getConfig("PUBD_multiple_mask").indexOf("%{type_name}") >= 0 && getConfig("PUBD_type_name" + ill.type).indexOf("%{multiple}" >= 0)) console.log("掩码中存在循环自身引用"); else var rp = showMask(getConfig("PUBD_multiple_mask"), ill, index, deal); } newTxt = newTxt.replace(rs[0], rp); } else if (rs[1] == "type_name") { var rp = ""; if (getConfig("PUBD_type_name" + ill.type).indexOf("%{type_name}") >= 0 || getConfig("PUBD_type_name" + ill.type).indexOf("%{multiple}") >= 0 && getConfig("PUBD_multiple_mask").indexOf("%{type_name}" >= 0)) console.log("掩码中存在循环自身引用"); else var rp = showMask(getConfig("PUBD_type_name" + ill.type), ill, index, deal); newTxt = newTxt.replace(rs[0], rp); } else if (rs[1] == "page") newTxt = newTxt.replace(rs[0], index); else if (rs[1] == "filename" || rs[1] == "extention" || rs[1] == "original_src") newTxt = newTxt.replace(rs[0], deal(ill[rs[1]][index])); else if (ill[rs[1]] != undefined) newTxt = newTxt.replace(rs[0], deal(ill[rs[1]])); else if (dataset[rs[1]] != undefined) newTxt = newTxt.replace(rs[0], deal(dataset[rs[1]])); var rs = regMask.exec(str); } return newTxt; } function replacePathSafe(str, keepTree) //去除Windows下无法作为文件名的字符,目前为了支持Linux暂不替换两种斜杠吧。 { if (keepTree) return str.replace(/[\*\?"<>\|]/ig, "_"); else return str.replace(/[\\\/:\*\?"<>\|]/ig, "_"); } })();