Greasy Fork is available in English.

PixivUserBatchDownload

Batch download pixiv user's images in one key.(Based on Aria2)

< Rückmeldungen aufPixivUserBatchDownload

Frage/Kommentar

§
Veröffentlicht: 06.03.2017

請教一下命名規則

我想將保存下來的檔名加入發佈的年月日
還有頁數從1開始而不是0開始

請問有方法改到嗎?感恩

枫谷剑仙Verfasser
§
Veröffentlicht: 07.03.2017

这些都需要使用掩码的高级用法,详情查看wiki掩码篇 https://github.com/Mapaler/PixivUserBatchDownload/wiki/%E6%8E%A9%E7%A0%81

页数很简单,%{page+1}就是页数加一了

发布年月日可以从作品的createdate中获取,例如 illust.createdate 的值为 "2012-10-05T18:44:56+09:00"。这其实是UTC时间,然后使用JS语句提取你需要的部分。需要注意,获得的月份是0-11,需要额外加1。

比如我将 %{new Date(illust.create_date).getFullYear()}-%{new Date(illust.create_date).getMonth()+1}-%{new Date(illust.create_date).getDay()}_加到页数前,结果就会是如图三。完整的掩码如下。

%{illust.user.id}/%{illust.filename}%{new Date(illust.create_date).getFullYear()}-%{new Date(illust.create_date).getMonth()+1}-%{new Date(illust.create_date).getDay()}_%{page}.%{illust.extention}
§
Veröffentlicht: 07.03.2017

感謝解答!!
我的設定是這樣的

%{illust.user.id}_%{illust.user.name}/%{illust.user.name}-%{illust.title}_[%{illust.filename}]%{page+1}_%{new Date(illust.create_date).getFullYear()}年-%{new Date(illust.create_date).getMonth()+1}月-%{new Date(illust.create_date).getDay()}日_.%{illust.extention}

不過 "Day" 如圖,因為日數沒+1所以亂了嗎?
3月4日發佈的變成了3月6日. 然後3月6日發佈的變成了3月1日
全部都是個位日數,也有很多是0日

枫谷剑仙Verfasser
§
Veröffentlicht: 07.03.2017
Bearbeitet: 10.03.2017
枫谷剑仙Verfasser
§
Veröffentlicht: 08.03.2017
Bearbeitet: 08.03.2017

今天看了一下,要 .getDate() 才是日,.getDay()获取的是星期几(0-6),昨天我测试那天刚好日和星期几都是5就没发现问题。 这里有函数列表 http://www.w3school.com.cn/jsref/jsrefobjdate.asp

刚才我更新的5.02版,支持这种创建变量的写法了(之前的版本会无线循环卡死) %{var dt=new Date(illust.create_date)}%{dt.getFullYear()}年-%{dt.getMonth()+1}月-%{dt.getDate()}日

另外,如果你需要月份日期全部两位数,可以使用三目运算符(条件运算符) http://www.w3school.com.cn/js/projsoperators_conditional.asp 这样写dt.getMonth()<9?"0"+(dt.getMonth()+1):dt.getMonth()+1dt.getDate()<10?"0"+dt.getDate():dt.getDate()

枫谷剑仙Verfasser
§
Veröffentlicht: 10.03.2017

刚才新写的wiki,可能对你有用

不变的作者名称

有些人想把作者名称加入到文件夹名称里面去,但是很多作者经常参展,会在名称后面加上展会位置,就导致了下载路径发生变化而重复下载,以前的解决办法是只使用作者数字id,而这也确实缺少了辨识度。

现在V5版就可以在一定程度上解决这一问题,因为我发现大部分画师都会用“昵称@展会名”的方式来改名,那么我们只需要取@符号前的即可是固定不变的作者名了。首先通过illust.user.name获取画师名,然后画师名.split("@")会得到以@字符分割的字符串数组,然后数组[0]取第一个对象。全部连起来就是illust.user.name.split("@")[0]

于是如果一个画师名叫“枫谷剑仙@C128 第2天东区-53a”,%{illust.user.name.split("@")[0]}就会输出“枫谷剑仙”

§
Veröffentlicht: 12.03.2017
Bearbeitet: 12.03.2017

感激不盡!!真懂在下那強迫症的方式呢
以往都是用 Chrome 的擴展 Pixiv Downloader ,有點習慣這套命名規則

因為我不是很懂,可以麻煩幫我修改一下嗎?
想要的是: 單圖只需要作品號碼,不需要 "_p" 頁數
多圖規則: 01,02,03 ... 10,11,12 etc.

%{illust.user.id}_%{illust.user.name.split("@")[0]}/%{illust.user.name.split("@")[0]}-%{illust.title}_【%{illust.filename.split("_")[0]}】P,%{page+1}_%{var dt=new Date(illust.create_date)}%{dt.getFullYear()}年,%{dt.getMonth()<9?"0"+(dt.getMonth()+1):dt.getMonth()+1}月,%{dt.getDate()<10?"0"+(dt.getDate()):dt.getDate()}日_.%{illust.extention}

-

另外 動圖 一直都用 ugoira_Mod.user.js 這個來獲得 gif檔
// 書籤鍵 ブックマークレット

如果不會有衝突之類 , 值得參考一下 / 加入類似功能


btw
推薦這兩位畫師,大大應該也喜歡的
よむ , 小忍.pr

枫谷剑仙Verfasser
§
Veröffentlicht: 13.03.2017
Bearbeitet: 15.03.2017

illust.filenameillust.extention不是P站原生返回的,是我自己从原图地址中截取添加的,为了方便修改页数,所以把页数去除了。 其实illust.filename单图时的规则等于illust.id+"_p",动图时等于illust.id+"_ugoira"。 只需要判断是不是单图来生成字符就行了。 如果不同类型之间差异比较小,那么用条件运算符即可,如果差异很大导致掩码过长,最好就用自定义掩码来缩减。 你可以理解为

如果(不是单图)
    输出页数;
否则
    输出空白字符;

掩码中的 原理及高级用法-逻辑判断示例 和 自定义掩码中的 示例-2 就是讲的为多图、动图这些图片多创建一层文件夹,将其稍加改造,不要创建文件夹字符,而是创建“p”就行了。 `%{illust.id}%{(illust.pagecount>1||illust.type=="ugoira")?"p":""}`掩码的意义就是,当作品页数超过1或者类型是动图时会在作品id后面跟上“p”(注:动图的page_count也为1,所以需要同时判断是不是动图)。 如果你要多图、动图产生不同的后缀,那么写在一起太复杂了,最好用自定义掩码来化简。


多图数字变为两位请参考前面的月日,page<9?"0"+(page+1):page+1。不过有三位数的时候你准备怎么办?虽然也可以搞,但是更难理解哦。而且不同作品数字位数不一样不是会更强迫么?
我也考虑过直接将动图转换成gif或apng,但是我开发脚本最初目的是让人可以在各种设备上跨平台获取下载,因此选择了使用Aria2+浏览器JS扩展的方式,这样在Windows、Linux、Mac、Android上都可以运行Aria2进行下载,并且服务器可以远程访问,比如我单位上网是按照数据流量付费,所以我在办公室浏览,发送到家里运行有Aria2的路由器上下载。 那么问题就来了 我找不到一个可以跨平台接受信息并转换格式的第三方软件,而我自己目前也暂时没有能力和精力去重新学习一门跨平台本地语言来编写转换程序。 我也考虑过在本地浏览器端下载生成apng后再传输给aria2,但是aria2不支持直接post下载数据。
这两个画师我都有放浏览器收藏夹(P站内收藏太慢了),但是第一个偏真实感总给人一种臭臭的感觉,第二个裸足居多,我还是喜欢大嘘翼つばさEdogawaKidあかざ这类,另外这个也不错ラッキョ(可爱的男孩子注意)

§
Veröffentlicht: 14.03.2017

關於頁數方面,抱歉還是不太理解。
%{page<9?:"0"+(page+1):page+1}
這個容易理解得到
%{illust.id}%{(illust.page_count>1||illust.type=="ugoira")?"_p":""}
但再加上這條規則,我不知道如何加上 也許太複雜了

也就是單圖不加上頁數;多圖則從01計起
三位數的時候...看過的比較少超過100頁,就算超過也可以用Ant Renamer稍為改名

枫谷剑仙Verfasser
§
Veröffentlicht: 15.03.2017
Bearbeitet: 15.03.2017

JS里面,英文引号包括的表示字符串,0表示数字0,"0",表示字符“0”。当两个数字相加时得到的是数学相加,两个字符串相加时,表示字符串的连结——1+2=3,"1"+"2"="12"。"0"+(page+1),其实更精确的写法是"0"+(page+1).toString(),也就是先计算括号内page+1,然后转换为字符和"0"相加,但是字符串和数字相加时,JS会自动将数字转换为字符串,所以toString()方法就可以省略了。 因为page是从0开始,所以当page=9时你需要的page+1=10,已经是两位了。 那么page<9 ? "0"+(page+1) : page+1,的意义(之前多打了个冒号)就是,当page<9,先page+1,然后在前面加上0,否则直接输出page+1。

之前的不太完整,我修改了一下 %{illust.id}%{(illust.page_count>1||illust.type=="ugoira")?"_p"+page:""}.%{illust.extention} JS里||表示或(or),&&表示与(and),!表示否(not),请参见JS逻辑运算符 illust.page_count>1||illust.type=="ugoira"的意思是 当作品的页数大于1 或者 作品类型是动画 ,这些都是P站返回的内容。动画类型虽然页数等于1,但是又是多张图片,我一般把多图和动图当作一个类型来管理,所以需要同时判断两个。当多或动时,输出"p"+page,否则输出没内容的空字符串"",加上前面的作品id(就是illust.filename前面的那串数字),结果就会是:单图"1234.jpg",多图动图"4567p0.jpg"、"4567_p1.jpg"。

上面的如果都看懂了,那么就结合一下 (illust.page_count>1||illust.type=="ugoira")?"_p"+(page<9?"0"+(page+1):page+1):"" 完整写法 %{illust.id}%{(illust.page_count>1||illust.type=="ugoira")?"_p"+(page<9?"0"+(page+1):page+1):""}.%{illust.extention} 结果就会是:单图"1234.jpg",多图动图"4567p01.jpg"、"4567p02.jpg"。

这种复杂的内容我建议你使用自定义掩码来完成吧,新建一条自定义掩码,名字可以按照你喜欢的自己取 名字:2位页码从1开始 逻辑:illust.page_count>1||illust.type=="ugoira" 内容:%{"_p"+(page<9?"0"+(page+1):page+1)}(图片上忘记写外面的括号了) 前面的写法就可以使用来缩短大小。 %{illust.id}%{2位页码从1开始}.%{illust.extention}

枫谷剑仙Verfasser
§
Veröffentlicht: 15.03.2017
Bearbeitet: 15.03.2017

知难而上

这一串可以得到符合作品图片数量的"0"

//掩码内一行写法
new Array((illust.type=="ugoira"?illust.ugoira_metadata.frames.length:illust.page_count).toString().length - (page+1).toString().length + 1).join("0")

//对掩码进行分行解析
//先获取作品总页数
page_count = illust.type=="ugoira"?illust.ugoira_metadata.frames.length:illust.page_count;
//等同于如下写法,就是动图时是帧长度,否则就是原来的页数
if(illust.type=="ugoira")
    page_count = illust.ugoira_metadata.frames.length;
else
    page_count = illust.page_count;
//页数从数字转换为字符串,然后获取字符串长度,减去当前页数的长度就是我们需要补0的个数。
zero_count = page_count.toString().length - (page+1).toString().length;
//创建一个补零长度加一个元素的新数组(新的内容是空白的),为什么要加一看下面
arr = new Array(zero_count + 1);
//用"0"字符连接数组里每一个元素,输出字符串。
arr.join("0");
//因为是新建的空数组,元素内没有内容,所以就只剩数组长度减一个"0"了,这也是为什么前面要加一
//比如[1,2,3,4].join("*")得到"1*2*3*4",[,,,].join("*")得到"***"

new Array((illust.type=="ugoira"?illust.ugoira_metadata.frames.length:illust.page_count).toString().length - (page+1).toString().length + 1).join("0") + (page+1) 上面的结果就是,9页以下的作品输出"x",99页以下的输出"0x"、"xx",999页以下的输出"00x"、"0xx"、"xxx",依此类推。

枫谷剑仙Verfasser
§
Veröffentlicht: 17.03.2017
Bearbeitet: 17.03.2017

ES6标准开始支持string.repeat()了,就更简单了,不过需要一定的浏览器版本支持。

//生成多个0改成这样
"0".repeat((illust.type=="ugoira"?illust.ugoira_metadata.frames.length:illust.page_count).toString().length - (page+1).toString().length)

//再加上页码
"0".repeat((illust.type=="ugoira"?illust.ugoira_metadata.frames.length:illust.page_count).toString().length - (page+1).toString().length) + (page+1)
§
Veröffentlicht: 17.03.2017

感謝您的耐心說明与指導,受教了

枫谷剑仙Verfasser
§
Veröffentlicht: 24.04.2017

刚才更新了新版支持输出文本,方便你测试不同的掩码了,设置窗口点击保存设置后,下载窗口直接重新点击输出文本即可。 我也测试了我之前写的掩码,发现是正确可用的,自动生成不同数量的“0”。

§
Veröffentlicht: 10.05.2017

大大 從5月1日開始 日期都沒加上去了 可告知怎麼了嗎?

我一直沒改動過 還是一樣
%{var dt=new Date(illust.create_date)}%{dt.getFullYear()}年,%{dt.getMonth()<9?"0"+(dt.getMonth()+1):dt.getMonth()+1}月,%{dt.getDate()<10?"0"+(dt.getDate()):dt.getDate()}日

完整的
%{illust.user.id}_%{illust.user.name.split("@")[0]}/%{illust.user.name.split("@")[0]}-%{illust.title}_【%{illust.id}】%{(illust.page_count>1||illust.type=="ugoira")?"P,"+(page<9?"0"+(page+1):page+1):""}_%{var dt=new Date(illust.create_date)}%{dt.getFullYear()}年,%{dt.getMonth()<9?"0"+(dt.getMonth()+1):dt.getMonth()+1}月,%{dt.getDate()<10?"0"+(dt.getDate()):dt.getDate()}日_.%{illust.extention}

枫谷剑仙Verfasser
§
Veröffentlicht: 11.05.2017
Bearbeitet: 11.05.2017

抱歉,之前更新其他功能的时候修改的代码影响了这一部分,dt生成失败,于是后面所有的时间都显示不出来。 现在已经解决了,更新到最新脚本即可。

掩码不正常,可以查看控制台,看看是不是掩码出错了。 可以直接用文本输出格式测试输出的内容是什么样。(但文本输出不会自动去掉Windows文件名内不可使用的特殊字符,直接下载会去掉) 不用理图2的掩码,那只是我测试用的,你继续用你现在的就行

枫谷剑仙Verfasser
§
Veröffentlicht: 11.05.2017

现在窗口可以拉宽的

你的标题为什么会显示成这样?我在Firefox和Chrome都不会这样啊。

§
Veröffentlicht: 11.05.2017

现在窗口可以拉宽的

你的标题为什么会显示成这样?我在Firefox和Chrome都不会这样啊。

因為我安裝了 Favicon顯示 的腳本,很多連結的圖標也會一看就知道是什麼站 覺得挺方便 也好看 (雖然也有反效果)

另外我最喜歡的畫師【hews】 @hews__ 一直下載不到,可以幫一下嗎?

枫谷剑仙Verfasser
§
Veröffentlicht: 11.05.2017

有哪里不能用的呢?

§
Veröffentlicht: 12.05.2017

全部都
Error Download aborted
Exception: [AbstractCommand.cc:403]
The system cannot find the path specified.

枫谷剑仙Verfasser
§
Veröffentlicht: 13.05.2017
Bearbeitet: 13.05.2017

今天找了下原因,发现是因为文件夹名、文件名不能以空格结尾。该作者昵称@符号左边有个空格,你代码产生的路径为4338012_【hews】[空格]/【hews】 -NEET Tantei (Detective) Alice_【30466382】_2012年,09月,30日_.png,就会因为无法创建前面的文件夹而导致保存失败。

解决办法,不分割@符号左边, 或者分割后替换掉首尾可能存在的空格。.replace(/(^ | $)/g,"")

Antwort schreiben

Anmelden um eine Antwort zu senden.